firebase - 当我尝试从 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): ════════════════════════════════════════════════════════════════════════════════════════════════════
解决方案
在 initState 中,您正在调用异步函数 _getCurrentUser。因此,这个函数自然会在 initState 继续时异步执行,并且页面以 _uname 为 null 呈现。
由于显示名称时抛出空指针异常,因此显示红屏。
使用空字符串初始化 _uname
String _uname = '';
或在显示名称时使用 null 感知运算符
child: Text("Welcome " + _uname ?? '',
style: TextStyle(
color: Colors.white,
fontSize: 20.0,
fontWeight: FontWeight.w500))),
]));
推荐阅读
- react-native - React Native IAP - requestSubscription(item) 需要全额付款
- vb.net - 在多行文本框中具有选择或焦点的多个文本框?
- python - 找不到库 pyttsx3
- python - django.core.exceptions.ImproperlyConfigured:使用参数名称“order.id”,它不是有效的 Python 标识符
- java - ListView 未使用 AsyncTask 中的适配器更新
- arrays - ForEach (0..< 不从 0 开始
- django - 从一对多关系中获取特定的相关模型
- ios - Metal alphaBlendOperation .max 奇怪的行为
- docker - Traefik 将一个应用程序路由到端口 80,其他需要显式端口
- php - 如何在 php 中返回一个新的实例