大佬教程收集整理的这篇文章主要介绍了在应用程序初始化时一起执行期货还是一次执行一个期货是一种好习惯吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这可能是个菜鸟问题。
假设我有一个 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,请注明来意。