【问题标题】:How to create an empty typed list in dart如何在 dart 中创建一个空的类型列表
【发布时间】:2021-03-14 08:41:57
【问题描述】:

我正在尝试将此 dart 文件 here 转换为使用泛型,尝试在构造函数中初始化一个空列表时出现以下错误。

常量列表文字不能包含类型参数作为类型 参数,例如“T”。尝试将类型参数替换为 不一样的

在这种情况下如何创建一个空列表。下面的代码可以更详细地阐述我的问题

旧文件

enum PostStatus { initial, success, failure }

class PostState extends Equatable {
  const PostState({
    this.status = PostStatus.initial,
    this.posts = const <Post>[],
    this.hasReachedMax = false,
  });

  final PostStatus status;
  final List<Post> posts;
  final bool hasReachedMax;

  PostState copyWith({
    PostStatus status,
    List<Post> posts,
    bool hasReachedMax,
  }) {
    return PostState(
      status: status ?? this.status,
      posts: posts ?? this.posts,
      hasReachedMax: hasReachedMax ?? this.hasReachedMax,
    );
  }

  @override
  List<Object> get props => [status, posts, hasReachedMax];
}

新文件

class PagedState<T> extends Equatable {
  const PagedState({
    this.status = PagedStatus.initial,
    this.items = const <T>[], //ERROR HERE
    this.hasReachedMax = false,
  });

  final PagedStatus status;
  final List<T> items;
  final bool hasReachedMax;

  PagedState copyWith({
    PagedStatus status,
    List<T> items,
    bool hasReachedMax,
  }) {
    return PagedState(
      status: status ?? this.status,
      items: items ?? this.items,
      hasReachedMax: hasReachedMax ?? this.hasReachedMax,
    );
  }

  @override
  List<Object> get props => [status, items, hasReachedMax];
}

【问题讨论】:

    标签: dart


    【解决方案1】:

    正如错误所说,常量列表文字不能使用类型参数,因此您必须使用非const 文字:&lt;T&gt;[]

    但是,因为它是一个默认参数,并且默认参数必须是常量,所以它也不起作用。您要么需要:

    【讨论】:

    • 感谢您的回答。由于类支持不可变,您是否可以查看更新的完整代码。我怎样才能用这种初始化重构它
    • @Nux 我认为我建议的任何一种方法都应该适用于不可变类。
    • 或者使用const &lt;Never&gt;[]作为默认值。它是任何List&lt;T&gt; 类型的子类型,因为它是空的且不可变的,所以没有人会注意到它不是List&lt;T&gt;。 (好吧,除非他们对它执行.toList() 并尝试将值添加到结果中)。
    猜你喜欢
    • 2019-05-30
    • 2022-01-21
    • 2019-12-13
    • 1970-01-01
    • 2021-04-12
    • 2021-06-04
    • 2021-11-05
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多