我之前问过这个问题,并从大约两周前开始尝试解决它。
我正在开发社交应用程序,当应用程序运行时,应该显示
HomeScreen
,但我得到的是空白屏幕。
这是屏幕:
class HomeScreen extends StatelessWidget {
static const route = 'HOME';
//final postRefreshKey = GlobalKey<RefreshIndicatorState>();
HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: Scaffold(
body: SafeArea(
child: NestedScrollView(
floatHeaderSlivers: true,
physics: BouncingScrollPhysics(),
headerSliverBuilder: (context, isScrolled) => [
SliverAppBar(
systemOverlayStyle: SystemUiOverlayStyle(
statusBarColor: Colors.white,
),
backgroundColor: Colors.white,
floating: true,
leadingWidth: 75,
leading: GestureDetector(
onTap: () {
Navigator.of(context).pushNamed(ProfileScreen.route);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: CircleAvatar(
backgroundImage: CurrentUser.user.image == null
? NetworkImage('temp image')
: NetworkImage(CurrentUser.user.image!),
),
),
),
title: Text('Zagel'),
actions: [
IconButton(
icon: Icon(
Icons.search,
),
onPressed: () {},
),
IconButton(
icon: Icon(
Icons.settings,
),
onPressed: () {},
),
],
elevation: 0,
scrolledUnderElevation: 0,
),
],
body: Column(
children: [
Container(
width: double.infinity,
height: 50,
decoration: BoxDecoration(
color: Theme.of(context).scaffoldBackgroundColor,
),
child: TabBar(
tabs: [
Tab(
text: 'Posts',
),
Tab(
text: 'Chats',
),
Tab(
text: 'Users',
),
],
),
),
Flexible(
child: TabBarView(
children: [
PostScreen(key: UniqueKey(),),
ChatsScreen(key: UniqueKey()),
ListView.builder(
key: UniqueKey(),
itemBuilder: (context, index) => Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
color: Colors.black,
height: 120,
),
),
itemCount: 60,
shrinkWrap: true,
physics: BouncingScrollPhysics(),
)
],
),
),
],
),
),
),
),
);
}
}
这是控制台上的输出:
D/ProfileInstaller( 9813): Installing profile for com.example.chat
I/FirebaseApp( 9813): Device unlocked: initializing all Firebase APIs for app [DEFAULT]
W/DynamiteModule( 9813): Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found.
I/DynamiteModule( 9813): Considering local module com.google.android.gms.providerinstaller.dynamite:0 and remote module com.google.android.gms.providerinstaller.dynamite:0
W/ProviderInstaller( 9813): Failed to load providerinstaller module: No acceptable module com.google.android.gms.providerinstaller.dynamite found. Local version is 0 and remote version is 0.
D/nativeloader( 9813): Configuring clns-5 for other apk /system/framework/org.apache.http.legacy.jar. target_sdk_version=34, uses_libraries=ALL, library_path=/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/lib/arm64:/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand:/data/user/0/com.google.android.gms
D/nativeloader( 9813): Extending system_exposed_libraries: libvraudio_client.qti.so:libbinauralrenderer_wrapper.qti.so:libhoaeffects.qti.so:libQOC.qti.so:libSloganJni.oplus.so:libsuperNight_mtk.oplus.so:libupdateprof.qti.so:libQOC.qti.so:libdiag_system.qti.so:libqape.qti.so:libqesdk_ndk_platform.qti.so:liblistenjni.qti.so
W/ziparchive( 9813): Unable to open '/apex/com.android.extservices/javalib/android.ext.adservices.dm': No such file or directory
W/ziparchive( 9813): Unable to open '/apex/com.android.extservices/javalib/android.ext.adservices.dm': No such file or directory
D/nativeloader( 9813): Configuring clns-6 for other apk /apex/com.android.extservices/javalib/android.ext.adservices.jar. target_sdk_version=34, uses_libraries=ALL, library_path=/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/lib/arm64:/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand:/data/user/0/com.google.android.gms
D/nativeloader( 9813): Extending system_exposed_libraries: libvraudio_client.qti.so:libbinauralrenderer_wrapper.qti.so:libhoaeffects.qti.so:libQOC.qti.so:libSloganJni.oplus.so:libsuperNight_mtk.oplus.so:libupdateprof.qti.so:libQOC.qti.so:libdiag_system.qti.so:libqape.qti.so:libqesdk_ndk_platform.qti.so:liblistenjni.qti.so
D/nativeloader( 9813): InitApexLibraries:
D/nativeloader( 9813): com_android_appsearch: libicing.so
D/nativeloader( 9813): com_android_art: libartservice.so
D/nativeloader( 9813): com_android_conscrypt: libjavacrypto.so
D/nativeloader( 9813): com_android_extservices: libtflite_support_classifiers_native.so
D/nativeloader( 9813): com_android_os_statsd: libstats_jni.so
D/nativeloader( 9813): com_android_tethering: libandroid_net_connectivity_com_android_net_module_util_jni.so:libcrypto.so:libframework-connectivity-jni.so:libframework-connectivity-tiramisu-jni.so:libmainlinecronet.114.0.5735.84.so:libservice-connectivity.so:libservice-thread-jni.so:libssl.so
D/nativeloader( 9813): Configuring clns-7 for other apk /system/framework/com.android.media.remotedisplay.jar. target_sdk_version=34, uses_libraries=ALL, library_path=/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/lib/arm64:/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand:/data/user/0/com.google.android.gms
D/nativeloader( 9813): Extending system_exposed_libraries: libvraudio_client.qti.so:libbinauralrenderer_wrapper.qti.so:libhoaeffects.qti.so:libQOC.qti.so:libSloganJni.oplus.so:libsuperNight_mtk.oplus.so:libupdateprof.qti.so:libQOC.qti.so:libdiag_system.qti.so:libqape.qti.so:libqesdk_ndk_platform.qti.so:liblistenjni.qti.so
D/nativeloader( 9813): Configuring clns-8 for other apk /system/framework/com.android.location.provider.jar. target_sdk_version=34, uses_libraries=ALL, library_path=/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/lib/arm64:/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand:/data/user/0/com.google.android.gms
D/nativeloader( 9813): Extending system_exposed_libraries: libvraudio_client.qti.so:libbinauralrenderer_wrapper.qti.so:libhoaeffects.qti.so:libQOC.qti.so:libSloganJni.oplus.so:libsuperNight_mtk.oplus.so:libupdateprof.qti.so:libQOC.qti.so:libdiag_system.qti.so:libqape.qti.so:libqesdk_ndk_platform.qti.so:liblistenjni.qti.so
D/nativeloader( 9813): Configuring clns-9 for other apk /data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/base.apk. target_sdk_version=34, uses_libraries=, library_path=/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/lib/arm64:/data/app/~~dZhK9M2-DGHa74skVj_LEQ==/com.google.android.gms-80d5rWtOrST573zkVHpHYQ==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand:/data/user/0/com.google.android.gms
V/NativeCrypto( 9813): Registering com/google/android/gms/org/conscrypt/NativeCrypto's 305 native methods...
W/om.example.cha( 9813): Accessing hidden method Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String; (unsupported, reflection, allowed)
I/ProviderInstaller( 9813): Installed default security provider GmsCore_OpenSSL
W/om.example.cha( 9813): Accessing hidden field Ljava/net/Socket;->impl:Ljava/net/SocketImpl; (unsupported, reflection, allowed)
W/om.example.cha( 9813): Accessing hidden method Ljava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V (unsupported, reflection, allowed)
I/om.example.cha( 9813): Background concurrent copying GC freed 370676(18MB) AllocSpace objects, 13(288KB) LOS objects, 49% free, 4483KB/8966KB, paused 407us,98us total 110.059ms
我已经搜索了很多有关黑屏的原因,但没有成功。
它在 Android 物理设备上运行。
您为主屏幕提供的代码似乎结构良好,但导致您看到白屏的原因可能有几个:
1。数据丢失或网络问题:
CurrentUser.user.image:如果 CurrentUser.user.image 始终为 null,并且您没有处理 NetworkImage 的 null 情况,则可能会引发错误并导致黑屏。考虑为 CircleAvatar 添加占位符图像或错误处理。 网络问题:如果“临时图像”需要获取图像,请确保您有稳定的互联网连接。失败的网络请求也可能导致黑屏。
2。调试和日志记录:
打印语句:在整个构建方法中添加打印语句,以查看代码是否正在执行。这可以帮助识别渲染可能停止的位置。 错误处理:使用 try-catch 块来处理网络调用或数据获取期间可能导致应用程序无提示崩溃的潜在异常。
3. BuildContext 问题:
onPressed 中的上下文:虽然这种情况不太可能发生,但请确保您在 onPressed 回调中使用正确的上下文进行导航。使用错误的上下文有时会导致意外的行为。
以下是一些故障排除建议:
检查控制台日志: 在控制台输出中查找可能表明黑屏原因的任何错误或警告。
检查小部件树:使用 Flutter DevTools 小部件检查器查看应用程序的渲染小部件树。这可以帮助识别丢失的小部件或意外的布局问题。
从简单开始:尝试暂时删除一些复杂的组件,例如NestedScrollView或TabBarView,看看屏幕是否使用基本的Scaffold结构进行渲染。这可以帮助找出问题所在。
通过检查网络问题、添加适当的错误处理和利用调试工具,您应该能够确定黑屏的根本原因并修复您的主屏幕。