【Flutter】providerのnotifyListeners()でshowModalBottomSheetを再描画させたいのですができません。
解決したいこと
Flutterの勉強で、メモ帳アプリを作成しています。
そこでshowModalBottomSheetWidgetをproviderのnotifyListeners()で再描画させたいのですができません。
何が足りないのでしょうか?
よければアドバイスいただけるとありがたいです。
よろしくお願いします。
詳細
Buttonを押すとshowModalBottomSheetが表示され、そこに新規メモ帳作成Buttonと今までに作成した下書きのメモ帳が動的に表示させる、といった機能を実装しようといています。
しかし、新規メモ帳作成Buttonを押し、メモ帳作成画面へ移動したあとにメモ内容を保存し、「 Navigator.pop(context);」により戻るとnotifyListeners()が実行されても画面が再描画されません。
該当するソースコード
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class SendDiary extends StatefulWidget {
String? destination;
SendDiary(this.destination);
@override
State<SendDiary> createState() => _SendDiary();
}
class _SendDiary extends State<SendDiary> {
@override
Widget build(BuildContext context) {
final double deviceHeight = MediaQuery.of(context).size.height;
final double deviceWdth = MediaQuery.of(context).size.width;
return Scaffold(
body: TextButton(
onPressed: () {
showModalBottomSheet(
isScrollControlled: true,
context: context,
enableDrag: true,
builder: (context) {
return Consumer<ReShowModalBottomSheet>(
builder: (context, model, child) {
return Container(
height: deviceHeight * 0.4,
width: deviceWdth,
child: Column(children: [
TextButton(
//ここでメモ帳作成画面へ遷移
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => WriteDiary(null)));
//メモ帳作成後、戻ってきたタイミングで再描画
model.reShowModalBottomSheet();
},
child: Text('新規メモ帳作成画面へ遷移'),
),
SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(children: [
for (int index = 0;
index < diaryStorage[0].length;
index++) ...{
// new Consumer<ReShowModalBottomSheet>(
// builder: (context, model, child) {
new TextButton(
onPressed: () async {
//ここで保存していたメモ帳(下書き)をメモ帳作成画面へ展開
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SendWriteDiary(
null,
null,
null,
'null',
null,
)));
//メモ帳作成画面から戻り、画面再描画
model.reShowModalBottomSheet();
},
child: Text('下書きの数だけButtonを作成'),
)
}
]))
]));
});
});
},
child: Text('ShowModalBottomSheet'),
));
}
}
import 'package:flutter/material.dart';
class ReShowModalBottomSheet extends ChangeNotifier {
void reShowModalBottomSheet() {
notifyListeners();
}
}
自分で試したこと
Consumerでラップするところを色々変えたり、widgetを「new」して作成してみたりなど。
0