Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何修复';必须向文本小部件提供非空字符串';_Flutter_Dart - Fatal编程技术网

Flutter 如何修复';必须向文本小部件提供非空字符串';

Flutter 如何修复';必须向文本小部件提供非空字符串';,flutter,dart,Flutter,Dart,我“刚开始用flatter编码,但在应用程序的第二页上,文本小部件抛出了”失败的断言:第241行pos 10:'数据!=null'”时出现了这个问题 我试着将“list.title”改为“hello”,但没用,而且如果我在第一页使用文本小部件,效果也不错 // go to second page code viewTodoList(BuildContext context,TodoList item){ assert(item!=null); Navigator.pushNa

我“刚开始用flatter编码,但在应用程序的第二页上,文本小部件抛出了”失败的断言:第241行pos 10:'数据!=null'”时出现了这个问题

我试着将“list.title”改为“hello”,但没用,而且如果我在第一页使用文本小部件,效果也不错

 // go to second page code
 viewTodoList(BuildContext context,TodoList item){
    assert(item!=null);
    Navigator.pushNamed(context,TodoListView.routeName,arguments: item);
}

// second page code
class TodoListView extends StatefulWidget {
    static const routeName ="/todo_list_view";
    TodoListView({Key key, this.title}) : super(key: key);

    final String title;

    @override
   _TodoListViewState createState() => _TodoListViewState();
}
class _TodoListViewState extends State<TodoListView> {

    final TodoList list=ModalRoute.of().settings.arguments;

    @override
    Widget build(BuildContext context) {

        return Scaffold(
            appBar: AppBar(
               title: Text(widget.title),
            ),//appBar
            body: Text(list.title),

        );//Scaffold
  }
}
//转到第二页代码
viewTodoList(BuildContext上下文,TodoList项){
断言(项!=null);
pushNamed(上下文,TodoListView.routeName,参数:item);
}
//第二页代码
类TodoListView扩展了StatefulWidget{
静态常量routeName=“/todo\u list\u view”;
TodoListView({Key,this.title}):super(Key:Key);
最后的字符串标题;
@凌驾
_TodoListViewState createState()=>TodoListViewState();
}
类_TodoListViewState扩展了状态{
最终TodoList=ModalRoute.of().settings.arguments;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),//appBar
正文:文本(列表标题),
);//脚手架
}
}

如果您有空的
文本(widget.title??)
请将
正文:文本(list.title)
更改为
文本(${list.title}”)


类似widget.title的其他控件也是如此。例如,相同的想法

您的page2构造函数需要一个标题:

TodoListView({Key key, this.title}) : super(key: key);
但在调用页面时,您没有传递它:

Navigator.pushNamed(context,TodoListView.routeName,arguments: item);
如果未通过,则为
null
(这是您的问题)

在配置命名路由时,您可以冷传递它:

MaterialApp(
...
    routes: [
        TodoListView.routeName: (BuildContext context) => TodoListView(title:'Page 2'),
]
...
)
但是如果你想把它修好,你应该把它放在TodoListView中

空安全示例:

        Scaffold(
            appBar: AppBar(
               title: Text('Page 2'),
            ),//appBar
            body: Text(list?.title ?? ''),

        );//Scaffold
//转到第二页代码
viewTodoList(BuildContext上下文,TodoList项){
断言(项!=null);
pushNamed(上下文,TodoListView.routeName,参数:item);
}
//第二页代码
类TodoListView扩展了StatefulWidget{
静态常量routeName=“/todo\u list\u view”;
TodoListView({Key,this.title}):super(Key:Key);
最后的字符串标题;
@凌驾
_TodoListViewState createState()=>TodoListViewState();
}
类_TodoListViewState扩展了状态{
最终TodoList=ModalRoute.of().settings.arguments;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title??),
),//appBar
正文:文本(list.title??),
);//脚手架
}

谢谢,我不需要传递标题,我认为“Text(list.title)”是问题所在。我认为如果我们能像在任何其他编程语言上一样获得错误行会更好
 // go to second page code
 viewTodoList(BuildContext context,TodoList item){
    assert(item!=null);
    Navigator.pushNamed(context,TodoListView.routeName,arguments: item);
}

// second page code
class TodoListView extends StatefulWidget {
    static const routeName ="/todo_list_view";
    TodoListView({Key key, this.title}) : super(key: key);

    final String title;

    @override
   _TodoListViewState createState() => _TodoListViewState();
}
class _TodoListViewState extends State<TodoListView> {

    final TodoList list=ModalRoute.of().settings.arguments;

    @override
    Widget build(BuildContext context) {

        return Scaffold(
            appBar: AppBar(
               title: Text(widget.title ?? ""),
            ),//appBar
            body: Text(list.title ?? ""),

        );//Scaffold
  }