Flutter程序启动的时候,一般怎么加载用 await 从本地数据库拿到的数据?
一些配置信息存到 app 本地数据库的时候,启动时提取出来需要用 await (比如用数据库 sqlite 或 realm ),那么一般是怎么处理这个 await 跟界面渲染的关系的?是直接在 main 函数里用 await 等配置数据加载出来再 runApp 的吗?但这种用本地配置数据都需要 await 我感觉就有点麻烦,还是有别的更好做法?
Flutter程序启动的时候,一般怎么加载用 await 从本地数据库拿到的数据?
我是先 loading 占位,等拿到数据再跳转 main
更多关于Flutter程序启动的时候,一般怎么加载用 await 从本地数据库拿到的数据?的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然是做个 Splash 页面啊…
load 点本地配置数据我感觉没必要做 splash 页面吧,程序本身也不复杂。
本地配置数据也 loading 占位?这样用户不是看到一个很快的闪一下的 loading 么?我之前也是这么做的,感觉不好
阻塞 UI 线程的行为不可取啊…
你没写过 flutter 吗?读数据用的是 await 不会阻塞线程的。
await 怎么就麻烦了…,数据量不大可以直接在 runApp 之前加载到内存
我表述有问题… 我不确定 runApp 这个时间发生在哪里,如果是 iOS 的 applicationDidFinishedLaunching ,阻塞这个是容易触发 watchdog 的。毕竟如果你能确定 sqlite 的东西一直都是轻量化的这么做也没啥问题,缺点就是如果是个团队性质的,团队里哪个傻逼丢进去一个大字典啥的,在低端设备上就 watchdog 了。
我刚才去瞅了一眼,这地方我理解是错误的,flutter engine 的 初始化是放在 FlutterViewController 初始化之后的 这就无所谓了
在Flutter程序中,启动时加载从本地数据库获取的数据是一个常见的需求。这通常涉及异步操作,因为数据库访问是耗时的。使用await
关键字可以确保数据加载完成后再进行后续操作。以下是一个基本的实现步骤:
-
初始化数据库:在应用的
main.dart
文件中或任何合适的初始化位置,确保数据库连接被正确初始化。 -
异步加载数据:在
initState
方法(对于StatefulWidget)或直接在main
函数中,使用await
关键字调用数据库访问函数。由于await
只能在异步函数中使用,你需要将包含它的函数标记为async
。 -
显示数据:一旦数据加载完成,可以使用Flutter的状态管理(如
setState
)来更新UI,显示从数据库获取的数据。
示例代码片段:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final database = await initDatabase(); // 假设initDatabase()是异步的
runApp(MyApp(database: database));
}
class MyApp extends StatelessWidget {
final Database database;
MyApp({required this.database});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(database: database),
);
}
}
class MyHomePage extends StatefulWidget {
final Database database;
// ... 构造函数和其他代码
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 在initState中使用await加载数据,并更新UI
}
注意,实际实现中可能需要处理错误和异常,确保应用的健壮性。