没有为类型“Object”定义运算符“[]”。尝试定义运算符 '[]'.dartundefined_operator

时间:2021-05-08 13:58:45

标签: firebase flutter google-cloud-firestore

这是完整的代码,但我在标题中遇到错误:Text(map["title"]), 部分代码

final TextEditingController _controller = TextEditingController();


     void _addTask() {
    FirebaseFirestore.instance
      .collection("todos")
      .add({"title": _controller.text});

    _controller.text = "";
    }

    Widget _buildList(QuerySnapshot snapshot) {
    return ListView.builder(
     itemCount: snapshot.docs.length,
     itemBuilder: (context, index) {
      final doc = snapshot.docs[index];
      final map = doc.data();
      return ListTile(
        title: Text(map["title"]),
        );
      },
    );
    }

    class TodoListPage extends StatelessWidget {
    Widget _buildBody(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(children: [
        Row(
          children: [
            Expanded(
                child: TextField(
              controller: _controller,
              decoration: InputDecoration(
                hintText: "Enter task name",
              ),
            )),
            FlatButton(
              child: Text(
                'Add Task',
                style: TextStyle(color: Colors.white),
              ),
              color: Colors.green,
              onPressed: () {
                _addTask();
              },
            )
          ],
        ),
        StreamBuilder<QuerySnapshot>(
          stream: FirebaseFirestore.instance.collection("todos").snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) return LinearProgressIndicator();

            return Expanded(child: _buildList(snapshot.data));
          },
        )
      ]),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Todo List'),
      ),
      body: _buildBody(context),
        );}
     }

我想显示云防火墙的文档标题。

错误

The operator '[]' isn't defined for the type 'Object'.
Try defining the operator '[]'.

1 个答案:

答案 0 :(得分:0)

问题出在您的 itemBuilder 中,更具体地说是 map 变量的格式没有预期值,因此可以获取标题字段。由于您没有将此 map 变量用于其他任何地方,也没有使用 doc 变量,因此您可以取消创建这两个额外变量并将值直接传递给您的 ListTile,如下所示:

itemBuilder: (context, index) {
    return ListTile(
        title: Text(snapshot.docs[index].data()["title"]),
    );
},