这是完整的代码,但我在标题中遇到错误: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 '[]'.
答案 0 :(得分:0)
问题出在您的 itemBuilder
中,更具体地说是 map
变量的格式没有预期值,因此可以获取标题字段。由于您没有将此 map
变量用于其他任何地方,也没有使用 doc
变量,因此您可以取消创建这两个额外变量并将值直接传递给您的 ListTile
,如下所示:
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.docs[index].data()["title"]),
);
},