【问题标题】:I want to pass Screen_Name as an attribute in a class model in Flutter我想在 Flutter 的类模型中将 Screen_Name 作为属性传递
【发布时间】:2021-11-01 19:17:14
【问题描述】:

实际上,我有一张卡片,上面有标题和图片,可以导航到特定的路线。我想将屏幕名称作为类模型中的属性传递。但是当我点击什么都没有发生并且此消息出现在控制台中:

'package:flutter/src/widgets/navigator.dart':断言失败:行 4135 pos 12: 'name != null': 不正确。

这是类模型:

class ZekrModel {
  final String zekrTitle;
  final String zekrImage;
  final String zekrPage;
  ZekrModel({this.zekrTitle, this.zekrImage, this.zekrPage});
}

这是提供者:

class ZekrProvider with ChangeNotifier{
  List<ZekrModel> _zekrList = [
    ZekrModel(
        zekrTitle: 'أذكار المساء',
        zekrImage: 'assets/images/az6.png',
        zekrPage: 'AlsabahScreen.id',
      ),
  ];

  List<ZekrModel> get zekrList {
    return _zekrList;
  }
}

这里是代码没有响应的 UI 代码:

Consumer<ZekrProvider>(
        builder:(context, value, child) => GridView.count(
          crossAxisCount: 2,
          childAspectRatio: 0.3.sw/0.18.sh,
          //mainAxisSpacing: 8,
          //crossAxisSpacing: 6,
          children: List.generate(value.zekrList.length, (index){
            return ZekrCard(
              zekrTitle: value.zekrList[index].zekrTitle,
              zekrImage: value.zekrList[index].zekrImage,
              zekrRoute: (){Navigator.pushNamed(context, value.zekrList[index].zekrPage);},
            );
          }),
        ),
      ),

这是我的路线类:

final Map<String, WidgetBuilder> routes = {
  SplashScreen.routeName : (context) => SplashScreen(),
  AlsabahScreen.routeName : (context) => AlsabahScreen(),
};

【问题讨论】:

  • 问题是什么?
  • 它没有响应,当我点击它时,此消息出现在控制台中:
  • 'package:flutter/src/widgets/navigator.dart':断言失败:第 4135 行第 12 行:'name != null':不正确。
  • 请分享 MaterialApp 路线

标签: flutter function class navigation arguments


【解决方案1】:

嘿伙计们,我使用以下步骤解决了它:

首先:将此属性添加到模型类

final MaterialPageRoute materialPageRoute;

变成这样:

class ZekrModel {
  final String zekrTitle;
  final String zekrImage;
  final MaterialPageRoute materialPageRoute;

  ZekrModel({this.zekrTitle, this.zekrImage, this.materialPageRoute});

}

第二:在Provider类中使用这个属性

materialPageRoute: MaterialPageRoute(builder: (context) => SecondScreen())

变成这样:

class ZekrProvider with ChangeNotifier{
  List<ZekrModel> _zekrList = [
    ZekrModel(
        zekrTitle: 'أذكار المساء',
        zekrImage: 'assets/images/az6.png',
        materialPageRoute: MaterialPageRoute(builder: (context) => AlmasaaScreen())
    ),
];

  List<ZekrModel> get zekrList {
    return _zekrList;
  }
}

最后在 UI 中使用它:

body: Consumer<ZekrProvider>(
        builder:(context, value, child) => GridView.count(
          crossAxisCount: 2,
          childAspectRatio: 0.3.sw/0.18.sh,
          //mainAxisSpacing: 8,
          //crossAxisSpacing: 6,
          children: List.generate(value.zekrList.length, (index){
            return ZekrCard(
              zekrTitle: value.zekrList[index].zekrTitle,
              zekrImage: value.zekrList[index].zekrImage,
              zekrRoute: () {
              Navigator.push(
                context, value.zekrList[index].materialPageRoute
              );
            },
            );
          }),
        ),
      ),

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2015-10-02
    • 2019-04-13
    • 2011-09-24
    • 2014-05-15
    相关资源
    最近更新 更多