【问题标题】:Error:- type 'List<dynamic>' is not a subtype of type 'Future<dynamic>'错误:- 类型 'List<dynamic>' 不是类型 'Future<dynamic>' 的子类型
【发布时间】:2021-08-13 15:14:55
【问题描述】:

我怎样才能摆脱这个错误或者我可以调用什么来代替 List dynamic 或 Future dynamic 或者我怎样才能将 List 转换为 Future?我只想从 firestore 显示这个文本。 错误:-

     Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Future<dynamic>'

以这种方式获取数据并带我出错的注释行:-

    class EditInfo extends StatefulWidget{
    @override
   EditInfoState createState () => EditInfoState();
   }


  class EditInfoState extends State<EditInfo>
 with SingleTickerProviderStateMixin{
 final CollectionReference _reference =   FirebaseFirestore.instance.collection("users");
 final FirebaseAuth auth = FirebaseAuth.instance;
 CreateAccountData accountData;

 Future myInterest;


    
    getalldata() async {
    Future<CreateAccountData> getUser() async {
    final User user = auth.currentUser;
    return _reference.doc(user.uid).get().then((m) =>  CreateAccountData.fromDocument(m));
    }
    getUser().then((value)async{
    accountData= value;
    DocumentSnapshot doc = await usercollection.doc(auth.currentUser.uid).get();
   myInterest = doc.data()['hobbies'];///Error takes me to,myInterest

     });
 }

在网格视图中显示它:-

       child: FutureBuilder(
                      future: myInterest,
                      builder: (BuildContext context,AsyncSnapshot snapshot){
                        if(!snapshot.hasData){
                          return Center(
                            child: CircularProgressIndicator(),
                          );
                        } if(snapshot.data.docs.isEmpty){
                          return Align(
                            alignment: FractionalOffset.centerLeft,
                            child: Text("Add what you love to do.....",textAlign: TextAlign.left,style: TextStyle(fontSize: 17),),
                          );
                        }return GridView.builder(
                            physics: BouncingScrollPhysics(),
                            scrollDirection: Axis.horizontal,
                            shrinkWrap: true,
                            itemCount: snapshot.data.docs.length,
                            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 5, crossAxisSpacing: 5,),
                            itemBuilder: (BuildContext context, int index){
                             // DocumentSnapshot interestList = snapshot.data.docs[index]['hobbies'];
                              return Padding(
                                  padding: EdgeInsets.fromLTRB(5, 5, 5, 5),
                                child: Text(snapshot.data.documents[index]['hobbies']),
                              );
                            }
                        );

                      },
                    ),

【问题讨论】:

  • 你是如何声明myInterest的?
  • 未来我的兴趣;
  • 请用myInterest 提供您的代码sn-p
  • @GAGANSINGH doc.data()['hobbies']; 将返回一个列表。
  • 我现在需要在哪里进行哪些更改?所以,我可以获取和显示数据。是在未来的建设者中吗?

标签: flutter dart google-cloud-firestore


【解决方案1】:

您收到此错误是因为您将 List 分配给声明为 Future 的变量。

您正在声明:

 Future myInterest;

然后设置一个不是未来的值:

myInterest = doc.data()['hobbies'];

最终有很多方法可以解决这个问题,其中之一:

Future getAllData() async {
  // do the api stuff
  return doc.data()['hobbies'];
};

然后赋值给它:

myInterest = getAllData();

不过,我鼓励你了解期货。

【讨论】:

  • Future:-名称“Interest”不是类型,因此不能用作类型参数
  • 我也鼓励你学习类型,让我编辑我的代码,这样它就不会给你这个错误
  • Future&lt;Interest&gt;返回类型改为Future
  • 我必须在哪里分配 myInterest?我想我分配错了地方,因为它没有做任何改变。
  • 这真的取决于你打算做什么。通过几乎不看您的代码,我认为您想要的是在 onInit 方法或小部件的构造函数中进行分配。
猜你喜欢
  • 2022-01-23
  • 2020-01-07
  • 2020-09-20
  • 2019-12-31
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
相关资源
最近更新 更多