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>(

标签: none

添加新评论