You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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şı

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:47:33