Files
tuiche/lib/pages/mh_page/LanguagePage.dart
2026-04-07 14:49:31 +08:00

291 lines
16 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:ef/ef.dart';
import 'package:flutter/material.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/util/EventBus.dart';
import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/common/util/eventType.dart';
import 'package:vbvs_app/component/tool/ClickableContainer.dart';
import 'package:vbvs_app/controller/mh_controller/mh_language_controller.dart';
import 'package:vbvs_app/controller/weather/weather_controller.dart';
import 'package:vbvs_app/language/AppLanguage.dart';
import 'package:vbvs_app/pages/device_bind/componnet/FancyCircleCheckbox.dart';
import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart';
import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart';
import 'package:flutter/services.dart';
class LanguagePage extends StatefulWidget {
const LanguagePage({super.key});
@override
State<LanguagePage> createState() => _LanguagePageState();
}
class _LanguagePageState extends State<LanguagePage> {
MHLanguageController languageController = Get.find();
MHTHomeController deviceController = Get.find();
@override
void initState() {
// languageController.initLanuageList();
super.initState();
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, bodySize) => GestureDetector(
child: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/images/new_background.png'), // 本地图片
fit: BoxFit.fill, // 填满整个 Container
),
),
child: Scaffold(
backgroundColor: Colors.transparent, // 加上这一行
appBar: AppBar(
systemOverlayStyle: SystemUiOverlayStyle(
statusBarColor: Colors.transparent, // 状态栏背景色
statusBarIconBrightness: Brightness.light, // 图标颜色Android
statusBarBrightness: Brightness.light, // 图标颜色iOS
),
backgroundColor: Colors.transparent,
automaticallyImplyLeading: false,
iconTheme: IconThemeData(
color: themeController.currentColor.sc3,
),
titleSpacing: 0,
// leading: returnIconButtom,
title: Container(
width: double.infinity,
height: 180.rpx,
child: Stack(
alignment: Alignment.center,
children: [
/// 居中标题
Text(
'选择语言'.tr,
style: TextStyle(
fontFamily: 'Readex Pro',
color: themeController.currentColor.sc3,
letterSpacing: 0,
fontSize: 30.rpx,
),
),
Positioned(
left: 0,
child: returnIconButtomNew(),
),
],
),
),
actions: [],
centerTitle: false,
),
body: SafeArea(
top: true,
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(30.rpx, 0, 30.rpx, 0),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0.rpx, 25.rpx, 0.rpx, 0),
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: Color(0XFF003058),
borderRadius: BorderRadius.circular(
AppConstants().normal_container_radius),
),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0.rpx, 0, 0.rpx, 0),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: EdgeInsetsDirectional.fromSTEB(
40.rpx, 20.rpx, 40.rpx, 20.rpx),
child: Obx(() {
return Column(
children: languageController.languageList
.map<Widget>((language) {
return ClickableContainer(
backgroundColor:
Colors.transparent, // 背景透明
highlightColor: themeController
.currentColor.sc21, // 点击时的背景色
padding: EdgeInsets.symmetric(
vertical: 10.rpx,
horizontal: 16.rpx),
onTap: () async {
// 点击事件逻辑
for (var lang
in languageController
.languageList) {
lang.selected = (lang ==
language); // 根据选择更新状态
}
EventBus().emit(
SwitchLanguageEvent(language
.language_code));
await AppLanguage()
.loadLanguage(
language.language_code,
project: AppConstants()
.ent_type); // 加载语言
languageController
.updateAll(); // 更新操作
languageController
.selectLanguage
.value = language;
final list = deviceController
.personnelList.value;
if (list != null &&
list.isNotEmpty) {
deviceController
.getHomeSleeps(
list[0]["mac"],
context);
}
try {
// ef.kv.set("language",
// language.language_code);
WeatherModelController
weatherModelController =
Get.find();
weatherModelController
.getCurrentWeather();
await ef.kvdb.write(
"mht/language",
language.language_code);
//todo 通知语言
WebviewTestController
webviewTestController =
Get.find();
webviewTestController
.web.jsbridge?.dart
.switchLanguage(language
.language_code);
} catch (e) {
print(e);
}
},
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
children: [
Expanded(
child: Text(
language.language_name ??
'语言名称'.tr, // 显示语言名称
style: TextStyle(
fontFamily: 'Inter',
color: themeController
.currentColor.sc3,
fontSize: AppConstants()
.title_text_fontSize,
letterSpacing: 0.0,
),
maxLines: 1,
overflow: TextOverflow
.ellipsis, // 省略号处理
),
),
FancyCircleCheckbox(
borderColor: themeController
.currentColor.sc3,
fillColor: themeController
.currentColor.sc2,
value: language.selected ??
false, // 根据 selected 状态显示选中或未选中
onChanged: (value) async {
// // 保持原有的状态更改逻辑
// 点击事件逻辑
for (var lang
in languageController
.languageList) {
lang.selected = (lang ==
language); // 根据选择更新状态
}
await AppLanguage().loadLanguage(
language
.language_code,
project: AppConstants()
.ent_type); // 加载语言
languageController
.updateAll(); // 更新操作
languageController
.selectLanguage
.value = language;
final list =
deviceController
.personnelList
.value;
if (list != null &&
list.isNotEmpty) {
deviceController
.getHomeSleeps(
list[0]["mac"],
context);
}
try {
// ef.kv.set("language",
// language.language_code);
ef.kvdb.write(
"mht/language",
language
.language_code);
//todo 通知语言
WebviewTestController
webviewTestController =
Get.find();
webviewTestController
.web.jsbridge?.dart
.switchLanguage(language
.language_code);
} catch (e) {
print(e);
}
},
),
].divide(SizedBox(
width: 28.rpx)), // 为每个项添加间隔
),
);
})
.toList()
.divide(SizedBox(
height: 30.rpx,
)),
);
}),
),
]
.divide(SizedBox(height: 0.rpx))
.addToStart(SizedBox(height: 30.rpx))
.addToEnd(SizedBox(height: 30.rpx)),
),
),
),
),
],
),
),
),
),
),
),
),
);
}
}