Flutter 当Flatter应用程序打开时,如何从sqlite数据库加载初始状态数据

Flutter 当Flatter应用程序打开时,如何从sqlite数据库加载初始状态数据,flutter,flutter-listview,flutter-state,Flutter,Flutter Listview,Flutter State,我正在用flatter制作一个简单的记事本应用程序。我想从SQLite数据库加载已经保存的数据,并在应用程序打开时初始化状态。我尝试了initState()方法和async方法。但是异步方法在initState()方法中不起作用。有些地方说使用未来的建设者和集团。但我不太确定哪一个是好的。在flatter中实现这一点的最佳方法是什么???如果您知道如何从sql lite加载数据,然后使用async和Wait在initstate()之外定义该函数,并在initstate()中调用它。 Initst

我正在用flatter制作一个简单的记事本应用程序。我想从SQLite数据库加载已经保存的数据,并在应用程序打开时初始化状态。我尝试了initState()方法和async方法。但是异步方法在initState()方法中不起作用。有些地方说使用未来的建设者和集团。但我不太确定哪一个是好的。在flatter中实现这一点的最佳方法是什么???

如果您知道如何从sql lite加载数据,然后使用async和Wait在initstate()之外定义该函数,并在initstate()中调用它。 Initstate不能是异步的,因为它必须在主应用程序运行之前运行,以便我们可以使用外部函数来执行相同的操作

  • 使用异步等待定义名为sqlData()的函数
  • 称之为initstate内部
    如果您知道如何从SQLLite加载数据,那么可以使用async和Wait在initstate()之外定义该函数,并在initstate()中调用它。 Initstate不能是异步的,因为它必须在主应用程序运行之前运行,以便我们可以使用外部函数来执行相同的操作

  • 使用异步等待定义名为sqlData()的函数
  • 称之为initstate内部 你有两个选择

    选项1:照@UtakarshSharma说的做。下面是示例实现

    @override
      void initState() {
        super.initState();
        _requestSqlData();     
      }
    
    void _requestSqlData(){
       _requestSqlDataAsync();  
    }
    
    void _requestSqlData() async {
        var _data = await getData();    // call API/await function to get the data
    }
    
    选项2:全屏加载后使用回调方法。并使用setState更新屏幕。您必须在布局完成后使用颤振布局()它将在布局完成后执行函数:

    void initState() {
        super.initState();
        WidgetsBinding.instance
            .addPostFrameCallback((_) => myAwesomeFunction(context));
    }
    
    你有两个选择

    选项1:照@UtakarshSharma说的做。下面是示例实现

    @override
      void initState() {
        super.initState();
        _requestSqlData();     
      }
    
    void _requestSqlData(){
       _requestSqlDataAsync();  
    }
    
    void _requestSqlData() async {
        var _data = await getData();    // call API/await function to get the data
    }
    
    选项2:全屏加载后使用回调方法。并使用setState更新屏幕。您必须在布局完成后使用颤振布局()它将在布局完成后执行函数:

    void initState() {
        super.initState();
        WidgetsBinding.instance
            .addPostFrameCallback((_) => myAwesomeFunction(context));
    }
    

    我发现这种方法对我有效。在异步函数上使用.then()

    @override
      void initState() {
        super.initState();
        db.getData().then((value){
          _valueState = value;
        });     
      }
    

    我发现这种方法对我有效。在异步函数上使用.then()

    @override
      void initState() {
        super.initState();
        db.getData().then((value){
          _valueState = value;
        });     
      }
    

    两个都很好,谢谢。更新状态似乎需要一些时间。也许我在模拟器上。但是,如果有任何建议希望在启动时更快地加载数据,请接受答案(如果有帮助)。在不知道用例的情况下,很难告诉“方法”更快地加载数据。也许您可以尝试在开始时加载少量数据?或者获取上一屏幕中的数据,并将此屏幕与数据一起调用!两个都很好,谢谢。更新状态似乎需要一些时间。也许我在模拟器上。但是,如果有任何建议希望在启动时更快地加载数据,请接受答案(如果有帮助)。在不知道用例的情况下,很难告诉“方法”更快地加载数据。也许您可以尝试在开始时加载少量数据?或者获取上一屏幕中的数据,并将此屏幕与数据一起调用!我也在挣扎,你有办法吗?我也在挣扎,你有办法吗?