【问题标题】:Cannot cast Snapshot Data as type Event无法将快照数据转换为事件类型
【发布时间】:2022-03-28 22:26:10
【问题描述】:

我正在 Flutter 中连接到我的实时数据库。我正在使用 StreamBuilder 构建从数据库上的 onValue 侦听器获取的结果。在链接here 的视频之后,在时间戳 33:07,它说将快照数据转换为事件。当我在我的应用程序中执行此操作时,我收到错误

名称“Event”不是类型,因此不能在“as”表达式中使用。

它提示导入的唯一库是 dart:html 库,这不是我想要的。我似乎无法在网上找到与此相关的任何其他问题。

这是我的代码:

StreamBuilder(
    stream: _database.child('searchTrends/google/').onValue,
    builder: (context, snapshot){

      final resList = <TrendCard>[];
      if(snapshot.hasData){
        final myResults = List<dynamic>.from(
            (snapshot.data! as Event).snapshot.value);

                // I then want to iterate through myResults.

      }else{
        return Center(child: Column(children: [CircularProgressIndicator()]));
      }
    }
),

【问题讨论】:

    标签: flutter firebase-realtime-database stream-builder


    【解决方案1】:

    如果您查看onValue stream 的当前文档,您会发现它公开的类型称为DatabaseEvent

    所以:

    final myResults = List<dynamic>.from(
        (snapshot.data! as DatabaseEvent).snapshot.value);
    

    如果您遇到这样的错误,我建议您始终检查实际的产品文档,因为 API 可能在编写本教程后发生了变化。

    【讨论】:

      【解决方案2】:

      不要忘记在最后添加为列表,像这样..

                        final myResults = List<dynamic>.from(
                            (snapshot.data! as DatabaseEvent).snapshot.value as List);
      

      我被同样的事情困住了,但最终解决了。托德在视频中使用了地图,所以在最后添加为地图。

      final myOrders = Map<String, dynamic>.from(
                            (snapshot.data! as DatabaseEvent).snapshot.value
                                as Map);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-02
        • 2015-08-29
        • 1970-01-01
        相关资源
        最近更新 更多