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

Flutter Android应用Release模式偶现白屏问题求助

Flutter Release构建后启动频繁白屏问题

我的Flutter Android应用在Debug模式下运行完全正常,但配置签名密钥完成Release构建后,启动时大部分情况下显示空白白屏,仅每7-8次安装中有1次能正常运行。我已尝试关闭R8代码混淆与资源压缩、添加Flutter错误监听等方案,均未解决问题,寻求技术支持。


main.dart 代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shutiaotv_app/data/user_manager.dart';
import 'package:shutiaotv_app/presentation/splash_screen/splash_screen.dart';
import 'package:feedback/feedback.dart';
import 'package:upgrader/upgrader.dart';

import 'core/theme/theme_constants.dart';
import 'core/theme/theme_manager.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(
    const BetterFeedback(
      child: MyApp(),
    ),
  );
}

ThemeManager themeManager = ThemeManager();

class MyApp extends StatefulWidget {
  const MyApp({super.key});


  @override
  State<MyApp> createState() => _MyAppState();
}


class _MyAppState extends State<MyApp> {

  @override
  void initState() {
    super.initState();
    themeManager.addListener(themeListener);
    UserManager().loadData().then((value) => themeManager.toggleTheme(UserManager().isDark));
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
    ]);
  }

  @override
  void dispose() {
    themeManager.removeListener(themeListener);
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.landscapeRight,
      DeviceOrientation.landscapeLeft,
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);
    super.dispose();
  }


  void themeListener() {
    if (mounted) {
      setState(() {});
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '泰美影视',
      debugShowCheckedModeBanner: false,
      theme: lightTheme,
      darkTheme: darkTheme,
      themeMode: themeManager.themeMode,
      home: UpgradeAlert(
        showIgnore: false,
        child: const SplashScreen(),
      ),
    );
  }

}

pubspec.yaml 代码

name: shutiaotv_app
description: A new Flutter project.
publish_to: 'none'

version: 1.0.0+3

environment:
  sdk: '>=3.3.4 <4.0.0'

dependencies:
  flutter:
    sdk: flutter

  cached_network_image: ^3.3.0
  flutter_svg: ^2.0.9

  flutter_switch: ^0.3.2
  pin_code_fields: ^8.0.1
  video_player: ^2.4.6
  smooth_page_indicator: ^1.0.0+2
  country_list_pick: ^1.0.1+5
  flutter_rating_bar: ^4.0.0
  meilisearch: ^0.15.0
  fijkplayer: ^0.11.0
  dio: ^5.3.0
  expandable: ^5.0.1
  shared_preferences: ^2.2.3
  email_validator: ^2.1.17
  timer_count_down: ^2.2.2
  infinite_scroll_pagination: ^4.0.0
  shimmer: ^3.0.0
  animated_text_kit: ^4.2.2
  getwidget: ^4.0.0
  expandable_text: ^2.3.0
  extended_wrap: ^0.1.5
  flutter_animated_icon_button: ^1.1.3
  animated_snack_bar: ^0.4.0
  duration: ^3.0.13
  url_launcher: ^6.2.6
  path_provider: ^2.1.2
  filesize: ^2.0.1
  disk_space_plus: ^0.2.3
  feedback: ^3.0.1
  page_transition: ^2.1.0
  upgrader: ^10.0.1
  in_app_review: ^2.0.9

  cupertino_icons: ^1.0.6


dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^3.0.0
  flutter_launcher_icons: ^0.13.1
  flutter_native_splash: ^2.3.10

flutter_launcher_icons:
  android: "launcher_icon"
  ios: true
  image_path: "assets/app_icon.png"
  min_sdk_android: 21


flutter_native_splash:
  background_image: "assets/splash_background.png"

flutter:

  uses-material-design: true

  assets:
    - assets/
    - assets/images/

  fonts:
    - family: SF Pro Display
      fonts:
        - asset: assets/fonts/Noto_Sans_SC/NotoSansSC-Regular.ttf
          weight: 400
        - asset: assets/fonts/Noto_Sans_SC/NotoSansSC-Medium.ttf
          weight: 600
        - asset: assets/fonts/Noto_Sans_SC/NotoSansSC-Bold.ttf
          weight: 700

