簡體   English   中英

Flutter 雲Firestore StreamBuilder<documentsnapshot> 錯誤</documentsnapshot>

[英]Flutter cloud firestore StreamBuilder<DocumentSnapshot> error

更新我的 flutter 插件后,我不得不更新我的代碼,因為我收到類似“Firestore”已棄用且不應使用的錯誤。 Class Firestore 已棄用,請改用“FirebaseFirestore”。

我按照警告更新了我的代碼,但現在我的 streamBuilders 不工作我不知道為什么。

這是我的代碼

class PickupLayout extends StatelessWidget {


final Widget scaffold;
  final CallMethods callMethods = CallMethods();

  PickupLayout({
    @required this.scaffold,
  });

  @override
  Widget build(BuildContext context) {
    final UserProvider userProvider = Provider.of<UserProvider>(context);

return (userProvider != null && userProvider.getUser != null)
    ? StreamBuilder<DocumentSnapshot>(
        stream: callMethods.callStream(uid: userProvider.getUser.uid),
        builder: (context, snapshot) {
          if (snapshot.hasData && snapshot.data.data != null) {
            Call call = Call.fromMap(snapshot.data.data());

            if (!call.hasDialled) {
              return PickupScreen(call: call);
            }
          }
          return scaffold;
        },
      )
    : Scaffold(
        body: Center(
          child: CircularProgressIndicator(),
        ),
      );
  }
}

這是錯誤

════════ Exception caught by widgets library ═══════════════════════════════════
The following NoSuchMethodError was thrown building StreamBuilder<DocumentSnapshot>(dirty, state: _StreamBuilderBaseState<DocumentSnapshot, AsyncSnapshot<DocumentSnapshot>>#a2802):
The method '[]' was called on null.
Receiver: null
Tried calling: []("caller_id")
The relevant error-causing widget was
StreamBuilder<DocumentSnapshot>
package:vdb_tinus_app/…/pickup/pickup_layout.dart:22
When the exception was thrown, this was the stack
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1      new Call.fromMap
package:vdb_tinus_app/…/models/call.dart:37
#2      PickupLayout.build.<anonymous closure>
package:vdb_tinus_app/…/pickup/pickup_layout.dart:26
#3      StreamBuilder.build
package:flutter/…/widgets/async.dart:525
#4      _StreamBuilderBaseState.build

在更新我的雲if (snapshot.hasData && snapshot.data.data.= null) { Call call = Call.fromMap(snapshot.data;data);插入之前,根據日志顯示錯誤的行過去看起來像這樣if (snapshot.hasData && snapshot.data.data.= null) { Call call = Call.fromMap(snapshot.data;data); 更新后我不得不將其更改為此if (snapshot.hasData && snapshot.data.data.= null) { Call call = Call.fromMap(snapshot.data;data());

在這一行中, if (snapshot.hasData && snapshot.data.data != null) { ,您正在檢查DocumentSnapshot.data是否為 null。因為它是 function(因此,一個對象),您的比較永遠不會評估為false

在下一行snapshot.data.data()中,您正在調用上面的 function,其返回值很可能是null

在這部分;

          if (snapshot.hasData && snapshot.data.data != null) {
        Call call = Call.fromMap(snapshot.data.data());

        if (!call.hasDialled) {
          return PickupScreen(call: call);
        }
      }

你應該像那樣使用這部分;

if (snapshot.hasData && snapshot.data.data() != null) {

除了這個項目,如果你是 flutter 的新手,你不應該嘗試制作視頻通話應用程序。我知道你從視頻中獲取了這段代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM