Dart 颤振:x27型;列表<;动态>';不是类型为';列表<;Widget>';
我正在使用flatter开发一个简单的todo应用程序 该应用程序有多个视图和表(SQLite)Dart 颤振:x27型;列表<;动态>';不是类型为';列表<;Widget>';,dart,flutter,Dart,Flutter,我正在使用flatter开发一个简单的todo应用程序 该应用程序有多个视图和表(SQLite) Todo(无状态小部件) 标记(StatefulWidget) 对于Todo ui,它可以正常工作,但标记ui不工作 第一个代码是TODOUI。(很好) 类到媒体扩展了无状态小部件{ 最终托托存款_托托存款; 最终的Todos集团; TodosPage(this.\u todoRepository):this.bloc=todosploc(\u todoRepository); @凌驾 小部件构建(
类到媒体扩展了无状态小部件{
最终托托存款_托托存款;
最终的Todos集团;
TodosPage(this.\u todoRepository):this.bloc=todosploc(\u todoRepository);
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:StreamBuilder(
流:bloc.todos,
生成器:(上下文,快照){
如果(snapshot.data==null){
返回文本(“空”);
}
返回列表视图(
子项:snapshot.data.map(_buildItem).toList(),
);
}),
),
);
}
小部件buildItem(Todo Todo)=>Text(Todo.name);
这里是标签ui(它不工作)
class TagsPage扩展StatefulWidget{
最终标记存储库_标记存储库;
TagsPage(此._tagRepository);
@凌驾
状态createState()=>\u标记状态(\u标记存储库);
}
类_标记状态扩展状态{
最终标记存储库_标记存储库;
最终标记块;
_TagsState(this.\u tagRepository):this.bloc=TagsBloc(\u tagRepository);
@凌驾
小部件构建(构建上下文)=>Scaffold(
正文:中(
孩子:StreamBuilder(
流:bloc.tags,
生成器:(上下文,快照){
if(snapshot.data==null | | snapshot.data.isEmpty){
打印(“[TagsPage][JOS]build-snapshot.data为空”);
}否则{
返回列表视图(
子项:snapshot.data.map(_buildTagItem).toList(),
);
}
},
),
),
);
_buildTagItem(Tag标签)=>文本(Tag.name);
}
这里的标语是:
class TagsBloc{
最终标记存储库_标记存储库;
最终_gettagssobject=PublishSubject();
Stream get tags=>\u gettagssobject.Stream;
TagsBloc(此.\u tagRepository){
_getTags();
}
Future\u getTags()异步{
等待_tagRepository.getAll()。然后((列表){
_gettagssobject.add(列表);
});
}
}
运行时,标记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)
04-07 00:13:45.698 25181-25195/com.youknow.jos I/flatter:══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════
04-07 00:13:45.708 25181-25195/com.youknow.jos I/flatter:以下断言被抛出building StreamBuilder(脏,依赖项:
04-07 00:13:45.708 25181-25195/com.youknow.jos I/flatter:[本地化范围-[环球银行(GlobalKey)49b9d],[你继承的主题],[你继承的主题]状态:[你的StreamBuilderBaseState 65ac3]:
04-07 00:13:45.708 25181-25195/com.youknow.jos I/flatter:类型“列表”不是类型“列表”的子类型
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flatter:要么断言表明框架本身存在错误,要么我们应该提供
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flatter:此错误消息中的更多信息可帮助您确定并修复根本原因。
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flatter:在任何一种情况下,请通过在GitHub上提交bug来报告此断言:
04-07 00:13:45.715 25181-25195/com.youknow.jos I/颤振:https://github.com/flutter/flutter/issues/new?template=BUG.md
04-07 00:13:45.715 25181-25195/com.youknow.jos I/flatter:抛出异常时,这是堆栈:
04-07 00:13:45.724 25181-25195/com.youknow.jos I/flatter:#0"TagsState.build.(软件包:jos/pages/tags.dart:49:62)
Todo和Tag没有区别。
我认为唯一的区别是StatefulWidget/无状态widget。
我不知道如何解决此问题。您尚未在
\u buildTagItem
上声明返回类型。请更改此项:
_buildTagItem(Tag tag) => Text(tag.name);
为此:
Widget _buildTagItem(Tag tag) => Text(tag.name);
因此,您的
map(…).toList()
返回List
,而不是List
——这就是错误所在。@yoonhok总是试图坚持使用数据类型(静态类型语言的强大功能),这样您就知道编译时会发生什么。我认为您遇到了一个很好的例子。