如何在flutter中使List <RecordSnapshot>中的BuiltList <Post>

时间:2019-11-27 11:16:09

标签: flutter dart flutter-layout flutter-dependencies dart-pub

我正在尝试使用具有内置值的sembast,同时尝试使清单中的BuiltList变得卡住

  

未定义命名参数“ posts”。   尝试将名称更正为现有命名参数的名称,或定义名称为'posts'.dart(undefined_named_pa​​rameter)的命名参数。

还有

  

未为类“ Post”定义方法“ fromMap”。   尝试将名称更正为现有方法的名称,或定义一个名为“ fromMap”的方法。

Future<PostsList> getPostsFromDb() async {
    print('Loading from database');

    // post list
    var postsList;

    // fetching data
    final recordSnapshots = await _postsStore.find(
      await _db,
    );

    // Making a List<Post> out of List<RecordSnapshot>
    if (recordSnapshots.length > 0) {
      postsList = PostsList(
          posts: recordSnapshots.map((snapshot) {
        final post = Post.fromMap(snapshot.value);
        // An ID is a key of a record from the database.
        post.id = snapshot.key;
        return post;
      }).toList());
    }

    return postsList;
  }

PostList类

abstract class PostsList implements Built<PostsList, PostsListBuilder> {
  PostsList._();

  factory PostsList([updates(PostsListBuilder b)]) = _$PostsList;


  BuiltList<Post> get posts;

  String toJson() {
    return json.encode(serializers.serializeWith(PostsList.serializer, this));
  }

  static PostsList fromJson(String jsonString) {
    return serializers.deserializeWith(
        PostsList.serializer, json.decode(jsonString));
  }

  static Serializer<PostsList> get serializer => _$postsListSerializer;
}

卡住了请帮助

2 个答案:

答案 0 :(得分:0)

您的PostsList类实际上并不包含字段posts。这是一个吸气剂,因此无法设置其值,并且PostsList中没有接受posts参数的构造函数。因此,错误消息告诉您的恰恰是:没有为任何构造函数定义posts参数。

对于第二个问题,似乎您没有名为Post.fromMap(args)的工厂构造函数,或者没有向其传递正确的数据类型。

答案 1 :(得分:0)

谢谢@all,我已经解决了以下问题

final List<Post> postResponse = deserializeListOf<Post>(res).asList();

final Serializers serializers = _$serializers;
Serializers standardSerializers = (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

T deserialize<T>(dynamic value) =>
    standardSerializers.deserializeWith<T>(standardSerializers.serializerForType(T), value);

BuiltList<T> deserializeListOf<T>(dynamic value) =>
    BuiltList.from(value.map((value) => deserialize<T>(value)).toList(growable: false));

工作正常