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

Flutter将页面名作为类模型属性传递跳转报name!=null错误如何解决

问题原因
  • 路由名赋值格式错误:你在ZekrProvider中初始化ZekrModel时,给zekrPage字段赋值的'AlsabahScreen.id'加了单引号,把类静态常量引用变成了普通字符串常量,无法匹配路由表的注册key。
  • 路由常量不匹配:你的路由配置表中,AlsabahScreen对应的注册key是AlsabahScreen.routeName,但你在模型中存储的是AlsabahScreen.id,两个常量不一致,就算去掉引号也无法匹配到正确路由。
  • 可选参数空值风险:ZekrModel的构造参数为可选类型,未加非空限制,若某个实例漏传zekrPage参数,就会直接导致跳转时路由名为空,触发报错。
解决步骤
  1. 统一页面路由常量
    先确认AlsabahScreen类内的静态路由名定义,和路由表注册的key保持一致,示例:
class AlsabahScreen extends StatelessWidget {
  // 路由表中用的是routeName,就统一用该字段作为路由常量
  static const String routeName = '/alsabah_screen';
  // 其余页面代码
}
  1. 修正Provider中的常量引用
    去掉zekrPage赋值的单引号,直接引用类的静态常量:
class ZekrProvider with ChangeNotifier{
  List<ZekrModel> _zekrList = [
    ZekrModel(
        zekrTitle: 'أذكار المساء',
        zekrImage: 'assets/images/az6.png',
        // 去掉引号,直接引用静态常量,和路由表key完全一致
        zekrPage: AlsabahScreen.routeName,
      ),
  ];
  // 其余代码
}
  1. 增加空安全校验(可选优化)
    如果你的项目是Flutter空安全版本,给ZekrModel的构造参数加required修饰,编译期避免漏传参数:
class ZekrModel {
  final String zekrTitle;
  final String zekrImage;
  final String zekrPage;
  ZekrModel({
    required this.zekrTitle,
    required this.zekrImage,
    required this.zekrPage,
  });
}

同时可以给跳转逻辑加判空,避免异常场景崩溃:

zekrRoute: (){
  final targetRoute = value.zekrList[index].zekrPage;
  if (targetRoute != null && targetRoute.isNotEmpty) {
    Navigator.pushNamed(context, targetRoute);
  }
},

内容的提问来源于stack exchange,提问作者Amr El-Baroudy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:48:02