Flutter应用打开时如何从sqlite数据库加载初始状态数据
Posted
技术标签:
【中文标题】Flutter应用打开时如何从sqlite数据库加载初始状态数据【英文标题】:How to load initial state data from sqlite database when Flutter app open 【发布时间】:2020-07-01 18:22:30 【问题描述】:我正在使用颤振制作一个简单的记事本应用程序。我想从 SQLite 数据库加载已经保存的数据并在应用程序打开时初始化状态。我尝试使用带有异步方法的 initState() 方法。但是异步方法在 initState() 方法中不起作用。有些地方说要使用 Future builder 和 BLoC。但我不太确定哪个好。在颤振中实现这一点的最佳方法是什么?
【问题讨论】:
我也在为此苦苦挣扎,你找到解决方案了吗? 【参考方案1】:如果您知道如何从 sql lite 加载数据,请在 initstate() 之外使用 async 和 await 定义该函数,并在 initstate() 中调用它。 Initstate 不能是异步的,因为它必须在您的主应用程序之前运行,因此我们可以使用外部函数。
-
使用异步等待定义名为 sqlData() 的函数
在 initstate 中调用它。
【讨论】:
【参考方案2】:你有两个选择。
选项 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 更新屏幕。您必须使用 flutter_after_layout (https://github.com/slightfoot/flutter_after_layout) 它在布局完成后执行该功能。 :
void initState()
super.initState();
WidgetsBinding.instance
.addPostFrameCallback((_) => myAwesomeFunction(context));
【讨论】:
两者都很好,谢谢。更新状态似乎需要一些时间。可能是我在模拟器上。但是任何建议在启动时更快地加载数据... 如果有帮助,请接受答案。在不知道用例的情况下,很难告诉“方法”更快地加载数据。也许您可以尝试在开始时加载少量数据?或者获取上一屏中的数据,连同数据一起调用本屏!【参考方案3】:我发现这种方法对我有用。在你的异步函数上使用 .then()
@override
void initState()
super.initState();
db.getData().then((value)
_valueState = value;
);
【讨论】:
以上是关于Flutter应用打开时如何从sqlite数据库加载初始状态数据的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Firebase 消息传递 - 应用打开时未显示推送通知
尝试从 android studio 打开时,Xcode 中的 Flutter 打开模块会出错?