ChangeNotifierProviderを利用してとUI側から値を変更できる
- runappで走らせるwidgetにproviderscopeを囲う
- ChangeNotifierProvider定義
- notifyListenersで変更を通知
- consumerwidgetにすると引数2にwidgetRefが追加できる
- view??UI側??でref.watchとかref.readとかを使用する
↓使用例
// model側
// UI側からUserNotifierを監視・操作できるようにする
final usersProvider = ChangeNotifierProvider((ref) => UserNotifier());
class UserNotifier extends ChangeNotifier {
String name = "";
void changeUserName(String newName) {
name = newName;
notifyListeners(); // リスナーに変更を通知
}
}
// view側
class UserPage extends ConsumerWidget {
...
...
//第2引数はConsumerWidgetを継承するときにつける
Widget build(BuildContext context, WidgetRef ref) {
// UserNotifierが使用できる
UserNotifier user_model = ref.watch(usersProvider);
return Center(
child: Column(
children: [
Text('${user_model.name}'),
TextField(
onSubmitted: ((value) => user_model.changeUserName(value)),
)
],
),
);
}
...
表示のみ: StateNotifierProvider
どうしてもデータの更新が必要:ChangeNotifierProvider
のような使用が推奨されている。
可能な限り StateNotifierProvider を使用してください。
ChangeNotifierProvider の使用はミュータブルなステート管理を行う必然性がある場合に限定してください。