gpt4 book ai didi

android - Flutter 飞溅闪烁问题

转载 作者:行者123 更新时间:2023-12-04 15:09:44 27 4
gpt4 key购买 nike

频闪问题查询:
条件:

  • 从 Testflight/Playstore
  • 安装应用程序
  • 第一次直接从 Testflight/Playstore 打开它,输出如下

  • 注:在下一次启动时,它的闪烁时间在白屏延迟方面变得更小。
    使用的框架 : Flutter => 使用最新版本的flutter
    实现:
    为了避免最初的白屏问题,我在 LaunchScree.storyboard 中添加了适当大小的启动图像。
    但是,在 Native 引擎和 Flutter 引擎之间转换时,它仍然会闪烁。
    要求:
    我们需要在 flutter 引擎上设置一个闪屏来从服务器请求初始数据,以便在没有加载器的情况下呈现 future 的屏幕。
    主要功能代码
    void main() async {

    WidgetsFlutterBinding.ensureInitialized();
    await getServices();
    await FlutterLibphonenumber().init();

    await Sentry.init((options) {
    options.dsn = SENTRY_DSN;
    }, appRunner: initApp);
    }

    void initApp() {
    runApp(
    EasyLocalization(
    child: YieldTrustApp(StringResource.appTitle),
    path: "assets/langs",
    supportedLocales: [
    const Locale('en', 'US'), // English
    ],
    fallbackLocale: const Locale('en', 'US'),
    ),
    );
    }

    Is it possible this issue can happen because of async mainfunction?


    This is the actual behaviour which I'm facing right now.

    最佳答案

    所以我找到了这个问题的解决方案。
    问题:
    我在代码中使用了多个启动画面。多重闪屏意味着

  • 核心系统从 android/ios 显示的启动屏幕。
  • 另一个是带有闪屏图像的 Stateful 小部件。

  • 所以应用程序初始化的核心流程,Flutter 先初始化所有依赖的库,然后将控制权交给 Flutter main.dart .为此,我们使用 ensureInitialised main.dart 中的方法.
    好吧,我需要两个启动画面,因为一个在 native 端消除了初始白屏,另一个在 flutter 端可以帮助您调用初始资源,例如,在让用户进入登录屏幕之前,应该调用一些 API。由于这种结构,我遇到了闪烁的问题。现在我无法删除 flutter 闪屏,因为它调用了 5-6 个 API。
    解决方案:
  • 移除了 flutter 侧闪屏
  • 调用了main.dart 中的所有API调用 runApp() 之前的文件功能。
  • 上面的事情解决了这个问题。

  • 我正在传递 main.dart 的代码供引用。
    ///Call function which will be needed before initializing our application.
    ///Ensure all widgets are initialized
    ///Set system status bar color
    ///Get all services
    ///Initialise phone number library
    ///Call master data to get all required data
    ///Set connectivity variable initial value
    ///Init sentry with default settings.
    void main() async {
    WidgetsFlutterBinding.ensureInitialized();

    initProductFlavour();

    await getServices();
    await FlutterLibphonenumber().init();

    await callMasterData();
    isConnected =
    (await Connectivity().checkConnectivity()) != ConnectivityResult.none;

    await SentryFlutter.init((options) {
    options.dsn = SENTRY_DSN;
    }, appRunner: initApp);
    }

    ///Init application
    void initApp() {
    runApp(App());
    }


    ///Pre-cache the data to boost up the performance.
    Future callMasterData() async {
    MasterSyncProvider _masterSyncProvider = getIt.get<MasterSyncProvider>();

    var result = await Future.wait([
    _masterSyncProvider.getCountryList(),
    _masterSyncProvider.getAppConfig(),
    _masterSyncProvider.getJourneyFramework(),
    _masterSyncProvider
    .getMobileCMSData(),
    ]);

    return result;
    }

    ///Init product flavouring
    void initProductFlavour() {
    var appConfig = new BaseConfig();
    appConfig.baseUrl = DEV_SERVER;
    appConfig.flavour = Flavours.DEV;
    }

    关于android - Flutter 飞溅闪烁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65438033/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com