趣味でモバイルアプリを開発する際にFlutterを使っているが、何度学んでも少し時間が空くとriverpodの使い方を忘れてしまう・・
この記事は未来の自分のためのメモです。
特徴
flutter pub add flutter_riverpod
flutter pub add riverpod_annotation
flutter pub add dev:riverpod_generator
flutter pub add dev:build_runner
flutter pub add dev:custom_lint
flutter pub add dev:riverpod_lint
import 'package:flutter_riverpod/flutter_riverpod.dart';
void main() {
// runApp(const MyApp());
runApp(const ProviderScope(child: MyApp()));
}
import 'package:riverpod_annotation/riverpod_annotation.dart';
// コマンドで自動生成されるファイル名を指定
// 拡張子前に「.g」をつけて「${プロバイダー名}.g.dart」とする命名規則
part 'items_provider.g.dart';
// 型 プロバイダー名(プロバイダー名Ref ref) {...}
// Tips: live template「ri」
List<String> items(ItemsRef ref) {
return [
'Item 1',
'Item 2',
'Item 3',
];
}
ref.watch
およびref.listen
している他のProviderに通知可能import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'プロバイダー名.g.dart';
class クラス名 extends _$クラス名 {
初期値の型 build() {
return 初期値;
}
// stateを操作するメソッド等記述
void someFunction(String value) {
state = value
}
}
flutter pub run build_runner build
// 「.g」がついていない方
import 'items/items_provider.dart';
// ConsumerWidgetを継承
// Tips: live template「cons」
class ChildWidget extends ConsumerWidget {
const ChildWidget ({super.key});
Widget build(BuildContext context, WidgetRef ref) {
// ref.watch(プロバイダー名)で取得
final items = ref.watch(itemsProvider);
return Scaffold(
body: ListView.builder(itemBuilder: (context, index) {
return ListTile(
title: Text(items[index]),
);
},
itemCount: items.length,
),
);
}
}
ref.read(プロバイダー名.notifier).メソッド()