Flutter程序启动的时候,一般怎么加载用 await 从本地数据库拿到的数据?

发布于 1周前 作者 h691938207 来自 Flutter

一些配置信息存到 app 本地数据库的时候,启动时提取出来需要用 await (比如用数据库 sqlite 或 realm ),那么一般是怎么处理这个 await 跟界面渲染的关系的?是直接在 main 函数里用 await 等配置数据加载出来再 runApp 的吗?但这种用本地配置数据都需要 await 我感觉就有点麻烦,还是有别的更好做法?


Flutter程序启动的时候,一般怎么加载用 await 从本地数据库拿到的数据?
8 回复

我是先 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关键字可以确保数据加载完成后再进行后续操作。以下是一个基本的实现步骤:

  1. 初始化数据库:在应用的main.dart文件中或任何合适的初始化位置,确保数据库连接被正确初始化。

  2. 异步加载数据:在initState方法(对于StatefulWidget)或直接在main函数中,使用await关键字调用数据库访问函数。由于await只能在异步函数中使用,你需要将包含它的函数标记为async

  3. 显示数据:一旦数据加载完成,可以使用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
}

注意,实际实现中可能需要处理错误和异常,确保应用的健壮性。

回到顶部