首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“List<dynamic>”不是类型“Map<dynamic,dynamic>”的子类型

“List<dynamic>”不是类型“Map<dynamic,dynamic>”的子类型
EN

Stack Overflow用户
提问于 2021-05-16 13:22:03
回答 1查看 87关注 0票数 0

我从github获取了代码,但仍然不能正常工作

在生成列表(脏,状态:_FutureBuilderState#a936c)时引发以下列表:类型‘_TypeError’不是类型'Map‘的子类型

代码语言:javascript
复制
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声明在这里

代码语言:javascript
复制
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();

这是地图

代码语言:javascript
复制
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();
            }));
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-05-16 19:02:50

看起来像是将List<dynamic>类型的值赋给了Map<dynamic,dynamic>类型的变量。

您可以更改以下代码:

代码语言:javascript
复制
    Map<dynamic,dynamic> values = snapshot.data.value;
    values.forEach((key, values) {
      lists.add(values);
    });

要这样做:

代码语言:javascript
复制
    list = snapshot.data.value.map((value) =>  value as Map<dynamic, dynamic>).toList();

上面的代码将snapshot.data.value映射到一个List,每个列表项都被转换为一个Map<dynamic, dynamic>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67553426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档