Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 颤振Todo在title=widget.title处返回null_Flutter_Dart - Fatal编程技术网

Flutter 颤振Todo在title=widget.title处返回null

Flutter 颤振Todo在title=widget.title处返回null,flutter,dart,Flutter,Dart,我的Todolist有一个问题,它返回错误消息:“必须向文本小部件提供非空字符串。 'package:flatter/src/widgets/text.dart': 断言失败:第360行pos 10:“data!=null'”及其在类MyHomePage中的行标题:new Text(widget.title)。我已尝试将其更改为title:new Text(widget.title???),但这不起作用。是否有其他可行的解决方案 void main() => runApp(new M

我的Todolist有一个问题,它返回错误消息:“必须向文本小部件提供非空字符串。 'package:flatter/src/widgets/text.dart': 断言失败:第360行pos 10:“data!=null'”及其在类MyHomePage中的行标题:new Text(widget.title)。我已尝试将其更改为title:new Text(widget.title???),但这不起作用。是否有其他可行的解决方案

   void main() => runApp(new MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          title: 'Todos',
          theme: new ThemeData(primarySwatch: Colors.deepOrange),
          home: new MyHomePage(title: 'Todos'),
        );
      }
    }
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
      final String title;
      @override
      MyHomePageState createState() => new MyHomePageState();
    }
    
    class MyHomePageState extends State<MyHomePage> {
      
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar:  new AppBar(
            title: new Text(widget.title),
          ),
          body: TodoList(),
        );
      }
    }

class TodoList extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => TodoListState();
}

class TodoListState extends State {
  DbHelper helper = DbHelper();
  List<Todo> todos;
  int count = 0;

  @override
  Widget build(BuildContext context) {
    if (todos == null) {
      todos = List<Todo>();
      getData();
    }
    return Scaffold(
      body: todoListItems(),
      floatingActionButton: FloatingActionButton(
          onPressed: () {
            navigateToDetail(Todo('', 3, ''));
          },
          tooltip: "Add new Todo",
          child: new Icon(Icons.add)),
    );
  }

  ListView todoListItems() {
    return ListView.builder(
      itemCount: count,
      itemBuilder: (BuildContext context, int position) {
        return Card(
          color: Colors.white,
          elevation: 2,
          child: ListTile(
            leading: CircleAvatar(
              backgroundColor: getColor(this.todos[position].priority),
              child: Text(this.todos[position].priority.toString()),
            ),
            title: Text(this.todos[position].title),
            subtitle: Text(this.todos[position].date),
            onTap: () {
              debugPrint("Tapped on " + this.todos[position].id.toString());
              navigateToDetail(this.todos[position]);
            },
          ),
        );
      },
    );
  }

  void getData() {
    final dbFuture = helper.initializeDb();
    dbFuture.then((result) {
      final todosFuture = helper.getTodos();
      todosFuture.then((result) {
        List<Todo> todoList = List<Todo>();
        count = result.length;
        for (int i = 0; i < count; i++) {
          todoList.add(Todo.fromObject(result[i]));
          debugPrint(todoList[i].title);
        }
        setState(() {
          todos = todoList;
          count = count;
        });
        debugPrint("Items " + count.toString());
      });
    });
  }

  Color getColor(int priority) {
    switch (priority) {
      case 1:
        return Colors.red;
        break;
      case 2:
        return Colors.orange;
        break;
      case 3:
        return Colors.green;
        break;
      default:
        return Colors.green;
    }
  }

  void navigateToDetail(Todo todo) async {
    bool result = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => TodoDetail(todo)),
    );
    if (result == true) {
      getData();
    }
  }
}
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“待办事项”,
主题:新主题数据(原始样本:颜色。深橙色),
主页:新的MyHomePage(标题:“Todos”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
MyHomePageState createState()=>新建MyHomePageState();
}
类MyHomePageState扩展了状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(widget.title),
),
正文:TodoList(),
);
}
}
类TodoList扩展了StatefulWidget{
@凌驾
State createState()=>TodoListState();
}
类TodoListState扩展了状态{
DbHelper=DbHelper();
列出待办事项;
整数计数=0;
@凌驾
小部件构建(构建上下文){
如果(todos==null){
todos=列表();
getData();
}
返回脚手架(
正文:todoListItems(),
浮动操作按钮:浮动操作按钮(
已按下:(){
导航细节(Todo('',3'');
},
工具提示:“添加新待办事项”,
子项:新图标(Icons.add)),
);
}
ListView todoListItems(){
返回ListView.builder(
itemCount:count,
itemBuilder:(构建上下文,int位置){
回程卡(
颜色:颜色,白色,
标高:2,
孩子:ListTile(
领先:CircleAvatar(
backgroundColor:getColor(this.todos[position].priority),
子项:文本(this.todos[position].priority.toString()),
),
标题:文本(this.todos[position].title),
字幕:文本(this.todos[position].date),
onTap:(){
debugPrint(“点击”+this.todos[position].id.toString());
导航详细信息(此.todos[位置]);
},
),
);
},
);
}
void getData(){
final dbFuture=helper.initializeDb();
dbFuture.then((结果){
final todosFuture=helper.getTodos();
todosFuture。然后((结果){
List-todoList=List();
count=result.length;
for(int i=0;iToModetail(todo)),
);
如果(结果==真){
getData();
}
}
}

请将此行
标题:新文本(widget.title),
更改为
标题:新文本(widget.title??),

first???”
这是一个空检查…当first为空时返回


编辑

请对所有文本小部件重复此方法

        child: Text(this.todos[position].priority.toString() ?? ""),
        title: Text(this.todos[position].title ?? "" ),
        subtitle: Text(this.todos[position].date ?? "" ),

标题:新文本(widget.title???)无法工作,并且我可以看到我的todo已在调试控制台中填充。调试控制台:颤振:项目4引发了另一个异常:必须向文本小部件提供非空字符串。@DavidRuland此错误来自文本小部件…我编辑了答案。我已运行了端口在代码中,你说你的错误是,并且它在本地没有显示错误。这是丢失数据的一个非常基本的错误,不会很复杂。特别是当它是硬编码的时候。你只是从一个类传递一个字符串到另一个类,没有太多的失败空间。你确定这是有错误的行吗?它使用了子项:文本(this.todos[position].priority.toString()??“”),标题:文本(this.todos[position].title??),副标题:文本(this.todos[position].date??)在每个文本中,所以现在可以看到我的todo和日期和Id。但是标题仍然为空,并且没有显示在todo中。所以需要查看。