AlertDialog、なぜかriverpodで普通にwatchしても再描画されないっすよね。
タイトルの通り、ConsumerWidgetの中でAlertDialogを呼び出してるのに、ref.watch(hogeprovider)が仕事をしてくれないなぁとずっと思ってて、仕方なくStatefulWidgetやらConsumerStatefulWidgetやらを使ってSetStateしておったわけなんです。はい。
でもさ、そんなわけないよな、状態管理用のパッケージが使われる頻度高いAlertDialogに限って再描画できないなんて普通に考えてありなくね? ってことで、再びウェブの海を彷徨いましたらありましたよ、さっくり浅瀬に。(以下、参考にさせていただいたページ)

【Flutter】Riverpodを使って複数画面で再描画を行う【初心者向け】
再描画対象としたいWidgetをConsumerでラップすることで実現してみます。
https://zenn.dev/mamoru_takami/articles/a9b1f56697a809
ですって。まんま答えありましたね_(:3」∠)_
ちうわけで、抜粋ですが、以下のような形でStateProvider君がきちんと動作してくれるようになったわけです。感謝!(以下、拙者のプログラムから一部抜粋)
ElevatedButton(
onPressed: () {
showDialog(
context: context,
builder: (context) =>
Consumer(builder: (context, ref, child) {
// このあたりに、いつもの感じで
//ref.watch(なんちゃんらプロバイダー)やらで監視する値を定義。
if (描画条件となる値 == 'fuga') {
return AlertDialog(
title: Text('とかって感じでAlertDialogの内容や、'
'Dialogそのものを切り替えたり可能'),
//それ以外はいつも通りに書いたら良い。
なあ、Consumer()。おまえ、めっちゃ有能やん……。
ってなわけで、忘れてしまった時用の備忘録。
なにかの間違いで同じ悩みでつっかかってしまった人の役に立ったら僥倖です~。

コメント