我从github获取了代码,但仍然不能正常工作
在生成列表(脏,状态:_FutureBuilderState#a936c)时引发以下列表:类型‘_TypeError’不是类型'Map‘的子类型
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
class Home extends StatefulWidget {
Home({Key key, this.title}) : super(key: key);
final String title;
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final dbRef = FirebaseDatabase.instance.reference().child("qs");List声明在这里
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();这是地图
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();
}));
}
}发布于 2021-05-16 19:02:50
看起来像是将List<dynamic>类型的值赋给了Map<dynamic,dynamic>类型的变量。
您可以更改以下代码:
Map<dynamic,dynamic> values = snapshot.data.value;
values.forEach((key, values) {
lists.add(values);
});要这样做:
list = snapshot.data.value.map((value) => value as Map<dynamic, dynamic>).toList();上面的代码将snapshot.data.value映射到一个List,每个列表项都被转换为一个Map<dynamic, dynamic>。
https://stackoverflow.com/questions/67553426
复制相似问题