首页 > 解决方案 > 当我尝试从 Firebase 获取用户名时,应用程序中的闪烁抽屉

问题描述

我正在使用自定义抽屉构建我的第一个 Flutter 应用程序。它应该在抽屉的标题中显示“欢迎”+ name_of_user。但是当我尝试从 firebase 检索用户数据时,它会显示红屏并显示错误1 ​​秒钟,然后它的行为就像正常一样。怎么解决那个红屏?

FirebaseUser mCurrentUser;
  String _uname;
  FirebaseAuth _auth;
  DocumentReference ref;
  @override
  void initState() {
    super.initState();
    _auth = FirebaseAuth.instance;
    _getCurrentUser();

  }
  _getCurrentUser () async {
    mCurrentUser = await _auth.currentUser();
    DocumentSnapshot item = await Firestore.instance.collection("users").document(mCurrentUser.uid).get(); //If //I delete this line everything works fine but I don't have user name.
    _uname = item['fname'];
    setState(() {
    });
  }

然后我这样显示名字

 child: Text("Welcome " + _uname,
                  style: TextStyle(
                      color: Colors.white,
                      fontSize: 20.0,
                      fontWeight: FontWeight.w500))),
        ]));

控制台日志

Launching lib\main.dart on Android SDK built for x86 in debug mode...
Initializing gradle...
Resolving dependencies...
Running Gradle task 'assembleDebug'...
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...
Syncing files to device Android SDK built for x86...
D/EGL_emulation(22382): eglMakeCurrent: 0xd7f1a7e0: ver 3 1 (tinfo 0xd7f0f900)
D/eglCodecCommon(22382): setVertexArrayObject: set vao to 0 (0) 1 0
W/DynamiteModule(22382): Local module descriptor class for providerinstaller not found.
W/com.dsc.viu_ap(22382): Unsupported class loader
I/DynamiteModule(22382): Considering local module com.google.android.gms.flags:3 and remote module com.google.android.gms.flags:3
I/DynamiteModule(22382): Selected local version of com.google.android.gms.flags
I/DynamiteModule(22382): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(22382): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
D/ApplicationLoaders(22382): Returning zygote-cached class loader: /system/framework/android.hidl.base-V1.0-java.jar
D/ApplicationLoaders(22382): Returning zygote-cached class loader: /system/framework/android.hidl.manager-V1.0-java.jar
D/ApplicationLoaders(22382): Returning zygote-cached class loader: /system/framework/android.hidl.base-V1.0-java.jar
I/com.dsc.viu_ap(22382): The ClassLoaderContext is a special shared library.
W/BiChannelGoogleApi(22382): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzak@a5e5857
I/com.dsc.viu_ap(22382): The ClassLoaderContext is a special shared library.
I/com.dsc.viu_ap(22382): The ClassLoaderContext is a special shared library.
I/com.dsc.viu_ap(22382): NativeAlloc concurrent copying GC freed 16121(979KB) AllocSpace objects, 13(376KB) LOS objects, 49% free, 1791KB/3583KB, paused 22.289ms total 224.233ms
I/com.dsc.viu_ap(22382): The ClassLoaderContext is a special shared library.
W/com.dsc.viu_ap(22382): Accessing hidden field Ldalvik/system/BaseDexClassLoader;->pathList:Ldalvik/system/DexPathList; (greylist, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden field Ldalvik/system/DexPathList;->nativeLibraryDirectories:Ljava/util/List; (greylist, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden field Ldalvik/system/DexPathList;->systemNativeLibraryDirectories:Ljava/util/List; (greylist, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden field Ldalvik/system/DexPathList;->nativeLibraryPathElements:[Ldalvik/system/DexPathList$NativeLibraryElement; (greylist, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Ldalvik/system/DexPathList;->makePathElements(Ljava/util/List;)[Ldalvik/system/DexPathList$NativeLibraryElement; (greylist, reflection, allowed)
V/NativeCrypto(22382): Registering com/google/android/gms/org/conscrypt/NativeCrypto's 284 native methods...
W/com.dsc.viu_ap(22382): Accessing hidden method Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String; (greylist, reflection, allowed)
D/NetworkSecurityConfig(22382): No Network Security Config specified, using platform default
I/ProviderInstaller(22382): Installed default security provider GmsCore_OpenSSL
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->arrayBaseOffset(Ljava/lang/Class;)I (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->copyMemory(JJJ)V (greylist, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->getByte(J)B (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->getByte(Ljava/lang/Object;J)B (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->getLong(J)J (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->putByte(JB)V (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->putByte(Ljava/lang/Object;JB)V (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden field Ljava/nio/Buffer;->address:J (greylist, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden field Ljava/net/Socket;->impl:Ljava/net/SocketImpl; (greylist, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden field Ljava/io/FileDescriptor;->descriptor:I (greylist, JNI, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Ljava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V (greylist, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/security/x509/AlgorithmId;->get(Ljava/lang/String;)Lsun/security/x509/AlgorithmId; (greylist, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Lsun/security/x509/AlgorithmId;->getName()Ljava/lang/String; (greylist,core-platform-api, reflection, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Ldalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy; (greylist,core-platform-api, linking, allowed)
W/com.dsc.viu_ap(22382): Accessing hidden method Ldalvik/system/BlockGuard$Policy;->onNetwork()V (greylist, linking, allowed)
W/BiChannelGoogleApi(22382): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzak@a5e5857
D/FirebaseAuth(22382): Notifying id token listeners about user ( UhkwQ6lvz3ZwYoBdLH6zod0Li353 ).
W/Firestore(22382): (19.0.0) [FirestoreCallCredentials]: Failed to get token: com.google.firebase.firestore.FirebaseFirestoreException: getToken aborted due to token change.
I/flutter (22382): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (22382): The following ArgumentError was thrown building AppDrawer(dirty, state: AppDrawerState#ebffb):
I/flutter (22382): Invalid argument(s)
I/flutter (22382): 
I/flutter (22382): When the exception was thrown, this was the stack:
I/flutter (22382): #0      _StringBase.+ (dart:core-patch/string_patch.dart:260:57)
I/flutter (22382): #1      AppDrawerState._createHeader (package:viu_app/widget/drawer.dart:110:38)
I/flutter (22382): #2      AppDrawerState.build (package:viu_app/widget/drawer.dart:41:11)
I/flutter (22382): #3      StatefulElement.build (package:flutter/src/widgets/framework.dart:4012:27)
I/flutter (22382): #4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3924:15)
I/flutter (22382): #5      Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #6      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3907:5)
I/flutter (22382): #7      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4053:11)
I/flutter (22382): #8      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3902:5)
I/flutter (22382): #9      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #10     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #11     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #12     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #13     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3907:5)
I/flutter (22382): #14     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3902:5)
I/flutter (22382): #15     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #17     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5092:14)
I/flutter (22382): #18     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #19     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #20     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #21     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #22     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3907:5)
I/flutter (22382): #23     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4053:11)
I/flutter (22382): #24     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3902:5)
I/flutter (22382): #25     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #26     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #27     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5092:14)
I/flutter (22382): #28     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #29     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #30     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5092:14)
I/flutter (22382): #31     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #32     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #33     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5092:14)
I/flutter (22382): #34     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #35     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5198:32)
I/flutter (22382): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #38     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5092:14)
I/flutter (22382): #39     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
I/flutter (22382): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #41     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5099:14)
I/flutter (22382): #42     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #44     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #45     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
I/flutter (22382): #46     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #47     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #48     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #49     StatelessElement.update (package:flutter/src/widgets/framework.dart:3981:5)
I/flutter (22382): #50     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #51     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3077:38)
I/flutter (22382): #52     Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
I/flutter (22382): #53     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #54     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #55     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
I/flutter (22382): #56     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #57     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #58     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #59     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
I/flutter (22382): #60     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #61     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #62     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #63     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
I/flutter (22382): #64     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #65     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #66     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #67     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
I/flutter (22382): #68     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #69     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4817:32)
I/flutter (22382): #70     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5208:17)
I/flutter (22382): #71     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #72     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #73     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #74     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
I/flutter (22382): #75     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #76     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #77     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #78     ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
I/flutter (22382): #79     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #80     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #81     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #82     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
I/flutter (22382): #83     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #84     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5099:14)
I/flutter (22382): #85     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #86     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #87     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #88     StatelessElement.update (package:flutter/src/widgets/framework.dart:3981:5)
I/flutter (22382): #89     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #90     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5099:14)
I/flutter (22382): #91     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #92     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #93     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #94     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
I/flutter (22382): #95     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #96     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #97     Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #98     StatefulElement.update (package:flutter/src/widgets/framework.dart:4085:5)
I/flutter (22382): #99     Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #100    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #101    Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #102    ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
I/flutter (22382): #103    Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #104    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #105    Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #106    ProxyElement.update (package:flutter/src/widgets/framework.dart:4219:5)
I/flutter (22382): #107    Element.updateChild (package:flutter/src/widgets/framework.dart:2876:15)
I/flutter (22382): #108    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3935:16)
I/flutter (22382): #109    Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter (22382): #110    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2340:33)
I/flutter (22382): #111    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:700:20)
I/flutter (22382): #112    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:285:5)
I/flutter (22382): #113    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1016:15)
I/flutter (22382): #114    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:958:9)
I/flutter (22382): #115    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:874:5)
I/flutter (22382): #119    _invoke (dart:ui/hooks.dart:236:10)
I/flutter (22382): #120    _drawFrame (dart:ui/hooks.dart:194:3)
I/flutter (22382): (elided 3 frames from package dart:async)
I/flutter (22382): ════════════════════════════════════════════════════════════════════════════════════════════════════

标签: firebasefluttergoogle-cloud-firestorefirebase-authenticationflicker

解决方案


在 initState 中,您正在调用异步函数 _getCurrentUser。因此,这个函数自然会在 initState 继续时异步执行,并且页面以 _uname 为 null 呈现。

由于显示名称时抛出空指针异常,因此显示红屏。

使用空字符串初始化 _uname

  String _uname = '';

或在显示名称时使用 null 感知运算符

child: Text("Welcome " + _uname ?? '',
                  style: TextStyle(
                      color: Colors.white,
                      fontSize: 20.0,
                      fontWeight: FontWeight.w500))),
        ]));

推荐阅读