前提
Flutterの勉強で、メモ帳アプリを作成しています。
そこでshowModalBottomSheetWidgetをproviderのnotifyListeners()で再描画させたいのですができません。
何が足りないのでしょうか?
よければアドバイスいただけるとありがたいです。
よろしくお願いします。
実現したいこと
Buttonを押すとshowModalBottomSheetが表示され、そこに新規メモ帳作成Buttonと今までに作成した下書きのメモ帳が動的に表示させる、といった機能を実装しようといています。
しかし、新規メモ帳作成Buttonを押し、メモ帳作成画面へ移動したあとにメモ内容を保存し、「 Navigator.pop(context);」により戻るとnotifyListeners()が実行されても画面が再描画されません。
発生している問題・エラーメッセージ
なし
該当のソースコード
Dart
1import 'package:flutter/material.dart'; 2import 'package:provider/provider.dart'; 3 4class SendDiary extends StatefulWidget { 5 String? destination; 6 SendDiary(this.destination); 7 8 9 State<SendDiary> createState() => _SendDiary(); 10} 11 12class _SendDiary extends State<SendDiary> { 13 14 Widget build(BuildContext context) { 15 final double deviceHeight = MediaQuery.of(context).size.height; 16 final double deviceWdth = MediaQuery.of(context).size.width; 17 return Scaffold( 18 body: TextButton( 19 onPressed: () { 20 showModalBottomSheet( 21 isScrollControlled: true, 22 context: context, 23 enableDrag: true, 24 builder: (context) { 25 return Consumer<ReShowModalBottomSheet>( 26 builder: (context, model, child) { 27 return Container( 28 height: deviceHeight * 0.4, 29 width: deviceWdth, 30 child: Column(children: [ 31 TextButton( 32//ここでメモ帳作成画面へ遷移 33 onPressed: () async { 34 await Navigator.push( 35 context, 36 MaterialPageRoute( 37 builder: (context) => WriteDiary(null))); 38//メモ帳作成後、戻ってきたタイミングで再描画 39 model.reShowModalBottomSheet(); 40 }, 41 child: Text('新規メモ帳作成画面へ遷移'), 42 ), 43 SingleChildScrollView( 44 physics: BouncingScrollPhysics(), 45 child: Column(children: [ 46 for (int index = 0; 47 index < diaryStorage[0].length; 48 index++) ...{ 49 // new Consumer<ReShowModalBottomSheet>( 50 // builder: (context, model, child) { 51 new TextButton( 52 onPressed: () async { 53//ここで保存していたメモ帳(下書き)をメモ帳作成画面へ展開 54 await Navigator.push( 55 context, 56 MaterialPageRoute( 57 builder: (context) => SendWriteDiary( 58 null, 59 null, 60 null, 61 'null', 62 null, 63 ))); 64//メモ帳作成画面から戻り、画面再描画 65 model.reShowModalBottomSheet(); 66 }, 67 child: Text('下書きの数だけButtonを作成'), 68 ) 69 } 70 ])) 71 ])); 72 }); 73 }); 74 }, 75 child: Text('ShowModalBottomSheet'), 76 )); 77 } 78}
Dart
1import 'package:flutter/material.dart'; 2 3class ReShowModalBottomSheet extends ChangeNotifier { 4 void reShowModalBottomSheet() { 5 notifyListeners(); 6 } 7}
補足情報(FW/ツールのバージョンなど)
[✓] Flutter (Channel stable, 3.3.8, on macOS 13.0.1 22A400 darwin-arm, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 14.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.3)
[✓] VS Code (version 1.73.0)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/09 08:04 編集
2023/01/09 11:47
2023/01/09 12:42