程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在应用程序初始化时一起执行期货还是一次执行一个期货是一种好习惯吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在应用程序初始化时一起执行期货还是一次执行一个期货是一种好习惯吗??

开发过程中遇到在应用程序初始化时一起执行期货还是一次执行一个期货是一种好习惯吗?的问题如何解决?下面主要结合日常开发的经验,给出你关于在应用程序初始化时一起执行期货还是一次执行一个期货是一种好习惯吗?的解决方法建议,希望对你解决在应用程序初始化时一起执行期货还是一次执行一个期货是一种好习惯吗?有所启发或帮助;

这可能是个菜鸟问题。

假设我有一个 Flutter 代码,它在调用 runApp 之前有一些需要在开始时初始化的内容。虑以下代码:

voID main() async {
  WidgetsFlutterBinding.ensureInitialized();

  /// Handles localizations
  final FlutterI18nDelegate = FlutterI18nDelegate(
      translationLoader: fileTranslationLoader(
          fallBACkfile: 'en_US',basePath: 'assets/i18n',forcedLocale: Locale('en_US'),decodeStrategIEs: [JsonDecodeStrategy()]));

  /// Handles AppsFlyer Integrations
  final AppsFlyerOptions appsFlyerOptions = AppsFlyerOptions(
    afDevKey: 'MY-KEY',appID: 'app-id',showDeBUG: true,);

  final appsFlyerSdk = AppsflyerSdk(appsFlyerOptions);

  /// Starts the Repository
  final repository = Repository();

  /// Initialize Mobile Ads
  final mobileAds = MobileAds.instance.initialize().then((InitializationStatus status) =>
      print('Mobile Ads Initialized! Status: ${status.adapterStatuses}'));

  final List<Future<dynamic>> initFutures = [
    /// Load Localizations
    FlutterI18nDelegate.load(null),/// Initialize Firebase
    Firebase.initializeApp(),/// Initialize Repository
    repository.initialize(),/// Initialize AppsFlyer SDK
    appsFlyerSdk.initSdk(),/// Initialize Ads
    mobileAds,/// Initialize adaptiveMode (Dark,light,System)
    Adaptivetheme.getthemeMode()
  ];

  /// Run everything together to save time
  final initResults = await Future.wait(initFutures);
  final FlutterI18n FlutterI18n = initResults.first;
  final AdaptivethemeMode themeSetTing = initResults.last ?? AdaptivethemeMode.system;

  
  runApp(
    RestartWidget(
      child: MultiRepositoryProvIDer(
          provIDers: [
             /// ---- ALL Repository Needs ----
          ],child: MultiBlocProvIDer(
              provIDers: [
                  /// ---- ALL Bloc ----

              ],child: MyApp(
                FlutterI18nDelegate: FlutterI18nDelegate,themeSetTing: themeSetTing,))),),);
}


请注意,没有任何期货被调用依赖于彼此。

但是在应用程序开始时运行这样的期货是一个好习惯吗?

当然,一起执行期货的目的是为了节省时间。

或者这样做是否更好:

/// copying the futures part only 

  /// Load Localizations
  final FlutterI18n FlutterI18n = await FlutterI18nDelegate.load(null);

  /// Initialize Firebase
  await Firebase.initializeApp();

  /// Initialize Repository
  await repository.initialize();

  /// Initialize AppsFlyer SDK
  await appsFlyerSdk.initSdk();

  /// Initialize Ads
  await MobileAds.instance.initialize().then((InitializationStatus status) =>
      print('Mobile Ads Initialized! Status: ${status.adapterStatuses}'));

  /// Initialize adaptiveMode (Dark,System)
  final AdaptivethemeMode themeSetTing = (await Adaptivetheme.getthemeMode()) ?? AdaptivethemeMode.system;

请随时指出我可能错过的任何事情,或者可能会担心这样做的任何事情,或者这一切都很好?为什么? (例如:内存泄漏问题?)

谢谢

解决方法

乍一看,我建议不要通过这样的调用来阻止应用启动:

final initResults = await Future.wait(initFutures);

用户不会知道正在发生的任何事情,只会看到一个空白屏幕,无论完成所有期货和初始化需要多长时间。

使用 FutureBuilder 可能是“等待”异步数据到达的最常见方式,也是在等待期间向用户显示的内容。

我只是ANSWEREd a question with similar requirements(等待多个相关的顺序异步数据)。也许这会让您大致了解如何构建您的应用启动。

大佬总结

以上是大佬教程为你收集整理的在应用程序初始化时一起执行期货还是一次执行一个期货是一种好习惯吗?全部内容,希望文章能够帮你解决在应用程序初始化时一起执行期货还是一次执行一个期货是一种好习惯吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。