🙄
FlutterでDialogにProviderを伝達する方法
備忘録
Providerを利用しているとき、ChangeNotifierProviderの子はすべて指定したインスタンスを共有できるが、Dialogが親子関係を無視してrootに生成されるため例外。
対処法として、以下のようにする。
// 設定ダイアログ表示
void showSettingDialog(BuildContext context) {
final logic = Provider.of<VirtualMouseLogic>(context, listen: true);
showDialog(
context: context,
builder: (_) {
// ダイアログにProviderを適応させる場合はChangeNotifierProvider.valueを使う
return ChangeNotifierProvider.value(value: logic, child: const SettingDialog());
}
);
}
Providerで通常と同じくインスタンスを取得してから、ChangeNotifierProvider.valueを使ってラッピングする。
Dialogの中では普通にProviderが使えるようになっている。
Discussion