Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 使用CloudFirestore的Flotter StreamProvider导致恢复时出错_Flutter - Fatal编程技术网

Flutter 使用CloudFirestore的Flotter StreamProvider导致恢复时出错

Flutter 使用CloudFirestore的Flotter StreamProvider导致恢复时出错,flutter,Flutter,有一个奇怪的问题,似乎无法找出我是否有什么设置错误(新的提供商和流)或如果它是一个错误。除了在Android上用“后退”按钮退出并重新启动应用程序后,应用程序恢复运行外,一切似乎都正常。复制步骤: 发布应用程序 点击后退按钮关闭应用程序(不仅仅是最小化) 重新启动应用程序 我得到以下错误: D/AndroidRuntime( 3566): Shutting down VM E/AndroidRuntime( 3566): FATAL EXCEPTION: main E/AndroidRuntim

有一个奇怪的问题,似乎无法找出我是否有什么设置错误(新的提供商和流)或如果它是一个错误。除了在Android上用“后退”按钮退出并重新启动应用程序后,应用程序恢复运行外,一切似乎都正常。复制步骤:

  • 发布应用程序
  • 点击后退按钮关闭应用程序(不仅仅是最小化)
  • 重新启动应用程序
  • 我得到以下错误:

    D/AndroidRuntime( 3566): Shutting down VM
    E/AndroidRuntime( 3566): FATAL EXCEPTION: main
    E/AndroidRuntime( 3566): Process: com.crimsonowl.scryer, PID: 3566
    E/AndroidRuntime( 3566): java.lang.NullPointerException: Attempt to invoke virtual method 'void io.flutter.plugin.common.MethodChannel.invokeMethod(java.lang.String, java.lang.Object)' on a null object reference
    E/AndroidRuntime( 3566):    at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin$DocumentObserver.onEvent(CloudFirestorePlugin.java:429)
    E/AndroidRuntime( 3566):    at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin$DocumentObserver.onEvent(CloudFirestorePlugin.java:402)
    E/AndroidRuntime( 3566):    at com.google.firebase.firestore.DocumentReference.lambda$addSnapshotListenerInternal$2(com.google.firebase:firebase-firestore@@21.3.0:504)
    E/AndroidRuntime( 3566):    at com.google.firebase.firestore.DocumentReference$$Lambda$3.onEvent(Unknown Source:6)
    E/AndroidRuntime( 3566):    at com.google.firebase.firestore.core.AsyncEventListener.lambda$onEvent$0(com.google.firebase:firebase-firestore@@21.3.0:42)
    E/AndroidRuntime( 3566):    at com.google.firebase.firestore.core.AsyncEventListener$$Lambda$1.run(Unknown Source:6)
    E/AndroidRuntime( 3566):    at android.os.Handler.handleCallback(Handler.java:883)
    E/AndroidRuntime( 3566):    at android.os.Handler.dispatchMessage(Handler.java:100)
    E/AndroidRuntime( 3566):    at com.google.android.gms.internal.tasks.zzb.dispatchMessage(com.google.android.gms:play-services-tasks@@17.0.2:6)
    E/AndroidRuntime( 3566):    at android.os.Looper.loop(Looper.java:214)
    E/AndroidRuntime( 3566):    at android.app.ActivityThread.main(ActivityThread.java:7356)
    E/AndroidRuntime( 3566):    at java.lang.reflect.Method.invoke(Native Method)
    E/AndroidRuntime( 3566):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    E/AndroidRuntime( 3566):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
    I/Process ( 3566): Sending signal. PID: 3566 SIG: 9
    
    经过大量调试并试图找出原因。我把问题缩小到StreamProvider和我的用户数据。在我的主屏幕中,我加载了一个用户数据流,其中包括:

    return FutureProvider.value(
      value: Provider.of<IAPProvider>(context).initialize(),
      child: StreamProvider<User>.value(
        value: DatabaseProvider().streamUser(user.uid),
        child: MainScreen(),
      ),
    );
    

    我用同样的复制步骤得到同样的崩溃。本期中也提到了这一点,但没有得到解决。我临时解决了这个问题,强制将pubspec.yaml文件中的firestore包降级到这个“cloud_firestore:'0.13.4+2'
    Stream<User> streamUser(String id) {
      return Firestore.instance
          .collection(USER_COLLECTION)
          .document(id)
          .snapshots()
          .map((snap) => User.fromFirestore(snap));
    }
    
    Firestore.instance.collection(USER_COLLECTION).document(user.uid).updateData({'last_login': FieldValue.serverTimestamp()});