ListView.builder给出错误:未布局RenderBox

时间:2019-03-17 06:06:04

标签: flutter

我的listview.builder给了我很多Renderbox错误,例如颤动:

  

引发了另一个异常:未布置RenderBox:RenderViewport#fa71e NEEDS-LAYOUT NEEDS-PAINT

并且:

  

NoSuchMethodError:方法'<='在null上被调用。

我尝试添加填充,但无济于事。我正在Flutter 1.3.10版上运行。

错误地初始化了什么?

import 'package:flutter/material.dart';

void main() => runApp(TodoList());

class TodoList extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _TodoListState();
  }
}

var TaskTextField;
List taskTextList = [];
var TaskIsImportant = false;

class _TodoListState extends State<TodoList> {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("To-Do List V2"),
        ),
        body: Column(
          children: <Widget>[
            Container(
              child: TextField(
                decoration: InputDecoration(
                  hintText: "Enter title of task to be added"),
                onChanged: (taskTextField) {
                  setState(() {
                    TaskTextField = taskTextField;
                    print(TaskTextField);
                  });
                },
              ),
              margin: EdgeInsets.all(16.0),
            ),
            CheckboxListTile(
              title: Text("Important"),
              activeColor: Colors.blue,
              value: TaskIsImportant,
              onChanged: (val) {
                setState(() {
                  TaskIsImportant = !TaskIsImportant;
                  print(TaskIsImportant);
                });
              },
            ),
            Container(
              margin: EdgeInsetsDirectional.fromSTEB(118, 20, 118, 20),
              child: Row(
                children: <Widget>[
                  RaisedButton(
                    child: Icon(Icons.add),
                    onPressed: () {
                      setState(() {
                        if (TaskIsImportant) {
                          taskTextList.add("❗️$TaskTextField");
                          //taskTitleList.add(TaskDetailField);
                        } else {
                          taskTextList.add(TaskTextField);
                          //taskTitleList.add(TaskDetailField);
                        }
                      });
                    },
                  ),
                  RaisedButton(
                    child: Icon(Icons.done_all),
                    onPressed: () {
                      setState(() {
                        taskTextList = [];
                      });
                    },
                  ),
                ],
              ),
            ),
            ListView.builder(
              itemBuilder: (context, index) {
                var title = taskTextList[index];
                padding: EdgeInsets.all(16.0);
                return ListView(
                  children: <Widget>[
                    Text(title),
                  ],
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

2 个答案:

答案 0 :(得分:0)

请将您的ListView.builder更改为

        Expanded(
          child: ListView.builder(
            itemBuilder: (context, index) {
              var title = taskTextList[index];
              padding: EdgeInsets.all(16.0);
              return ListTile(
                title: Text(title),
              );
            },
            itemCount: taskTextList.length,
          ),
        )

希望这会有所帮助!

答案 1 :(得分:0)

Column小部件中包装Flexible子小部件,例如Expanded。另外,您应该使用例如MaterialApp的应用程序将无状态窗口小部件作为入口,然后从那里调用有状态窗口小部件。