繁体   English   中英

Flutter/Firestore - 输入“列表”<dynamic> ' 不是类型 'Widget' 的子类型</dynamic>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM