【问题标题】:Text widget must not be null文本小部件不能为空
【发布时间】:2020-05-31 08:50:42
【问题描述】:

我通过 pushNamedandRemoveUntil 传递参数,但是当我尝试访问传递的参数时,它显示文本小部件不能为空。

CustomButton(
                    buttonText: 'Go',
                    buttonClick: () {Navigator.pushNamedAndRemoveUntil(context, Next.id, (route) => false, arguments: "123456789");},
                  ),

class Next extends StatefulWidget {

  const Next({this.number});
  static const id = "next";
  final String number;
  @override
  _NextState createState() => _NextState();
}

class _NextState extends State<Next> {
 @override
  Widget build(BuildContext context) {
       return Scaffold(
body: Container(child: Center(child: Text(widget.number)))
)
}
}

错误是 断言失败:第 298 行 pos 10: 'data != null'

【问题讨论】:

    标签: android ios google-chrome flutter


    【解决方案1】:

    你不能那样访问。在下一个屏幕中使用ModalRoute 并获取数据。

    Widget build(BuildContext context) {
          final number = ModalRoute.of(context).settings.arguments as String;
    //....
    }
    

    【讨论】:

    • 您已将其添加到构建方法中,请参阅编辑后的答案。
    【解决方案2】:

    因为你传递的参数是空的

    如果你想处理错误,你应该像这样使用 Text 小部件:

    Text(widget.number ?? '')
    

    你应该像这样传递参数

    CustomButton(
      buttonText: 'Go',
      buttonClick: () {
          navigator.pushAndRemoveUntil(
             MaterialPageRoute(builder: (BuildContext context) => Next(id: '123456789')),
            (Route<dynamic> route) => false,
          );
    ),
    

    【讨论】:

    • 那我怎么传参数我传了一个数字但是为什么没有到第二页。
    • 您的导航器错误,您无法使用 pushNamed 方法传递参数
    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多