Flutter 列表<;动态>';不是类型为';地图<;动态,动态>;
我从github获取了代码,但仍然不起作用 生成FutureBuilderState(脏,状态:_FutureBuilderState#a936c)时引发以下类型错误: 类型“List”不是类型“Map”的子类型Flutter 列表<;动态>';不是类型为';地图<;动态,动态>;,flutter,dart,firebase-realtime-database,Flutter,Dart,Firebase Realtime Database,我从github获取了代码,但仍然不起作用 生成FutureBuilderState(脏,状态:_FutureBuilderState#a936c)时引发以下类型错误: 类型“List”不是类型“Map”的子类型 import'包:firebase_数据库/firebase_数据库.dart'; 进口“包装:颤振/材料.省道”; 类Home扩展了StatefulWidget{ Home({Key-Key,this.title}):super(Key:Key); 最后的字符串标题; @凌驾 _Ho
import'包:firebase_数据库/firebase_数据库.dart';
进口“包装:颤振/材料.省道”;
类Home扩展了StatefulWidget{
Home({Key-Key,this.title}):super(Key:Key);
最后的字符串标题;
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
final dbRef=FirebaseDatabase.instance.reference().child(“qs”);
在此列出声明
List<Map<dynamic,dynamic>> lists = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('nothing'),
),
body: FutureBuilder(
future: dbRef.once(),
builder: (context, AsyncSnapshot<DataSnapshot> snapshot) {
if (snapshot.hasData) {
lists.clear();
List List=[];
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“无”),
),
正文:未来建设者(
future:dbRef.one(),
生成器:(上下文,异步快照){
if(snapshot.hasData){
lists.clear();
这是地图
Map<dynamic,dynamic> values = snapshot.data.value;
values.forEach((key, values) {
lists.add(values);
});
return new ListView.builder(
shrinkWrap: true,
itemCount: lists.length,
itemBuilder: (BuildContext context[enter image description here][1], int index) {
return Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("Name: " + lists[index]["name"]),
Text("Age: " + lists[index]["age"]),
Text("Type: " + lists[index]["type"]),
],
),
);
});
}
return CircularProgressIndicator();
}));
}
}
Map value=snapshot.data.value;
values.forEach((键,值){
列表。添加(值);
});
返回新的ListView.builder(
收缩膜:对,
itemCount:lists.length,
itemBuilder:(BuildContext上下文[在此处输入图像描述][1],int索引){
回程卡(
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本(“名称:+列出[索引][“名称]),
文本(“年龄:+列出[索引][“年龄]),
文本(“类型:+列出[索引][“类型”]),
],
),
);
});
}
返回循环ProgressIndicator();
}));
}
}
看起来您正在将List
类型的值赋给Map
类型的变量
您可以更改以下代码:
Map value=snapshot.data.value;
values.forEach((键,值){
列表。添加(值);
});
为此:
list=snapshot.data.value.map((value)=>value as map.toList();
上面的代码将
snapshot.data.value
映射到一个列表
,每个列表项都被转换为映射
,我猜想snapshot.data.value
是一个列表
,但您正在将其分配给映射值
。
Map<dynamic,dynamic> values = snapshot.data.value;
values.forEach((key, values) {
lists.add(values);
});
return new ListView.builder(
shrinkWrap: true,
itemCount: lists.length,
itemBuilder: (BuildContext context[enter image description here][1], int index) {
return Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("Name: " + lists[index]["name"]),
Text("Age: " + lists[index]["age"]),
Text("Type: " + lists[index]["type"]),
],
),
);
});
}
return CircularProgressIndicator();
}));
}
}