![](/img/trans.png)
[英]type 'List<dynamic>' is not a subtype of type 'List<Widget>'
[英]Flutter/Firestore - type 'List<dynamic>' is not a subtype of type 'Widget'
我正在尝试使用 firestore 作为数据源在垂直列表视图中创建水平列表视图。 我已经创建了一个垂直列表视图,现在需要创建水平列表视图。 这是我的数据存储方式:
这是我的代码:
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PreferredSize(
preferredSize: const Size.fromHeight(80),
child: MainAppBar(
text: 'Pick an occasion...',
),
),
body: StreamBuilder(
stream: Firestore.instance
.collection('events')
.orderBy('order')
.snapshots(),
builder: buildProductList,
),
);
}
}
Widget buildProductList(
BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot user = snapshot.data.documents[index];
print(user.documentID);
print(user.data['Occasions']);
return Column(children: [
ListTile(
leading: Image(
image: FirebaseImage(user.data['img_url']),
height: 25,
width: 25,
),
// Access the fields as defined in FireStore
title: Transform(
transform: Matrix4.translationValues(-20, 0.0, 0.0),
child: Text(user.documentID))),
ListView(
children: [
user.data['Occasions']
],
scrollDirection: Axis.horizontal,
)
]);
},
);
} else if (snapshot.connectionState == ConnectionState.done &&
!snapshot.hasData) {
// Handle no data
return Center(
child: Text("No products found."),
);
} else {
// Still loading
return CircularProgressIndicator();
}
}
这是我收到的错误消息:
I/flutter ( 9398): Birthday
I/flutter ( 9398): [18th, 21st]
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _TypeError was thrown building:
type 'List<dynamic>' is not a subtype of type 'Widget'
When the exception was thrown, this was the stack:
#0 buildProductList.<anonymous closure> (package:easy_tiger/screens/homepage.dart:53:24)
#1 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:448:22)
#2 SliverMultiBoxAdaptorElement._build.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1136:67)
#3 _HashMap.putIfAbsent (dart:collection-patch/collection_patch.dart:140:29)
#4 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1136:26)
#5 SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1149:55)
#6 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2620:19)
#7 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1142:11)
#8 RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:356:23)
#9 RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1868:58)
#10 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:920:15)
#11 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1868:13)
#12 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:345:5)
#13 RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:429:5)
#14 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:81:12)
#15 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#16 RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:137:11)
#17 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:377:11)
#18 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#19 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:471:13)
#20 RenderShrinkWrappingViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1810:12)
#21 RenderShrinkWrappingViewport.performLayout (package:flutter/src/rendering/viewport.dart:1768:20)
#22 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#23 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#24 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#25 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#26 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#27 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#28 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#29 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#30 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#31 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#32 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#33 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#34 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#35 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#36 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#37 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#38 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#39 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#40 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#41 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:173:11)
#42 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:495:7)
#43 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:242:7)
#44 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:401:14)
#45 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1632:7)
#46 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:889:18)
#47 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:404:19)
#48 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:867:13)
#49 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
#50 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
#51 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1056:9)
#52 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:972:5)
#56 _invoke (dart:ui/hooks.dart:253:10)
#57 _drawFrame (dart:ui/hooks.dart:211:3)
(elided 3 frames from dart:async)
════════════════════════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following _TypeError was thrown building:
type 'List<dynamic>' is not a subtype of type 'Widget'
When the exception was thrown, this was the stack:
#0 buildProductList.<anonymous closure> (package:easy_tiger/screens/homepage.dart:53:24)
#1 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:448:22)
#2 SliverMultiBoxAdaptorElement._build.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1136:67)
#3 _HashMap.putIfAbsent (dart:collection-patch/collection_patch.dart:140:29)
#4 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1136:26)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
有人可以帮我解决这个错误吗? 这是所需的 output:
谢谢
在 ListView 中,您必须将 String 列表设置为 Widget 列表。 这就是您收到此错误的原因。 而不是使用
ListView(
children: [
user.data['Occasions']
],
scrollDirection: Axis.horizontal,
)
采用
ListView(
children: [
for(int i = 0; i< user.data['Occasions'].length; i++) Text(user.data['Occasions'][i]),
],
scrollDirection: Axis.horizontal,
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.