0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChangeNotifierProvider で分かったことメモ

Posted at

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 の使用はミュータブルなステート管理を行う必然性がある場合に限定してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?