发布测试
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:url_launcher/url_launcher.dart';
import '../controllers/userprofile_controller.dart';
import '../../../../utility/theme_controller.dart';
import '../../../../utility/custom_fonts.dart';
import '../../../../utility/screen_util_config.dart';
class UserprofileView extends GetView<UserprofileController> {
const UserprofileView({super.key});
@override
Widget build(BuildContext context) {
final themeController = Get.find<ThemeController>();
final customFonts = Get.find<CustomFonts>();
// 🔥 初始设置状态栏为透明(显示背景图)
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.transparent, // 🔥 初始透明
statusBarIconBrightness: Brightness.light, // 🔥 透明背景用浅色图标
statusBarBrightness: Brightness.dark,
));
// 🔥 关键:使用 ScrollController 和 ValueNotifier 来精确控制
final ScrollController scrollController = ScrollController();
final ValueNotifier<bool> isCollapsed = ValueNotifier<bool>(false);
// 🔥 监听滚动位置 - 动态切换状态栏颜色
scrollController.addListener(() {
final bool shouldCollapse = scrollController.hasClients &&
scrollController.offset > ScreenUtilConfig.setHeight(280);
if (isCollapsed.value != shouldCollapse) {
isCollapsed.value = shouldCollapse;
// 🔥 根据吸顶状态动态设置状态栏颜色
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: shouldCollapse
? themeController.backgroundColor // 🔥 吸顶时用主题色
: Colors.transparent, // 🔥 未吸顶时透明
statusBarIconBrightness: shouldCollapse
? (themeController.isDarkMode.value ? Brightness.light : Brightness.dark) // 🔥 主题色时根据主题调整
: Brightness.light, // 🔥 透明背景时用浅色图标
statusBarBrightness: shouldCollapse
? (themeController.isDarkMode.value ? Brightness.dark : Brightness.light)
: Brightness.dark,
));
}
});
// 🔥 动态 AnnotatedRegion - 根据状态切换
return ValueListenableBuilder<bool>(
valueListenable: isCollapsed,
builder: (context, collapsed, child) {
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle(
statusBarColor: collapsed
? themeController.backgroundColor // 🔥 吸顶时主题色
: Colors.transparent, // 🔥 未吸顶时透明
statusBarIconBrightness: collapsed
? (themeController.isDarkMode.value ? Brightness.light : Brightness.dark)
: Brightness.light, // 🔥 透明时用浅色图标
statusBarBrightness: collapsed
? (themeController.isDarkMode.value ? Brightness.dark : Brightness.light)
: Brightness.dark,
),
child: DefaultTabController(
length: 3,
child: Scaffold(
backgroundColor: themeController.backgroundColor,
body: Obx(() {
// 🔥 每次重建时也根据状态设置状态栏
WidgetsBinding.instance.addPostFrameCallback((_) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: collapsed
? themeController.backgroundColor
: Colors.transparent,
statusBarIconBrightness: collapsed
? (themeController.isDarkMode.value ? Brightness.light : Brightness.dark)
: Brightness.light,
statusBarBrightness: collapsed
? (themeController.isDarkMode.value ? Brightness.dark : Brightness.light)
: Brightness.dark,
));
});
if (controller.isLoading.value) {
return const Center(child: CircularProgressIndicator());
}
if (controller.hasError.value) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
controller.errorMessage.value,
style: customFonts.bodyMedium,
),
SizedBox(height: ScreenUtilConfig.setHeight(16)),
ElevatedButton(
onPressed: () => controller.refreshAllData(),
child: Text(
'重试',
style: customFonts.buttonTextStyle,
),
),
],
),
);
}
return CustomScrollView(
controller: scrollController,
slivers: [
ValueListenableBuilder<bool>(