尝试将 ExpansionPanelList/ExpansionPanel 与(Firebase)流一起使用时出现颤振错误

Posted

技术标签:

【中文标题】尝试将 ExpansionPanelList/ExpansionPanel 与(Firebase)流一起使用时出现颤振错误【英文标题】:Flutter error when trying to use ExpansionPanelList/ExpansionPanel with (Firebase) stream 【发布时间】:2020-07-02 08:56:34 【问题描述】:

我有以下代码sn-p:

  @override
  Widget build(BuildContext context) 
    return StreamBuilder(
      stream: Accounts.getAccounts(widget.firebaseUser.uid),
      builder: (BuildContext context, AsyncSnapshot snapshot) 
        return ExpansionPanelList(
          children: snapshot.data.documents
              .map((account) => new ExpansionPanel(
                  headerBuilder: (BuildContext context, bool isExpanded) 
                    return ListTile(
                      title: Text("Some title"),
                    );
                  ,
                  body: ListTile(
                    title: Text("Some text"),
                  )
              )).toList(),
          );
          
      );
      

这给出了错误: type 'List<dynamic>' is not a subtype of type 'List<ExpansionPanel>'

我在这里看到了解决方案:type 'List<dynamic>' is not a subtype of type 'List<Widget>'

但是当我这样做并在“地图”之后添加 &lt;Widget&gt; 时,我得到一个不同的错误:

type 'List&lt;dynamic&gt;' is not a subtype of type 'List&lt;ExpansionPanel&gt;'

不知道如何解决这个问题...

【问题讨论】:

【参考方案1】:

要将List&lt;dynamic&gt; 转换为特定类型的列表,您可以这样做:

List<ExpansionPanel>.from(...);

我不确定您的代码中的哪个变量是List&lt;dynamic&gt;,但是将其包装在上述语句中应该会将其转换为正确的类型(如果不是所有项目都是ExpansionPanel 实例,当然会失败) .

【讨论】:

【参考方案2】:

原来用.map&lt;ExpansionPanel&gt; 替换.map 在这里起到了作用。

【讨论】:

以上是关于尝试将 ExpansionPanelList/ExpansionPanel 与(Firebase)流一起使用时出现颤振错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试将多个 Uitextfields 添加为整数 [重复]

尝试从 UIViewController 将属性分配给 UIScrollView 类

尝试将指针与结构一起使用时出错

尝试将数据从子活动返回到 MainActivity 时获取 NullPointerException

尝试将 xml 导入到 android 时出现 OutOfMemoryException

尝试将数字写入二进制文件时引发异常