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

Posted

技术标签:

【中文标题】没有为“对象”类型定义运算符“[]”。尝试定义运算符\'[]\'.dartundefined_operator [重复]【英文标题】:The operator '[]' isn't defined for the type 'Object'. Try defining the operator '[]'.dartundefined_operator [duplicate]没有为“对象”类型定义运算符“[]”。尝试定义运算符'[]'.dartundefined_operator [重复] 【发布时间】:2021-07-30 13:16:18 【问题描述】:

这是完整代码,但我在标题中遇到错误: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 '[]'.

【问题讨论】:

试试把最终的 Map map = doc.data() 请检查副本以获取正确的解决方案***.com/questions/67610111/… 【参考方案1】:

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

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

【讨论】:

以上是关于没有为“对象”类型定义运算符“[]”。尝试定义运算符'[]'.dartundefined_operator [重复]的主要内容,如果未能解决你的问题,请参考以下文章

没有为“对象”类型定义运算符“[]”。尝试定义运算符'[]'。在使用 listview builder 显示数据时

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

//没有为类型'Object'定义运算符'[]'。? [复制]

没有为类“对象”定义运算符“[]”。扑

未为类型定义运算符“[]”尝试定义运算符“[]”

未为“对象”类型定义运算符“[]”[重复]