【问题标题】:List<dynamic>' is not a subtype of type 'Map<dynamic, dynamic>List<dynamic>' 不是 'Map<dynamic, dynamic> 类型的子类型
【发布时间】:2021-08-05 18:08:00
【问题描述】:

我从 github 拿了代码,还是不行

在构建 FutureBuilder(dirty, state: _FutureBuilderState#a936c) 时引发了以下 _TypeError: 'List' 类型不是 '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<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();
            }));
  }
}


【问题讨论】:

  • 我猜snapshot.data.valueList,但您将其分配给Map&lt;dynamic,dynamic&gt; values

标签: flutter dart firebase-realtime-database


【解决方案1】:

您似乎将List&lt;dynamic&gt; 类型的值分配给Map&lt;dynamic,dynamic&gt; 类型的变量。

您可以更改以下代码:

    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&lt;dynamic, dynamic&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    • 2021-12-02
    • 2019-04-03
    • 2021-09-08
    • 2021-12-29
    • 2023-01-08
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多