splash_screen.dart 代码

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shutiaotv_app/core/app_export.dart';
import 'package:shutiaotv_app/data/user_manager.dart';
import 'package:shutiaotv_app/presentation/home.dart';
import 'package:shutiaotv_app/presentation/onboarding_1_vone_screen/onboarding_1_vone_screen.dart';
import 'package:animated_text_kit/animated_text_kit.dart';

class SplashScreen extends StatefulWidget {
  const SplashScreen({super.key});

  @override
  State<SplashScreen> createState() => _SplashScreenState();
}

class _SplashScreenState extends State<SplashScreen> {

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      Timer(const Duration(seconds: 3), () {
        UserManager().loadUser().then((user) {
          if (user == null) {
            Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (_) => const Onboarding1VoneScreen()));
          } else {
            Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (_) => const Home()), (route) => false);
          }
        });
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: ColorConstant.splashBackground,
      body: Stack(
        children: [
          Align(
            alignment: Alignment.center,
            child: CommonImageView(
              imagePath: ImageConstant.tvLogo,
              fit: BoxFit.contain,
              width: getHorizontalSize(200.00),
            ),
          ),
          Align(
            alignment: Alignment.bottomCenter,
            child: Padding(
              padding: const EdgeInsets.only(bottom: 48),
              child: AnimatedTextKit(
                totalRepeatCount: 1,
                animatedTexts: [
                  TypewriterAnimatedText(
                    '泰美影视',
                    speed: const Duration(milliseconds: 300),
                    textStyle: TextStyle(
                      color: Colors.white,
                      fontSize: getFontSize(48),
                      fontFamily: 'SF Pro Display',
                      fontWeight: FontWeight.w500,
                      height: 1.00,
                    ),
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }

}

运行状态截图

  • 正常运行:正常运行截图
  • 白屏状态:白屏截图

项目 build.gradle 代码

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

app build.gradle 代码

plugins {
  id "com.android.application"
  id "kotlin-android"
  id "dev.flutter.flutter-gradle-plugin"
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
  localPropertiesFile.withReader('UTF-8') { reader ->
    localProperties.load(reader)
  }
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
  flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
  flutterVersionName = '1.0'
}


def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
  keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
  compileSdkVersion flutter.compileSdkVersion
  ndkVersion flutter.ndkVersion

  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

  kotlinOptions {
    jvmTarget = '1.8'
  }

  sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
  }

  defaultConfig {
    applicationId "com.wesayforever.taimeitv_vip"
    minSdkVersion flutter.minSdkVersion
    targetSdkVersion flutter.targetSdkVersion
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    multiDexEnabled true
  }

  signingConfigs {
    release {
      keyAlias keystoreProperties['keyAlias']
      keyPassword keystoreProperties['keyPassword']
      storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
      storePassword keystoreProperties['storePassword']
    }
  }

  buildTypes {
    release {
      signingConfig signingConfigs.release
    }
  }
    namespace 'com.wesayforever.shutiaotv_app'
}

flutter {
  source '../..'
}

dependencies {
  implementation "androidx.multidex:multidex:2.0.1"
}

settings.gradle 代码

pluginManagement {
  def flutterSdkPath = {
    def properties = new Properties()
    file("local.properties").withInputStream { properties.load(it) }
    def flutterSdkPath = properties.getProperty("flutter.sdk")
    assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
    return flutterSdkPath
  }
  settings.ext.flutterSdkPath = flutterSdkPath()

  includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")

  repositories {
    google()
    mavenCentral()
    gradlePluginPortal()
  }
}

plugins {
  id "dev.flutter.flutter-plugin-loader" version "1.0.0"
  id "com.android.application" version '7.4.2' apply false
  id "org.jetbrains.kotlin.android" version "1.7.10" apply false
}

include ":app"

AndroidManifest.xml 代码

<manifest xmlns:android="http://schemas.android.com/apk/res/android">

  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

  <queries>
    <intent>
      <action android:name="android.intent.action.VIEW" />
      <data android:scheme="https" />
    </intent>

    <intent>
      <action android:name="android.intent.action.VIEW" />
      <data android:scheme="mailto" />
    </intent>
  </queries>
   <application
        android:label="泰美影视"
        android:name="${applicationName}"
        android:icon="@mipmap/launcher_icon">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-3261022732810553~9529490136"/>
    </application>
</manifest>

内容的提问来源于stack exchange,提问作者user3223981

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:53:10