Flutter应用运行仅显示白屏加Flutter图标问题求助
Flutter应用白屏仅显示Flutter图标问题排查
问题现象
运行Flutter应用时,屏幕仅显示白屏和Flutter图标。已执行flutter clean、重启等基础操作,代码无报错。尝试build apk no shrink、run --release等多种方法,均无效果,偶尔仍出现白屏加图标情况。应用已成功构建build\app\outputs\flutter-apk\app-debug.apk,但在移动模拟器中无法正常运行。
运行日志
flutter run Launching lib\main.dart on sdk gphone64 x86 64 in debug mode... Building with Flutter multidex support enabled. Note: C:\Users\subas\AppData\Local\Pub\Cache\hosted\pub.dev\background_fetch-1.3.3\android\src\main\java\com\transistorsoft\flutter\backgroundfetch\BackgroundFetchPlugin.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. Running Gradle task 'assembleDebug'... 46,1s √ Build build\app\outputs\flutter-apk\app-debug.apk. I/flutter (16839): Server running on http://localhost:8080 I/WebViewFactory(16839): Loading com.google.android.webview version 113.0.5672.136 (code 567263637) Syncing files to device sdk gphone64 x86 64... 209ms Flutter run key commands. r Hot reload. R Hot restart. h List all available interactive commands. d Detach (terminate "flutter run" but leave application running). c Clear the screen q Quit (terminate the application on the device). A Dart VM Service on sdk gphone64 x86 64 is available at: http://127.0.0.1:54589/hR4xsbh0134=/ W/ziparchive(16839): Unable to open '/data/app/~~hDKdF0exkSGWYFQSV6oLSA==/com.google.android.trichromelibrary_567263637-HalHqdBoeCvg3a87tG2CjQ==/TrichromeLibrary.dm': No such file or directory W/ziparchive(16839): Unable to open '/data/app/~~hDKdF0exkSGWYFQSV6oLSA==/com.google.android.trichromelibrary_567263637-HalHqdBoeCvg3a87tG2CjQ==/TrichromeLibrary.dm': No such file or directory W/le.near_pay_app(16839): Entry not found D/nativeloader(16839): Configuring clns-7 for other apk /data/app/~~hDKdF0exkSGWYFQSV6oLSA==/com.google.android.trichromelibrary_567263637-HalHqdBoeCvg3a87tG2CjQ==/TrichromeLibrary.apk. target_sdk_version=34, uses_libraries=ALL, library_path=/data/app/~~unFi2v0XPpxIAQ7os0JIaA==/com.google.android.webview-nNInCrod4HMLcMpye9F-cg==/lib/x86_64:/data/app/~~unFi2v0XPpxIAQ7os0JIaA==/com.google.android.webview-nNInCrod4HMLcMpye9F-cg==/WebViewGoogle.apk!/lib/x86_64:/data/app/~~hDKdF0exkSGWYFQSV6oLSA==/com.google.android.trichromelibrary_567263637-HalHqdBoeCvg3a87tG2CjQ==/TrichromeLibrary.apk!/lib/x86_64, permitted_path=/data:/mnt/expand D/nativeloader(16839): Configuring clns-8 for other apk /data/app/~~unFi2v0XPpxIAQ7os0JIaA==/com.google.android.webview-nNInCrod4HMLcMpye9F-cg==/WebViewGoogle.apk. target_sdk_version=34, uses_libraries=, library_path=/data/app/~~unFi2v0XPpxIAQ7os0JIaA==/com.google.android.webview-nNInCrod4HMLcMpye9F-cg==/lib/x86_64:/data/app/~~unFi2v0XPpxIAQ7os0JIaA==/com.google.android.webview-nNInCrod4HMLcMpye9F-cg==/WebViewGoogle.apk!/lib/x86_64:/data/app/~~hDKdF0exkSGWYFQSV6oLSA==/com.google.android.trichromelibrary_567263637-HalHqdBoeCvg3a87tG2CjQ==/TrichromeLibrary.apk!/lib/x86_64, permitted_path=/data:/mnt/expand The Flutter DevTools debugger and profiler on sdk gphone64 x86 64 is available at: http://127.0.0.1:9101?uri=http://127.0.0.1:54589/hR4xsbh0134=/ W/le.near_pay_app(16839): Accessing hidden method Landroid/os/Trace;->isTagEnabled(J)Z (unsupported, reflection, allowed) W/le.near_pay_app(16839): Accessing hidden method Landroid/os/Trace;->traceBegin(JLjava/lang/String;)V (unsupported, reflection, allowed) W/le.near_pay_app(16839): Accessing hidden method Landroid/os/Trace;->traceEnd(J)V (unsupported, reflection, allowed) W/le.near_pay_app(16839): Accessing hidden method Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V (unsupported, reflection, allowed) W/le.near_pay_app(16839): Accessing hidden method Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V (unsupported, reflection, allowed) I/cr_WVCFactoryProvider(16839): Loaded version=113.0.5672.136 minSdkVersion=29 isBundle=false multiprocess=true packageId=2 I/cr_VariationsUtils(16839): Failed reading seed file "/data/user/0/com.example.near_pay_app/app_webview/variations_seed_new" I/cr_VariationsUtils(16839): Failed reading seed file "/data/user/0/com.example.near_pay_app/app_webview/variations_seed" I/cr_LibraryLoader(16839): Successfully loaded native library I/cr_CachingUmaRecorder(16839): Flushed 8 samples from 8 histograms. D/CompatibilityChangeReporter(16839): Compat change id reported: 183155436; UID 10190; state: DISABLED D/AutofillManager(16839): Fill dialog is enabled:false, hints=[password, passwordAuto, creditCardNumber, creditCardSecurityCode, creditCardExpirationDate] E/chromium(16839): [ERROR:simple_file_enumerator.cc(21)] opendir /data/user/0/com.example.near_pay_app/cache/WebView/Default/HTTP Cache/Code Cache/js: No such file or directory (2) E/chromium(16839): [ERROR:simple_index_file.cc(614)] Could not reconstruct index from disk E/chromium(16839): [ERROR:simple_backend_impl.cc(749)] Simple Cache Backend: cache directory inaccessible right after creation; path: /data/user/0/com.example.near_pay_app/cache/WebView/Default/HTTP Cache/Code Cache/wasm E/chromium(16839): [ERROR:disk_cache.cc(205)] Unable to create cache D/CompatibilityChangeReporter(16839): Compat change id reported: 214741472; UID 10190; state: DISABLED I/Choreographer(16839): Skipped 36 frames! The application may be doing too much work on its main thread. D/ProfileInstaller(16839): Installing profile for com.example.near_pay_app
main.dart 代码
import 'dart:async'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:near_pay_app/modules/home/pages/core/home_page.dart'; import 'package:near_pay_app/modules/home/pages/core/login_page.dart'; import 'package:near_pay_app/services/core/lib_initialization_service.dart'; import 'package:near_pay_app/services/user_service.dart'; import 'package:provider/provider.dart'; import 'package:near_pay_app/l10n/app_localizations.dart'; void main() async { runZonedGuarded(() async { WidgetsFlutterBinding.ensureInitialized(); await initFlutterChainLib(); // 调用initFlutterChainLib完成资源加载 final isAuthorized = await checkIfUserAuthorized(); // 检查用户是否已授权 SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]).then((_) => runApp(MyApp(isAuthorized: isAuthorized))); }, (error, stack) { }); } class MyApp extends StatelessWidget { final bool? isAuthorized; const MyApp({super.key, required this.isAuthorized}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => UserService(isAuthorized as Dio)), ], child: ScreenUtilInit( designSize: const Size(360, 690), builder: (context, child) => MaterialApp( debugShowCheckedModeBanner: false, title: 'Your App Title', localizationsDelegates: const [ AppLocalizations.delegate, ], supportedLocales: AppLocalizations.supportedLocales, home: isAuthorized == true ? const HomePage() : const LoginPage(), ), ), ); } }
问题排查与解决步骤
1. 修复致命类型转换错误
代码中ChangeNotifierProvider(create: (context) => UserService(isAuthorized as Dio))存在严重错误:isAuthorized是bool?类型,强行转成Dio类型会直接触发运行时异常,阻塞页面渲染。
- 修正方式:如果
UserService需要Dio实例,传入初始化好的Dio对象,而非isAuthorized:ChangeNotifierProvider(create: (context) => UserService(Dio())), - 同时确认
UserService构造函数的参数类型,确保传入参数匹配。
2. 补全错误捕获逻辑
runZonedGuarded的错误处理块为空,导致初始化过程中的异常被静默吞掉,无法定位问题:
- 添加错误打印:
}, (error, stack) { print('启动异常: $error'); print(stack); }); - 给异步初始化方法添加错误捕获,避免阻塞启动:
await initFlutterChainLib().catchError((e) { print('资源加载失败: $e'); }); final isAuthorized = await checkIfUserAuthorized().catchError((e) { print('授权检查失败: $e'); return false; // 默认返回未授权,保证应用能继续启动 });
3. 处理初始化阻塞问题
initFlutterChainLib()和checkIfUserAuthorized()如果执行耗时过长或卡住,会导致应用停留在启动白屏状态:
- 在这两个方法内部添加日志,确认执行进度;
- 若涉及网络请求或本地IO操作,添加超时限制。
4. 完善启动页判断逻辑
isAuthorized可能为null,此时原逻辑会直接显示LoginPage,但可能隐藏初始化异常:
- 添加默认值处理:
home: (isAuthorized ?? false) ? const HomePage() : const LoginPage(),
5. 清理WebView缓存异常
日志中存在Chromium缓存创建失败的错误,虽非白屏主因,但可能影响后续功能:
- 清空模拟器应用缓存,或重新创建模拟器;
- 确保模拟器系统版本兼容当前WebView版本,尝试更新模拟器系统。
内容的提问来源于stack exchange,提问作者arhan subaşı
相关产品推荐
相关产品推荐

