flutter firebase从Firestore获取数组并将其分配到列表

nmpmafwu  于 2023-01-18  发布在  Flutter
关注(0)|答案(3)|浏览(106)

我在Firestore中有一个集合。它有一个字段数组。我试图从Firestore中获取该数组,并将其分配给flutter中的一个列表。我的集合如下所示

从Firestore获取数据的代码

List<Offset> pointlist = <Offset>[];

 getdata() async{
  await Firestore.instance.collection("points").document('biZV7cepFJA8T6FTcF08').get().then((value){
setState(() {

List<Offset> pointlist = List.from(value.data['point']);

});
   });
  }

  @override
  void initState() {
    super.initState();
    getdata();
  }

我得到此错误类型“String”不是类型“Offset”的子类型

nuypyhwy

nuypyhwy1#

你做错的事是:

// You have initialised your List as a Offset Object Type
List<Offset> pointList;

其次,如果您仔细查看firebase,您分配的数据是String

"Offset(x,y)"

最后,尝试将String值赋给Offset class/object类型的List
如果您想让它正常工作,那么可以创建String类型的List,然后将其添加到List

List<String> pointlist = List.from(value.data['point']);

或者先像这样将数据Add到Offset对象中,然后将其传递给List

List<Offset> pointList = <Offset>[];

getdata() async{
  await Firestore.instance.collection("points").document('biZV7cepFJA8T6FTcF08').get().then((value){
setState(() {
      // first add the data to the Offset object
      List.from(value.data['point']).forEach((element){
          Offset data = new Offset(element);

          //then add the data to the List<Offset>, now we have a type Offset
          pointList.add(data);
      });

      });
   });
  }

摘要

始终查找您为List指定的数据类型,如果您尝试添加的数据类型不是List<T>T类型,您将始终得到类型不匹配的错误。希望这将使您对编程有一些清晰的认识和基本的想法。请继续学习:)

a8jjtwal

a8jjtwal2#

你必须声明列表和所有列表项将被存储在已声明列表中,以便你可以访问它。

List<dynamic> alldata =[];

    Future<QuerySnapshot?> getData() async {
        dataofItem = FirebaseFirestore.instance
            .collection('$data')
            .get()
            .then((QuerySnapshot? querySnapshot) {
          querySnapshot!.docs.forEach((doc) {
            allData = doc["item_text_"];
            print("allData = $allData");
            //  print("getData = ${doc["item_text_"]}");
          });
        });
        return dataofItem;
      }
wvyml7n5

wvyml7n53#

使用null safety更新2023

假设结构为。

...
arrayOfString
 |_element1
 |_element2
 |_element3
...

使用以下代码获取arrayOfString参数的数组元素

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>(
          stream: FirebaseFirestore.instance
              .collection('users')
              .doc(FirebaseAuth.instance.currentUser!.uid)
              .snapshots(),
          builder:
              (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
            if (snapshot.hasError) {
              return const Text('Something went wrong');
            }
            if (snapshot.connectionState == ConnectionState.waiting) {
              return const Text("Loading");
            }
            Map<String, dynamic> data =
                snapshot.data!.data()! as Map<String, dynamic>;
            return ListView(
                children: data['arrayOfString'].map<Widget>((e) { 👈 arrayOfString has array of Strings
              return ListTile(
                title: Text(e.toString()), // 👈 printing every string
              );
            }).toList());
          },
        ),
      ),
    );
  }

相关问题