在 FutureBuilder 中返回一个列表

时间:2021-05-17 16:49:14

标签: flutter

我想在我的 FutureBuilder 中返回一个字符串列表,但对我来说这是不可能的,因为一个错误告诉我列表不是 Widget 类型的子类型。 实际上,返回必须是 List 类型才能将其添加到我的主类中的类中的列表的初始化中 我将这两个类以及错误消息附加给您,以便您理解。 谢谢

类READCITEE

import 'package:ampc93/fonction/firebase_crud/add_citee.dart';
import 'package:ampc93/fonction/firebase_crud/read_citee.dart';
import 'package:ampc93/page_citee.dart';
import 'package:flutter/material.dart';

class PageVille extends StatefulWidget {
  final String? titre;

  PageVille(this.titre);

  @override
  _PageVilleState createState() => _PageVilleState();
}

class _PageVilleState extends State<PageVille> {
  TextEditingController citeeController = TextEditingController();

  List<dynamic> citeesList = [];

  @override
  void initState() {
    super.initState();
    citeesList.add(ReadCitee(widget.titre!));
  }

  Future<void> displayDialog(BuildContext context) async {
    return showDialog(
        context: context,
        builder: (context) {
          return AlertDialog(
            content: TextField(
              controller: citeeController,
              textInputAction: TextInputAction.go,
              decoration:
                  InputDecoration(hintText: "Entrez une nouvelle citée"),
            ),
            actions: [
              TextButton(
                  child: Text("Ok"),
                  onPressed: () {
                    AddCitee(widget.titre!, citeeController.text);
                    setState(() {
                      citeesList.add(citeeController.text);
                      citeeController.clear();
                    });
                    Navigator.pop(context);
                  }),
              TextButton(
                onPressed: () {
                  Navigator.pop(context);
                  citeeController.clear();
                },
                child: Text("Annuler"),
              )
            ],
          );
        });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.titre!),
        backgroundColor: Colors.teal,
      ),
      body: Container(
          padding: EdgeInsets.all(20.0),
          child: ListView.separated(
              itemBuilder: (context, index) {
                return ListTile(
                    title: citeesList[index],
                    onTap: () => Navigator.push(
                        context,
                        MaterialPageRoute(
                            builder: (context) =>
                                PageCitee(citeesList[index]))),
                    trailing: IconButton(
                        icon: Icon(Icons.delete_forever),
                        color: Colors.red[300],
                        iconSize: 32,
                        onPressed: () {
                          setState(() {
                            citeesList.remove(citeesList[index]);
                          });
                        }));
              },
              separatorBuilder: (context, index) => Divider(),
              itemCount: citeesList.length)),
      floatingActionButton: FloatingActionButton(
        onPressed: () => displayDialog(context),
        child: Icon(Icons.add),
        backgroundColor: Colors.teal[300],
      ),
    );
  }
}

班级原则

The following _TypeError was thrown building FutureBuilder<DocumentSnapshot<Object?>>(dirty, state: _FutureBuilderState<DocumentSnapshot<Object?>>#b2e48):
type 'List<dynamic>' is not a subtype of type 'Widget'

The relevant error-causing widget was
FutureBuilder<DocumentSnapshot<Object?>>
package:ampc93/…/firebase_crud/read_citee.dart:12
When the exception was thrown, this was the stack
#0      ReadCitee.build.<anonymous closure>
package:ampc93/…/firebase_crud/read_citee.dart:23
#1      _FutureBuilderState.build
package:flutter/…/widgets/async.dart:773
#2      StatefulElement.build
package:flutter/…/widgets/framework.dart:4612
#3      ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4495
#4      StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4667
...

错误

http://localhost:3001/register

1 个答案:

答案 0 :(得分:1)

尝试删除“DocumentSnapshot”。因为显然,“FutureBuilder”期待“DocumentSnapshot”数据类型。尝试从“Future Builder”中删除它,看看会发生什么。

相关问题