gpt4 book ai didi

dart - Flutter:类型 'List' 不是类型 'List' 的子类型

转载 作者:IT王子 更新时间:2023-10-29 07:21:12 26 4
gpt4 key购买 nike

我正在使用 Flutter 开发一个简单的待办事项应用。

该应用有多个 View 和表 (SQLite)。

  1. 待办事项(StatelessWidget)
  2. 标签(StatefulWidget)

在 Todo ui 的情况下,它工作正常,但 Tag ui 不起作用。

第一个代码是 Todo ui。 (工作正常)。

class TodosPage extends StatelessWidget {

final TodoRepository _todoRepository;
final TodosBloc bloc;

TodosPage(this._todoRepository) : this.bloc = TodosBloc(_todoRepository);

@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: StreamBuilder<List<Todo>>(
stream: bloc.todos,
builder: (context, snapshot) {
if (snapshot.data == null) {
return Text("Empty");
}

return ListView(
children: snapshot.data.map(_buildItem).toList(),
);
}),
),
);
}

Widget _buildItem(Todo todo) => Text(todo.name);

这里是 Tag ui(它不起作用)。

class TagsPage extends StatefulWidget {
final TagRepository _tagRepository;

TagsPage(this._tagRepository);

@override
State<StatefulWidget> createState() => _TagsState(_tagRepository);
}

class _TagsState extends State<TagsPage> {
final TagRepository _tagRepository;
final TagsBloc bloc;

_TagsState(this._tagRepository) : this.bloc = TagsBloc(_tagRepository);

@override
Widget build(BuildContext context) => Scaffold(
body: Center(
child: StreamBuilder<List<Tag>>(
stream: bloc.tags,
builder: (context, snapshot) {
if (snapshot.data == null || snapshot.data.isEmpty) {
print("[TagsPage][JOS] build - snapshot.data is null");
} else {
return ListView(
children: snapshot.data.map(_buildTagItem).toList(),
);
}
},
),
),
);

_buildTagItem(Tag tag) => Text(tag.name);
}

TagBloc 在这里:

class TagsBloc {
final TagRepository _tagRepository;
final _getTagsSubject = PublishSubject<List<Tag>>();

Stream<List<Tag>> get tags => _getTagsSubject.stream;

TagsBloc(this._tagRepository) {
_getTags();
}

Future<Null> _getTags() async {
await _tagRepository.getAll().then((list) {
_getTagsSubject.add(list);
});
}
}

当我运行时,标签 ui 显示以下错误日志:

04-07 00:13:45.698 25181-25195/com.youknow.jos I/flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
04-07 00:13:45.708 25181-25195/com.youknow.jos I/flutter: The following assertion was thrown building StreamBuilder<List<Tag>>(dirty, dependencies:
04-07 00:13:45.708 25181-25195/com.youknow.jos I/flutter: [_LocalizationsScope-[GlobalKey#49b9d], _InheritedTheme], state: _StreamBuilderBaseState<List<Tag>,
04-07 00:13:45.708 25181-25195/com.youknow.jos I/flutter: AsyncSnapshot<List<Tag>>>#65ac3):
04-07 00:13:45.708 25181-25195/com.youknow.jos I/flutter: type 'List<dynamic>' is not a subtype of type 'List<Widget>'
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flutter: Either the assertion indicates an error in the framework itself, or we should provide substantially
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flutter: more information in this error message to help you determine and fix the underlying cause.
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flutter: In either case, please report this assertion by filing a bug on GitHub:
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flutter: https://github.com/flutter/flutter/issues/new?template=BUG.md
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flutter: When the exception was thrown, this was the stack:
04-07 00:13:45.724 25181-25195/com.youknow.jos I/flutter: #0 _TagsState.build.<anonymous closure> (package:jos/pages/tags.dart:49:62)

Todo 和Tag 没有区别。我认为唯一的区别是StatefulWidget/StatelessWidget。我不知道如何解决这个问题。

最佳答案

您还没有在 _buildTagItem 上声明返回类型.改变这个:

  _buildTagItem(Tag tag) => Text(tag.name);

为此:

  Widget _buildTagItem(Tag tag) => Text(tag.name);

因此,您的 map(...).toList()返回 List<dynamic>而不是 List<Widget> - 因此错误。

关于dart - Flutter:类型 'List<dynamic>' 不是类型 'List<Widget>' 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55550555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com