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混淆规则
- 打开安卓项目下的
android/app/proguard-rules.pro文件,添加如下规则:
# 保留Flutter核心类不被混淆 -keep class io.flutter.** { *; } -keep class androidx.lifecycle.** { *; } # 保留Activity继承类 -keep public class * extends io.flutter.embedding.android.FlutterActivity
- 确认
android/app/build.gradle中release构建配置已引用上述规则文件:
android { // 其他配置... buildTypes { release { minifyEnabled true shrinkResources true // 确保下方配置包含你自定义的proguard-rules.pro proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
- 执行
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
相关产品推荐
相关产品推荐

