我来自Android开发,因此,在某些情况下,我将尝试用Android术语解释我的情况。因此,我有MainScreen,它使用了Scaffold并且具有FAB。该屏幕的主体是另一个小部件(如Android中的Fragment)。当我单击FAB(位于主屏幕上)时,将打开底部模式。通过这种模型,我可以将数据添加到数据库中。但是我也想同时向小部件(片段)添加新数据。而且我不知道应该在哪种生命周期方法中调用数据库。在android中,这种方法是onResume
,但在Flutter中我没有发现它是类似的。
感谢您的帮助!
UPD
有我的屏幕:
底部导航和FAB位于主屏幕上。 ListView在小部件上,它是MainScreen支架的主体。我的另一个步骤是单击FAB。此点击将打开底部模式
当我单击模式上的保存时,数据将保存到DB并关闭模式。在此关闭之后,我想查看新的数据库条目,我刚刚从模态中添加了该条目。现在,只有关闭然后再次打开屏幕后,我才能看到新的笔记。这是我的代码:
class NotesScreen extends StatefulWidget {
@override
_NotesScreenState createState() => _NotesScreenState();
}
class _NotesScreenState extends State<NotesScreen> with WidgetsBindingObserver {
List<Note> _notes = new List<Note>();
@override
void initState() {
super.initState();
Fimber.i("Init");
WidgetsBinding.instance.addObserver(this);
NotesDataManager().getNotes().then((value) {
_notes = value;
setState(() {
});
});
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state){
case AppLifecycleState.resumed:
NotesDataManager().getNotes().then((value){
_notes = value;
setState(() {
});
});
Fimber.i("Resumed");
break;
case AppLifecycleState.inactive:
Fimber.i("Inactive");
break;
case AppLifecycleState.paused:
Fimber.i("Paused");
break;
case AppLifecycleState.suspending:
Fimber.i("Suspending");
break;
}
super.didChangeAppLifecycleState(state);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(AppColors.layoutBackgroundColor),
body: Container(
child: ListView.builder(
itemCount: _notes.length,
itemBuilder: (BuildContext context, int index) {
return NotesListItemWidget(note: _notes[index]);
},
),
),
);
}
}
如您所见,我添加了WidgetsBindingObserver
,但没有帮助
答案 0 :(得分:0)
您可能想在应用程序中使用状态管理。最简单的是提供者。您的模型应该扩展ChangeNotifier
,并且每当您添加模型的新实例时,都会通知该应用:notifyListener
。在build
中,您将实现ChangeNotifierProvider
。这是一些教程:
或者您也可以搜索Provider