【问题标题】:unable to use .toList with Data from MongoDB using flutter使用颤振无法将 .toList 与来自 MongoDB 的数据一起使用
【发布时间】:2021-04-29 17:55:17
【问题描述】:

对不起,如果这是一个愚蠢的问题,我是 Flutter 和 MongoDB 的初学者 这是我返回集合数据的代码顺便说一句,这是我唯一一次使用 Mongo_Dart 在 heroku 上使用 JS 完成所有其他操作

 class Azkar {
  getAzkar() async {
    var db = await Db.create(
        'mongodb+srv://Adham:<password>@cluster0.nm0lg.mongodb.net/<db>retryWrites=true&w=majority');
    await db.open();
    print('Connected to database');
    DbCollection coll = db.collection('zekrs');

    return await coll.find().toList();
  }
}

它正在工作,我可以打印另一个类返回的数据,它是 List> 我想知道我应该如何使用它来生成包含所有数据的 ListTile。

【问题讨论】:

  • 如果返回json会更好
  • 你不能在 json 中返回它要么是字符串要么是列表

标签: mongodb flutter


【解决方案1】:

这个包不值得。我通过在云中移出后端(NodeJS)上的这部分代码并通过 HTTP 请求获得我需要的东西来解决了这个问题。

【讨论】:

    【解决方案2】:

    而不是在 List> 中返回数据,

    为您的数据创建一个类。假设你的数据给了我们一个用户列表。那么

    class User {
      Welcome({
        this.id,
        this.name,
      });
    
      int id;
      String name;
    }
    

    这将是你的 Azkar 课程

    class Azkar {
      getAzkar() async {
        var db = await Db.create(
            'mongodb+srv://Adham:<password>@cluster0.nm0lg.mongodb.net/<db>retryWrites=true&w=majority');
        await db.open();
        print('Connected to database');
        DbCollection coll = db.collection('zekrs');
    
        var list = await coll.find().toList();
        List<User> users = [];
        for (var v in list) {
            User user = User(
                id: v.id,
                name: v.name)
            users.add(user);
        }
        return users;
      }
    }
    
    
    

    你应该这样做。

    FutureBuilder(
                future: getAzkar(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    return ListView.builder(
                        itemCount: snapshot.data.length,
                        itemBuilder: (context, index) {
                          return Container(
                            margin: EdgeInsets.all(8),
                            child: Column(
                              children: [
                                Text("Name = ${snapshot.data[index].name}"),
                                Text("Id = ${snapshot.data[index].id}"),
                              ],
                            ),
                          );
                        });
                  } else if (snapshot.hasError) {
                    return Text("${snapshot.error}");
                  }
    
                  // By default, show a loading spinner.
                  return CircularProgressIndicator();
                },
              ),
    

    【讨论】:

    • 等待 coll.find().toList();那我应该怎么改呢,非常感谢你的努力
    • 是的,为此.... final list = await coll.find().toList();并在我在答案中使用 col1 的任何地方进一步使用 list 。如果我的回答有效,请接受我的回答并给予支持
    • for (var v in list) { User user = User( id: v.id, // error // name: v.name) // error 未定义 getter 'id'对于“地图”类型。尝试导入定义“id”的库,将名称更正为现有 getter 的名称,或定义名为“id”的 getter 或字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多