事件发生后如何从另一个屏幕从数据库获取数据

时间:2019-10-17 11:47:51

标签: flutter

我来自Android开发,因此,在某些情况下,我将尝试用Android术语解释我的情况。因此,我有MainScreen,它使用了Scaffold并且具有FAB。该屏幕的主体是另一个小部件(如Android中的Fragment)。当我单击FAB(位于主屏幕上)时,将打开底部模式。通过这种模型,我可以将数据添加到数据库中。但是我也想同时向小部件(片段)添加新数据。而且我不知道应该在哪种生命周期方法中调用数据库。在android中,这种方法是onResume,但在Flutter中我没有发现它是类似的。

感谢您的帮助!

UPD

有我的屏幕:

enter image description here

底部导航和FAB位于主屏幕上。 ListView在小部件上,它是MainScreen支架的主体。我的另一个步骤是单击FAB。此点击将打开底部模式

enter image description here

当我单击模式上的保存时,数据将保存到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,但没有帮助

1 个答案:

答案 0 :(得分:0)

您可能想在应用程序中使用状态管理。最简单的是提供者。您的模型应该扩展ChangeNotifier,并且每当您添加模型的新实例时,都会通知该应用:notifyListener。在build中,您将实现ChangeNotifierProvider。这是一些教程:

Provider example 1

Provider example 2

或者您也可以搜索Provider