我应该将开始运行一次的命令放在哪里?

时间:2019-08-26 19:58:11

标签: flutter dart

我真的很想念C编程。 Flutter非常令人困惑。

问题出在这里

我们在Stateful类Home中具有一个功能。这将创建一个名为myMenu的页面。

class Home extends StatefulWidget {
  myMenu createState() => myMenu();
}

class myMenu extends State<Home>
{


void myProblemFunction(String stringItem) async {

final db =  await myDatabaseClass.instance.database;

 ... 
}

每当myProblemFunction运行时,它将实例化一个新的数据库实例。

我只想输入一次此命令(即:

 final db = await myDatabaseClass.instance.database
  • )在文档的任何位置(这是我的main.dart文件(顺便说一下)。现在,我可以将它放在initState()中-当然。。但这很麻烦,因为a)我必须做它异步,并且我认为这会导致我出现问题,并且b)在initState()中声明最终的db ...(等)不会使db变量对我的函数可见。

我该怎么办?

myMenu类中触发了哪些元素?我是否应该将此函数放在小部件构建方法中?但是可以肯定的是,如果刷新了小部件,那么该函数也将再次被调用-我只想调用一次。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用FutureBuilder

示例:

    FutureBuilder(
      future: myDatabaseClass.instance.database,
      builder: (BuildContext context,AsycnSnapshot snapshot){
             //your code here
      },
    )

这将仅在构建窗口小部件时加载Future 一次

答案 1 :(得分:0)

将您只想在initState()中运行一次的代码放入

  @override
  void initState() {
    super.initState();
    // TODO code you want to run only once
  }