【问题标题】:Where do I put commands that run once at beginning?我应该把开始运行一次的命令放在哪里?
【发布时间】:2019-08-26 19:58:11
【问题描述】:

我真的很想念 C 编程。 Flutter 相当混乱。

问题来了:

我们在有状态类 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 类中的哪些元素被触发?我应该把这个函数放在小部件构建方法中吗?但是如果小部件被刷新,那么这个函数肯定也会被调用(再次)——我只想调用一次。

谢谢

【问题讨论】:

  • 如果您有一些全局实例想要初始化一次,那么您可以在 main() 中执行此操作,就像在 C 中一样。

标签: flutter dart


【解决方案1】:

你可以使用FutureBuilder

示例:

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

这只会在构建小部件时加载Future一次

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 2016-08-25
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多