diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7665c8b..bdb3dde 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ diff --git a/assets/icon/icon_lockGroup_item.png b/assets/icon/icon_lockGroup_item.png new file mode 100644 index 0000000..68fa570 Binary files /dev/null and b/assets/icon/icon_lockGroup_item.png differ diff --git a/assets/icon/lockType_doorLock.png b/assets/icon/lockType_doorLock.png new file mode 100644 index 0000000..46a2710 Binary files /dev/null and b/assets/icon/lockType_doorLock.png differ diff --git a/assets/icon/lockType_gatewayLock.png b/assets/icon/lockType_gatewayLock.png new file mode 100644 index 0000000..f14724c Binary files /dev/null and b/assets/icon/lockType_gatewayLock.png differ diff --git a/lib/common/constant/app_images.dart b/lib/common/constant/app_images.dart index 6bca120..ce9f9d2 100644 --- a/lib/common/constant/app_images.dart +++ b/lib/common/constant/app_images.dart @@ -54,7 +54,8 @@ class AppImages{ static const String iconTableMenu = 'assets/icon/icon_table_menu.png'; static const String iconVip = 'assets/icon/icon_vip.png'; static const String defaultAvatar = 'assets/images/default_avatar.png'; - + static const String iconLockGroupItem = 'assets/icon/icon_lockGroup_item.png'; + static const String iconLockTypeDoorLock = 'assets/icon/lockType_doorLock.png'; // 底部导航栏图标 static const String iconHome = 'assets/icon/bar/home.png'; static const String iconHomeSelected = 'assets/icon/bar/home_selected.png'; @@ -62,4 +63,5 @@ class AppImages{ static const String iconNotificationSelected = 'assets/icon/bar/notification_selected.png'; static const String iconMine = 'assets/icon/bar/mine.png'; static const String iconMineSelected = 'assets/icon/bar/mine_selected.png'; + } \ No newline at end of file diff --git a/lib/common/constant/app_support_device_type.dart b/lib/common/constant/app_support_device_type.dart new file mode 100644 index 0000000..7f127e1 --- /dev/null +++ b/lib/common/constant/app_support_device_type.dart @@ -0,0 +1,45 @@ +import 'package:starwork_flutter/common/constant/app_images.dart'; + +class AppSupportDeviceType { + static const all = AppSupportDeviceType('0', '所有设备'); + static const lock = AppSupportDeviceType('1', '锁', iconImagePath: AppImages.iconLockTypeDoorLock); + static const gateway = AppSupportDeviceType('2', '网关'); + static const attendanceMachine = AppSupportDeviceType('3', '考勤机'); + + // 获取所有类型 + static List get allTypes => [ + all, + lock, + gateway, + attendanceMachine, + ]; + + final String value; + final String label; + final String? iconImagePath; + + const AppSupportDeviceType(this.value, this.label, {this.iconImagePath}); + + // 支持通过字符串值查找枚举实例 + static AppSupportDeviceType? fromValue(String? value) { + return { + '0': all, + '1': lock, + '2': gateway, + '3': attendanceMachine, + }[value]; + } + + // 支持 toString() 直接输出 value + @override + String toString() => value; + + // 可选:支持 == 比较 + @override + bool operator ==(Object other) => + identical(this, other) || + other is AppSupportDeviceType && runtimeType == other.runtimeType && value == other.value; + + @override + int get hashCode => value.hashCode; +} diff --git a/lib/common/constant/device_type.dart b/lib/common/constant/device_type.dart deleted file mode 100644 index 2f0146b..0000000 --- a/lib/common/constant/device_type.dart +++ /dev/null @@ -1,35 +0,0 @@ -class DeviceType { - static const all = DeviceType('0', '所有'); - static const lock = DeviceType('1', '锁'); - static const gateway = DeviceType('2', '网关'); - static const attendanceMachine = DeviceType('3', '考勤机'); - final String value; - final String label; - - const DeviceType(this.value, this.label); - - // 支持通过字符串值查找枚举实例 - static DeviceType? fromValue(String? value) { - return { - '0': all, - '1': lock, - '2': gateway, - '3': attendanceMachine, - }[value]; - } - - // 支持 toString() 直接输出 value - @override - String toString() => value; - - // 可选:支持 == 比较 - @override - bool operator ==(Object other) => - identical(this, other) || - other is DeviceType && - runtimeType == other.runtimeType && - value == other.value; - - @override - int get hashCode => value.hashCode; -} diff --git a/lib/common/widgets/custom_cell_widget.dart b/lib/common/widgets/custom_cell_widget.dart index dbe41d4..9a1111e 100644 --- a/lib/common/widgets/custom_cell_widget.dart +++ b/lib/common/widgets/custom_cell_widget.dart @@ -6,11 +6,13 @@ class CustomCellWidget extends StatelessWidget { const CustomCellWidget({ super.key, required this.leftText, + this.leftIcon, this.rightWidget, this.onTap, }); final String leftText; + final Icon? leftIcon; final Widget? rightWidget; final GestureTapCallback? onTap; @@ -29,13 +31,21 @@ class CustomCellWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text( - leftText, - style: TextStyle( - fontSize: 14.sp, - color: Colors.black87, - fontWeight: FontWeight.w400, - ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (leftIcon != null) leftIcon!, + if (leftIcon != null) SizedBox(width: 4.w), + Text( + leftText, + style: TextStyle( + fontSize: 14.sp, + color: Colors.black87, + fontWeight: FontWeight.w400, + ), + ), + ], ), rightWidget ?? Text( diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index b6f6532..09af634 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -2,6 +2,8 @@ import 'package:get/get.dart'; import 'package:starwork_flutter/routes/app_routes.dart'; import 'package:starwork_flutter/views/device/confirmPairDevice/confirm_pair_device_binding.dart'; import 'package:starwork_flutter/views/device/confirmPairDevice/confirm_pair_device_view.dart'; +import 'package:starwork_flutter/views/device/deviceManage/device_manage_binding.dart'; +import 'package:starwork_flutter/views/device/deviceManage/device_manage_view.dart'; import 'package:starwork_flutter/views/device/searchDevice/search_device_binding.dart'; import 'package:starwork_flutter/views/device/searchDevice/search_device_view.dart'; import 'package:starwork_flutter/views/home/home_binding.dart'; @@ -123,5 +125,10 @@ class AppPages { page: () => TeamInfoView(), binding: TeamInfoBinding(), ), + GetPage( + name: AppRoutes.deviceManage, + page: () => DeviceManageView(), + binding: DeviceManageBinding(), + ), ]; } diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index ebe84e7..eea4167 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -8,8 +8,6 @@ class AppRoutes{ static const String inputVerificationCode = '/inputVerificationCode'; static const String forgotPassword = '/forgotPassword'; static const String setNewPassword = '/setNewPassword'; - static const String searchDevice = '/searchDevice'; - static const String confirmPairDevice = '/confirmPairDevice'; static const String teamNotice = '/team/teamNotice'; static const String teamNoticeDetails = '/team/teamNoticeDetails'; static const String teamUseCaseSetting = '/team/useCaseSetting'; @@ -17,4 +15,7 @@ class AppRoutes{ static const String teamJoinTeam = '/team/joinTeam'; static const String teamManage = '/team/teamManage'; static const String teamInfo = '/team/teamInfo'; + static const String deviceManage = '/device/deviceManage'; + static const String searchDevice = '/device/searchDevice'; + static const String confirmPairDevice = '/device/confirmPairDevice'; } \ No newline at end of file diff --git a/lib/views/device/deviceManage/device_manage_binding.dart b/lib/views/device/deviceManage/device_manage_binding.dart new file mode 100644 index 0000000..8eda40a --- /dev/null +++ b/lib/views/device/deviceManage/device_manage_binding.dart @@ -0,0 +1,9 @@ +import 'package:get/get.dart'; +import 'package:starwork_flutter/views/device/deviceManage/device_manage_controller.dart'; + +class DeviceManageBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => DeviceManageController()); + } +} \ No newline at end of file diff --git a/lib/views/device/deviceManage/device_manage_controller.dart b/lib/views/device/deviceManage/device_manage_controller.dart new file mode 100644 index 0000000..e1fe639 --- /dev/null +++ b/lib/views/device/deviceManage/device_manage_controller.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:get/get_rx/get_rx.dart'; +import 'package:starwork_flutter/common/constant/app_support_device_type.dart'; + +class DeviceManageController extends GetxController with GetSingleTickerProviderStateMixin { + // 选中状态 0:全部状态 1:在线 2:离线 + final RxInt selectedStatusIndex = 0.obs; + + // 选中设备类型 + final selectedDeviceType = AppSupportDeviceType.all.obs; +} diff --git a/lib/views/device/deviceManage/device_manage_view.dart b/lib/views/device/deviceManage/device_manage_view.dart new file mode 100644 index 0000000..ad14594 --- /dev/null +++ b/lib/views/device/deviceManage/device_manage_view.dart @@ -0,0 +1,340 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:starwork_flutter/common/constant/app_colors.dart'; +import 'package:starwork_flutter/common/constant/app_support_device_type.dart'; +import 'package:starwork_flutter/common/widgets/custome_app_bar_wdiget.dart'; +import 'package:starwork_flutter/extension/function_extension.dart'; +import 'package:starwork_flutter/views/device/deviceManage/device_manage_controller.dart'; + +class DeviceManageView extends GetView { + const DeviceManageView({super.key}); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + FocusScope.of(context).requestFocus(FocusNode()); + }, + child: Scaffold( + backgroundColor: AppColors.scaffoldBackgroundColor, + appBar: CustomAppBarWidget( + title: '设备管理'.tr, + ), + body: SafeArea( + child: Padding( + padding: EdgeInsets.symmetric( + vertical: 10.h, + ), + child: Column( + children: [ + Container( + padding: EdgeInsets.symmetric( + horizontal: 10.w, + vertical: 10.h, + ), + decoration: BoxDecoration( + color: Colors.white, + ), + child: Column( + children: [ + _buildSearchBar(), + SizedBox( + height: 10.h, + ), + _buildLabelRow(), + ], + ), + ), + // 主区域:左侧菜单 + 右侧设备列表(占满剩余空间) + Expanded( + // ✅ 关键:让主内容区域占满剩余高度 + child: _buildMainArea(), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TextButton( + onPressed: () {}, + child: Text( + '添加设备', + style: TextStyle( + color: Colors.blue, + fontWeight: FontWeight.w500, + fontSize: 16.sp, + ), + ), + ), + TextButton( + onPressed: () {}, + child: Text( + '删除设备', + style: TextStyle( + color: Colors.blue, + fontWeight: FontWeight.w500, + fontSize: 16.sp, + ), + ), + ), + TextButton( + onPressed: () {}, + child: Text( + '更多管理', + style: TextStyle( + color: Colors.blue, + fontWeight: FontWeight.w500, + fontSize: 16.sp, + ), + ), + ) + ], + ), + ], + ), + ), + ), + ), + ); + } + + _buildSearchBar() { + return TextField( + decoration: InputDecoration( + hintText: '请输入设备名称或编号'.tr, + hintStyle: TextStyle( + fontSize: 14.sp, + color: const Color(0xFF999999), + ), + prefixIcon: const Icon( + Icons.search, + color: Color(0xFF999999), + ), + filled: true, + // 启用背景填充 + fillColor: const Color(0xFFf0f0f0), + // 灰色背景(可调整色值) + border: InputBorder.none, + // 设置内边距 + contentPadding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: Colors.blue, + width: 1.5, + ), + borderRadius: BorderRadius.circular(8.0.r), + ), + enabledBorder: OutlineInputBorder( + borderSide: const BorderSide(color: Colors.transparent), + borderRadius: BorderRadius.circular(8.0.r), + ), + ), + ); + } + + _buildLabelRow() { + return Obx( + () => Row( + children: [ + GestureDetector( + onTap: () { + controller.selectedStatusIndex.value = 0; + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 4.h), + decoration: BoxDecoration( + color: controller.selectedStatusIndex == 0 ? Colors.black : Colors.grey[300], + borderRadius: BorderRadius.circular(4.r), + ), + child: Text( + '全部状态'.tr, + style: TextStyle( + fontSize: 12.sp, + color: controller.selectedStatusIndex == 0 ? Colors.white : Colors.grey[500], + fontWeight: FontWeight.w500, + ), + ), + ), + ), + SizedBox( + width: 10.w, + ), + GestureDetector( + onTap: () { + controller.selectedStatusIndex.value = 1; + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 4.h), + decoration: BoxDecoration( + color: controller.selectedStatusIndex == 1 ? Colors.black : Colors.grey[300], + borderRadius: BorderRadius.circular(4.r), + ), + child: Text( + '在线(${1})'.tr, + style: TextStyle( + fontSize: 12.sp, + color: controller.selectedStatusIndex == 1 ? Colors.white : Colors.grey[500], + fontWeight: FontWeight.w500, + ), + ), + ), + ), + SizedBox( + width: 10.w, + ), + GestureDetector( + onTap: () { + controller.selectedStatusIndex.value = 2; + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 4.h), + decoration: BoxDecoration( + color: controller.selectedStatusIndex == 2 ? Colors.black : Colors.grey[300], + borderRadius: BorderRadius.circular(4.r), + ), + child: Text( + '离线(${1})'.tr, + style: TextStyle( + fontSize: 12.sp, + color: controller.selectedStatusIndex == 2 ? Colors.white : Colors.grey[500], + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ], + ), + ); + } + + _buildMainArea() { + return Row( + children: [ + Expanded( + flex: 1, + child: _buildLeftOptionsList(), // 左侧列表 + ), + Expanded( + flex: 4, + child: _buildRightDeviceList(), // 右侧设备 + ), + ], + ); + } + + _buildLeftOptionsList() { + return Container( + decoration: const BoxDecoration( + color: Colors.white, + ), + child: ListView.builder( + itemCount: AppSupportDeviceType.allTypes.length, + itemBuilder: (context, index) { + var deviceType = AppSupportDeviceType.allTypes[index]; + return Obx( + () => GestureDetector( + onTap: () { + controller.selectedDeviceType.value = deviceType; + }, + child: Container( + padding: EdgeInsets.symmetric(vertical: 10.h), + decoration: BoxDecoration( + color: controller.selectedDeviceType.value == deviceType + ? AppColors.scaffoldBackgroundColor + : Colors.white, + ), + alignment: Alignment.center, + child: Text( + '${deviceType.label}(${0})', + style: TextStyle( + fontSize: 10.sp, + color: Colors.black, + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ); + }, + ), + ); + } + + _buildRightDeviceList() { + return Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), + child: GridView.builder( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, // 每行两列 + crossAxisSpacing: 6.w, // 列间距 + mainAxisSpacing: 6.h, // 行间距 + childAspectRatio: 1.6, // 宽高比,可根据需要调整 + ), + itemCount: 100, + itemBuilder: (context, index) { + return Container( + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(8.r)), + ), + padding: EdgeInsets.symmetric( + horizontal: 10.w, + ), + alignment: Alignment.centerLeft, + child: Obx( + () => Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (controller.selectedDeviceType.value.iconImagePath != null) + Image( + image: AssetImage(controller.selectedDeviceType.value.iconImagePath!), + width: 26.w, + height: 26.w, + fit: BoxFit.contain, + gaplessPlayback: true, + // 防止闪烁 + filterQuality: FilterQuality.medium, + // 优化过滤质量 + errorBuilder: (context, error, stackTrace) { + return Icon( + Icons.image_not_supported, + size: 26.sp, + color: Colors.grey, + ); + }, + ), + SizedBox( + height: 6.h, + ), + Text( + 'TMH_5sdds5465a4sd5665$index', + style: TextStyle( + fontSize: 10.sp, + fontWeight: FontWeight.w400, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + SizedBox( + height: 4.h, + ), + Text( + '在线', + style: TextStyle( + color: Colors.green, + fontSize: 10.sp, + fontWeight: FontWeight.w500, + ), + ) + ], + ), + ), + ); + }, + ), + ); + } +} diff --git a/lib/views/team/teamManage/team_manage_view.dart b/lib/views/team/teamManage/team_manage_view.dart index 0eaf763..da19f71 100644 --- a/lib/views/team/teamManage/team_manage_view.dart +++ b/lib/views/team/teamManage/team_manage_view.dart @@ -1,11 +1,14 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:starwork_flutter/api/model/team/response/team_info_response.dart'; import 'package:starwork_flutter/base/app_logger.dart'; import 'package:starwork_flutter/common/constant/app_colors.dart'; +import 'package:starwork_flutter/common/widgets/custom_cell_list_widget.dart'; +import 'package:starwork_flutter/common/widgets/custom_cell_widget.dart'; import 'package:starwork_flutter/common/widgets/custome_app_bar_wdiget.dart'; import 'package:starwork_flutter/extension/function_extension.dart'; import 'package:starwork_flutter/routes/app_routes.dart'; @@ -50,7 +53,6 @@ class TeamManageView extends GetView { SizedBox( height: 10.h, ), - SizedBox( width: double.infinity, child: Row( @@ -59,7 +61,7 @@ class TeamManageView extends GetView { child: ElevatedButton( onPressed: () {}.debounce(), style: ElevatedButton.styleFrom( - backgroundColor: Colors.grey[100], + backgroundColor: Colors.white, padding: EdgeInsets.symmetric(vertical: 12.h), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.r)), ), @@ -205,122 +207,49 @@ class TeamManageView extends GetView { SizedBox( height: 10.h, ), - Container( - width: double.infinity, - padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.r), - color: Colors.white, - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.perm_contact_calendar_rounded, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '人员配置', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + CustomCellListWidget( + children: [ + CustomCellWidget( + onTap: () {}, + leftText: '人员配置'.tr, + leftIcon: Icon( + Icons.perm_contact_calendar_rounded, + color: Colors.blue.withOpacity(0.8), ), - - SizedBox(height: 10.h), - // 分割线 - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.person, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '权限分配', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + ), + CustomCellWidget( + onTap: () {}, + leftText: '权限分配'.tr, + leftIcon: Icon( + Icons.person, + color: Colors.blue.withOpacity(0.8), ), - SizedBox(height: 10.h), - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.switch_account_rounded, - color: Colors.blue, - ), - SizedBox( - width: 8.w, - ), - Text( - '新用户审核', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], - ) - ], - ), - ) + ), + CustomCellWidget( + onTap: () {}, + leftText: '新用户审核'.tr, + leftIcon: Icon( + Icons.switch_account_rounded, + color: Colors.blue.withOpacity(0.8), + ), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], + ), + ), + ], + ), ], ); } @@ -340,160 +269,64 @@ class TeamManageView extends GetView { SizedBox( height: 10.h, ), - Container( - width: double.infinity, - padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.r), - color: Colors.white, - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.assessment_rounded, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '设备管理', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + CustomCellListWidget( + children: [ + CustomCellWidget( + onTap: () { + Get.toNamed(AppRoutes.deviceManage); + }, + leftText: '设备管理'.tr, + leftIcon: Icon( + Icons.storage_rounded, + color: Colors.blue.withOpacity(0.8), ), - - SizedBox(height: 10.h), - // 分割线 - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.assessment_rounded, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '运维服务', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + ), + CustomCellWidget( + onTap: () {}, + leftText: '运维服务'.tr, + leftIcon: Icon( + Icons.assessment_rounded, + color: Colors.blue.withOpacity(0.8), ), - - SizedBox(height: 10.h), - // 分割线 - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.assignment, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '操作日志', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + ), + CustomCellWidget( + onTap: () {}, + leftText: '操作日志'.tr, + leftIcon: Icon( + Icons.assignment, + color: Colors.blue.withOpacity(0.8), ), - SizedBox(height: 10.h), - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.qr_code_2_outlined, - color: Colors.blue, - ), - SizedBox( - width: 8.w, - ), - Text( - '团队二维码', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], - ) - ], - ), - ) + ), + CustomCellWidget( + onTap: () {}, + leftText: '团队二维码'.tr, + leftIcon: Icon( + Icons.qr_code_2_outlined, + color: Colors.blue.withOpacity(0.8), + ), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], + ), + ), + ], + ), ], ); } diff --git a/lib/views/team/teamNotice/team_notice_view.dart b/lib/views/team/teamNotice/team_notice_view.dart index b5f1c69..a89c554 100644 --- a/lib/views/team/teamNotice/team_notice_view.dart +++ b/lib/views/team/teamNotice/team_notice_view.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:starwork_flutter/common/constant/app_colors.dart'; +import 'package:starwork_flutter/common/widgets/custome_app_bar_wdiget.dart'; import 'package:starwork_flutter/views/team/teamNotice/team_notice_controller.dart'; class TeamNoticeView extends GetView { @@ -11,32 +12,7 @@ class TeamNoticeView extends GetView { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - elevation: 0, - surfaceTintColor: Colors.transparent, - shadowColor: Colors.transparent, - scrolledUnderElevation: 0, - leading: IconButton( - icon: const Icon(Icons.arrow_back_ios_new_rounded), // 替换为任意图标,如关闭、菜单等 - onPressed: () { - // 自定义逻辑,例如:关闭页面、退出流程等 - Navigator.of(context).pop(); - }, - ), - title: Row( - children: [ - Text( - '公告'.tr, - style: TextStyle( - fontSize: 18.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - ), + appBar: CustomAppBarWidget(title: '公告'.tr), body: Column( children: [ TabBar(