Мне нужно отобразить средство выбора даты на арабском языке, я не могу управлять этим с помощью конструктора Locale. Это только отображение на английском языке.
Pick date metod
DateTime selectedDate = DateTime.now();
Future<void> _selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: selectedDate,
firstDate: DateTime(2000, 1),
lastDate: DateTime(2100),
builder: (BuildContext context, Widget child) {
return Theme(
data: Theme.of(context).copyWith(
colorScheme: ColorScheme.light(primary: primaryColor)),
child: child,
);
});
if (picked != null && picked != selectedDate) {
selectedDate = picked;
}
}
Main Screen
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await GetStorage.init();
runApp(
MyApp(),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
debugShowCheckedModeBanner: false,
translations: Translation(),
locale: Locale(AuthController().appLocal.value),
fallbackLocale: Locale(AuthController().appLocal.value),
title: 'Hesabate App',
theme: ThemeData(
canvasColor: Colors.transparent,
fontFamily: "NotoNaskhArabic_font",
),
initialRoute: AppRoutes.splashScreen,
getPages: AppRoutes.routes,
);
}
}
I have an updated language(en&ar) at this variable
AuthController().appLocal.value
Можете ли вы уточнить, какой пакет вы используете? Например, у flutter_datetime_picker есть параметр locale, где вы можете передать LocalType.ar
static Future<DateTime?> showPicker(
BuildContext context, {
bool showTitleActions: true,
DateChangedCallback? onChanged,
DateChangedCallback? onConfirm,
DateCancelledCallback? onCancel,
locale: LocaleType.en,
BasePickerModel? pickerModel,
DatePickerTheme? theme,
Отредактировано в соответствии с пояснением Надера, вы можете передать locale:Locale("ar") во внутренний date_picker
const Locale(
this._languageCode, [
this._countryCode, ])
Итак, во внутреннем showDatePicker() есть параметр locale в нативном, вы можете передать locale: Locale("ar")
Я уже сделал, и он показывает ошибку: «Нет найденных локализаций материалов». . однако я использую управление состоянием Getx и GetMaterialApp в качестве корня приложения.
Не могли бы вы быть более конкретными в следующий раз, задавая вопрос stackoverflow.com/help/как спросить Итак, можете ли вы объяснить шаги, которые вы делаете, код, в котором вы инициализируете свою локаль в main.dart. Добавили ли вы арабский язык в качестве поддерживаемой локали?
извините, я предоставил свой вопрос с более подробной информацией
спасибо, я нашел решение, которое искал. чтобы решить проблему, я сделал несколько шагов:
In order to show the date picker in local language, you need to make use of flutter_localizations plugin and specify localizationDelegates and supportedLocales inside MaterialApp in your main code
1. Добавьте плагин flutter_localizations в pubspec.yaml и запустите pub get.
flutter_localizations:
sdk: flutter
2. Импортируйте плагин в файл dart.
import 'package:flutter_localizations/flutter_localizations.dart';
3. Внутри MaterialApp добавьте следующее
return GetMaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate
],
supportedLocales: [
const Locale('en'),
const Locale('ar')
],
4. Затем реализуйте datePicker по умолчанию следующим образом.
DateTime selectedDate = DateTime.now();
Future<void> _selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: selectedDate,
firstDate: DateTime(2000, 1),
lastDate: DateTime(2100),
builder: (BuildContext context, Widget child) {
return Theme(
data: Theme.of(context).copyWith(
colorScheme: ColorScheme.light(primary: primaryColor)),
child: child,
);
});
if (picked != null && picked != selectedDate) {
selectedDate = picked;
}
}
5. Наконец, вызовите предыдущий метод в текстовое поле даты следующим образом.
Expanded(
child: CustomTextField(
hint: "date".tr,
onPress: () => _selectDate(context),
),
Я не использую внешний пакет, это метод showDatePicker, встроенный во флаттер. Я могу показать только английский вид через этот конструктор => locale: Locale("en").