显示从Firestore中检索到的数组字段时出错

时间:2020-09-03 13:02:03

标签: firebase flutter dart google-cloud-firestore

我正在尝试使用streambuilder检索数组“类”,如下图所示。我使用future builder尝试了同样的方法,但是从前面提出的问题中找不到合适的解决方案。如何获取课程列表并显示在列表视图中?

当我将鼠标悬停在显示以下内容的['fields']上时,错误发生在snapshot.data['fields']['class'][position]

不能将参数类型'String'分配给参数类型'int'

enter image description here

enter image description here

我使用streambuilder实现了以下代码:

var ref;
  List values = [];
  Future<void> getassignment() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    final name = prefs.getString('orgname') ?? '';
    print(name);
   var ref = FirebaseFirestore.instance.collection('Org').doc(name).collection('Login').doc(FirebaseAuth.instance.currentUser.uid);
      print(ref);
      ref.snapshots().forEach((doc) {

    values = List.from(doc.data()['fields']['class']);
    print(values);
    

    });
  }
 @override
  void initState() {
    
    getassignment();
    super.initState();
  }
@override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color(0xFF1976D2),
      body: StreamBuilder<List<DocumentSnapshot>>(
        stream: ref.snapshots(),
        builder: (context,snapshot){
         if(!snapshot.hasData){
            print("Error");
          }else{
            return Container(
             child: ListView.builder(
          itemCount: snapshot.data.length,
          itemBuilder: (context, position) {
            return GestureDetector(
              onTap: (){
                Navigator.of(context).push(MaterialPageRoute<Null>(
                                      builder: (BuildContext context){
                                        return new SubjectList(
                                          clas:snapshot.data['fields']['class'][position].toString(),
                                        );
                                      }
                                      ));
              },
              child: Card(
                
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Text(snapshot.data['fields']['class'][position].toString(), style: TextStyle(fontSize: 22.0),),
                  
                ),
              ),
            );
          },
        ),
           );
         
          }
        },
      )
          
        
    );
  }

1 个答案:

答案 0 :(得分:1)

您的类数组中的数据实际上是一个字符串,而不是整数。您可以知道,因为它的值前后都有引号。如果它是数字类型的值,则不会带引号。

如果在那里需要数字,则写数据的代码应使用数字类型变量,而不是字符串。您可能必须convert it to a number first

如果您无法更改编写文档的代码,那么您将不得不更改读取数据库的代码以将字符串转换为数字。