Translate-Flutter/lib/widget/language_bottom_sheet.dart
2024-07-23 14:08:40 +08:00

128 lines
4.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get_state_manager/get_state_manager.dart';
import 'package:trans_lark/entity/language_entity.dart';
import 'package:trans_lark/generated/assets.dart';
import 'package:trans_lark/global/translate_language.dart';
import 'package:trans_lark/page/home/home_logic.dart';
import 'package:trans_lark/widget/base_scrollbar.dart';
import 'package:trans_lark/widget/language_bar.dart';
class LanguageBottomSheet extends StatelessWidget {
const LanguageBottomSheet({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 0.9,
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(26), topRight: Radius.circular(26),
),
),
child: Column(
children: [
const SizedBox(height: 12),
Container(
width: 28,
height: 4,
decoration: BoxDecoration(
color: const Color(0xffD9D9D9),
borderRadius: BorderRadius.circular(2),
),
),
const SizedBox(height: 10),
LanguageBar(
isSelect: true,
onTapFrom: _onTapFrom,
onTapTo: _onTapTo,
),
const SizedBox(height: 10),
_buildListView(),
],
),
);
}
Widget _buildListView() {
return Expanded(
child: BaseScrollbar(
child: ListView.builder(
itemCount: TranslateLanguage().languageList.length,
itemBuilder: (context, index) {
var item = TranslateLanguage().languageList[index];
return Material(
color: Colors.transparent,
child: InkWell(
onTap: () => _itemOnTap(item),
child: Container(
padding: const EdgeInsets.symmetric(vertical: 13, horizontal: 33),
child: Row(
children: [
Expanded(
child: Obx(() {
return Text(
item.languageName,
style: TextStyle(
color: TranslateLanguage().isSelectFromLanguage.value
? (item.languageName == TranslateLanguage().fromLanguageEntity.value.languageName ? const Color(0xff4ECA8C) : const Color(0xff152A3D))
: (item.languageName == TranslateLanguage().toLanguageEntity.value.languageName ? const Color(0xff4ECA8C) : const Color(0xff152A3D)),
fontSize: 16,
overflow: TextOverflow.ellipsis,
),
);
}),
),
Obx(() {
return Visibility(
visible: TranslateLanguage().isSelectFromLanguage.value
? (item.languageName == TranslateLanguage().fromLanguageEntity.value.languageName)
: (item.languageName == TranslateLanguage().toLanguageEntity.value.languageName),
child: Padding(
padding: const EdgeInsets.only(left: 10),
child: Image.asset(
Assets.imagesStar,
width: 16,
height: 16,
),
),
);
}),
],
),
),
),
);
},
),
),
);
}
void _itemOnTap(LanguageEntity item) {
if (TranslateLanguage().isSelectFromLanguage.value) {
TranslateLanguage().fromLanguageEntity.update((fn) {
fn?.languageCode = item.languageCode;
fn?.languageName = item.languageName;
});
} else {
TranslateLanguage().toLanguageEntity.update((fn) {
fn?.languageCode = item.languageCode;
fn?.languageName = item.languageName;
});
}
if(Get.isRegistered<HomeLogic>()) {
HomeLogic.to.getDailyQuote();
}
}
void _onTapFrom() {
TranslateLanguage().isSelectFromLanguage.value = true;
}
void _onTapTo() {
TranslateLanguage().isSelectFromLanguage.value = false;
}
}