V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Nillouise
V2EX  ›  Flutter

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

  •  
  •   Nillouise · 2022-03-15 15:35:41 +08:00 · 1631 次点击
    这是一个创建于 982 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2022-03-16 14:11:05 +08:00
    bankroft
        1
    bankroft  
       2022-03-15 16:00:04 +08:00
    我是先 loading 占位,等拿到数据再跳转 main
    txx
        2
    txx  
       2022-03-15 16:01:21 +08:00
    当然是做个 Splash 页面啊...
    Nillouise
        3
    Nillouise  
    OP
       2022-03-15 16:12:26 +08:00
    @txx load 点本地配置数据我感觉没必要做 splash 页面吧,程序本身也不复杂。

    @bankroft 本地配置数据也 loading 占位?这样用户不是看到一个很快的闪一下的 loading 么?我之前也是这么做的,感觉不好
    txx
        4
    txx  
       2022-03-15 22:23:44 +08:00
    @Nillouise 阻塞 UI 线程的行为不可取啊...
    Nillouise
        5
    Nillouise  
    OP
       2022-03-16 04:31:41 +08:00
    @txx 你没写过 flutter 吗?读数据用的是 await 不会阻塞线程的。
    linghtls
        6
    linghtls  
       2022-03-16 11:17:47 +08:00 via Android
    await 怎么就麻烦了…,数据量不大可以直接在 runApp 之前加载到内存
    txx
        7
    txx  
       2022-03-16 14:11:05 +08:00
    @Nillouise

    我表述有问题.. 我不确定 runApp 这个时间发生在哪里,如果是 iOS 的 applicationDidFinishedLaunching ,阻塞这个是容易触发 watchdog 的。毕竟如果你能确定 sqlite 的东西一直都是轻量化的这么做也没啥问题,缺点就是如果是个团队性质的,团队里哪个傻逼丢进去一个大字典啥的,在低端设备上就 watchdog 了。

    我刚才去瞅了一眼,这地方我理解是错误的,flutter engine 的 初始化是放在 FlutterViewController 初始化之后的 这就无所谓了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3345 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:40 · PVG 19:40 · LAX 03:40 · JFK 06:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.