当我尝试从 firebase 获取用户名时,应用程序中的抽屉闪烁

Flicker drawer in app when I try to get user name from firebase

我正在构建我的第一个带有自定义抽屉的 Flutter 应用程序。它应该在抽屉的 header 中显示 "Welcome" + name_of_user。但是当我尝试从 firebase 检索用户数据时,它显示 red screen with errors for 1 second and then it behaves like normal。我该如何修复那个红屏?

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): ════════════════════════════════════════════════════════════════════════════════════════════════════

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

显示名称时出现空指针异常导致红屏

要么用空字符串初始化 _uname

  String _uname = '';

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

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