如何制作BuiltList 不在List 颤动中

问题描述 投票:0回答:2

我正在尝试使用具有内置值的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;
}

卡住了请帮助

flutter dart flutter-layout flutter-dependencies dart-pub
2个回答
0
投票

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

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


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));

效果很好

© www.soinside.com 2019 - 2024. All rights reserved.