You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
HMG_Patient_App_New/lib/widgets/language_switcher.dart

81 lines
2.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
class LanguageSelector extends StatefulWidget {
final String currentLanguage;
final ValueChanged<String> onLanguageChanged;
final List<Map<String, String>> languages;
final bool showOnlyIcon;
const LanguageSelector({
super.key,
required this.currentLanguage,
required this.onLanguageChanged,
required this.languages,
required this.showOnlyIcon,
});
@override
State<LanguageSelector> createState() => _LanguageSelectorState();
}
class _LanguageSelectorState extends State<LanguageSelector> {
@override
Widget build(BuildContext context) {
final currentLangData = widget.languages.firstWhere(
(lang) => lang['code'] == widget.currentLanguage,
orElse: () => {'code': 'en', 'name': 'English'},
);
if (widget.showOnlyIcon) {
return InkWell(
onTap: () {
final newLanguage = widget.currentLanguage == 'ar' ? 'en' : 'ar';
print(newLanguage);
widget.onLanguageChanged(newLanguage);
},
child: Utils.buildSvgWithAssets(icon: AppAssets.globe_black));
} else {
return Stack(clipBehavior: Clip.none, children: [
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: AppColors.secondaryLightRedColor,
),
child: InkWell(
onTap: () {
final newLanguage = widget.currentLanguage == 'ar' ? 'en' : 'ar';
widget.onLanguageChanged(newLanguage);
},
child: Container(
padding: EdgeInsets.all(8.h),
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12)),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Utils.buildSvgWithAssets(icon: AppAssets.language),
SizedBox(width: 6.h),
Text(
currentLangData['name']?.toUpperCase() ?? 'EN',
style: context.dynamicTextStyle(
fontWeight: FontWeight.w500,
fontSize: 14.fSize,
color: AppColors.primaryRedColor,
letterSpacing: 0.1,
isLanguageSwitcher: true,
),
),
],
),
),
),
),
]);
}
}
}