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

Flutter Android Release/Profile模式下popUntil读取RouteSettings始终为null问题

Flutter 1.22.5 Android Release/Profile模式下RouteSettings返回null解决方案

问题根因

该问题由Android端Release/Profile模式默认开启的R8代码混淆优化导致,Flutter 1.22.x版本的默认混淆规则没有完整保留RouteSettings类的相关属性,构建时name、arguments字段被当成无用代码擦除,Debug模式未开启混淆所以运行正常。

解决方案

方案1:补充Android混淆规则

  1. 打开安卓项目下的android/app/proguard-rules.pro文件,添加如下规则:
# 保留Flutter核心类不被混淆
-keep class io.flutter.** { *; }
-keep class androidx.lifecycle.** { *; }
# 保留Activity继承类
-keep public class * extends io.flutter.embedding.android.FlutterActivity
  1. 确认android/app/build.gradle中release构建配置已引用上述规则文件:
android {
    // 其他配置...
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            // 确保下方配置包含你自定义的proguard-rules.pro
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
  1. 执行flutter clean清理缓存后重新构建Release包验证即可。

方案2:路由判断逻辑兼容

如果暂时不想修改混淆配置,可以调整popUntil的判断逻辑,避免依赖RouteSettings属性:

Navigator.of(context).popUntil((route) {
  // 通过路由对应的页面类型判断,不受混淆影响
  if (route is MaterialPageRoute) {
    return route.builder(context) is ScreenA;
  }
  return false;
});

方案3:版本升级

该问题属于Flutter 1.22.x版本的已知缺陷,升级到Flutter 2.0及以上版本即可解决,官方已在后续版本的默认混淆规则中补充了相关类的保留配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:48:02