Flutter 列表<;动态>';不是类型为';地图<;动态,动态>;

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

我从github获取了代码,但仍然不起作用

生成FutureBuilderState(脏,状态:_FutureBuilderState#a936c)时引发以下类型错误: 类型“List”不是类型“Map”的子类型

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();
            }));
  }
}