bottomNavigationBarを使っている画面で、画面再描画がうまく機能しなかった件の対応方法です。
##元の状態
親ページはbottomNavigationBarでの画面切り替えを行っており、bodyを_pageListで切り替えています。
List<Widget> _pageList = [];
@override
void initState() {
super.initState();
_pageList = [
PageA(),
PageB(),
PageC()
];
}
この状態でPageB()で表示しているDBを親ページ側で更新します。
そこでsetState()しても親ページの再描画は行われますが、子WidgetのPageBは再描画されません。
##対応方法
StatefulWidgetのKeyを使います。こういう使い方ができるんですね。
まだ良くわかっていませんが、今回はGlobalKeyを使いました。
まず子Widgetの方。Keyを受け取ります。
class PageB extends StatefulWidget {
PageB({Key? key}) : super(key: key);
@override
_PageBState createState() => _PageBState();
}
親ページ。GlobalKeyを作成します。
GlobalKey _key = GlobalKey<State<PageB>>();
_keyを引数で渡します。
_pageList = [
CampListPage(),
MyGearListPage(key: _key),
SettingPage()
];
子WidgetのsetState()を実行
_key.currentState?.setState(() {});
これで子Widgetが再描画されました。