#flutter #flutter-theme #flutter-localizations #flutter-font
Вопрос:
У меня есть две кнопки в приложении may flutter.одна из них предназначена для переключения темы, а другая-для изменения локали для поддержки английского и фарси в приложении. все в порядке,и приложение работает правильно, но когда я хочу установить тему в тексте для каждого языка, стиль текста устанавливается неправильно. Я определил два значения texttheme: faTextTheme для языка фарси и enTextTheme для английского языка, но в тексте задана только entexttheme
это мои коды флаттера:
import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({ Key? key, }) : super(key: key); @override Statelt;MyAppgt; createState() =gt; _MyAppState(); } class _MyAppState extends Statelt;MyAppgt; { Locale _locale = Locale('en'); @override Widget build(BuildContext context) { return AdaptiveTheme( light: ThemeData( brightness: Brightness.light, primarySwatch: Colors.red, textTheme: _locale == Locale('fa') ? faTextTheme : enTextTheme), dark: ThemeData( brightness: Brightness.dark, primarySwatch: Colors.red, textTheme: _locale == Locale('fa') ? faTextTheme : enTextTheme), initial: AdaptiveThemeMode.light, builder: (theme, darkTheme) =gt; MaterialApp( title: 'Adaptive Theme Demo', localizationsDelegates: [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: AppLocalizations.supportedLocales, theme: theme, locale: _locale, darkTheme: darkTheme, home: MyHomePage( changedLanguage: (Languages newLanguage) { setState(() { newLanguage == Languages.fa ? _locale = Locale('fa') : _locale = Locale('en'); }); }, ), ), ); } } TextTheme get enTextTheme =gt; GoogleFonts.robotoTextTheme(TextTheme(bodyText2: TextStyle(fontSize: 10,fontWeight: FontWeight.bold))); TextTheme get faTextTheme =gt; TextTheme( bodyText2: TextStyle( fontSize: 40, fontFamily: 'vazir', ), ); class MyHomePage extends StatefulWidget { final Function(Languages language) changedLanguage; const MyHomePage({required this.changedLanguage}); @override Statelt;MyHomePagegt; createState() =gt; _MyHomePageState(); } class _MyHomePageState extends Statelt;MyHomePagegt; { Languages languages = Languages.en; void updateSelectedLanguage(Languages newLanguges) { widget.changedLanguage( languages == Languages.fa ? Languages.en : Languages.fa); setState(() { languages = newLanguges; }); } @override Widget build(BuildContext context) { var localization = AppLocalizations.of(context)!; return Scaffold( body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Center( child: Text(localization.helloWorld), ), ElevatedButton( onPressed: () { // AdaptiveTheme.of(context).toggleThemeMode(); final ThemeData themeData = Theme.of(context); var currentBrightness = themeData.brightness == Brightness.dark ? 'dark' : 'light'; if (currentBrightness == 'dark') { AdaptiveTheme.of(context).setLight(); } else { AdaptiveTheme.of(context).setDark(); } }, child: Text(localization.toggleThemeBtn)), ElevatedButton( onPressed: () { var newLanguage; if (languages == Languages.fa) { newLanguage = Languages.en; } else { newLanguage = Languages.fa; } updateSelectedLanguage(newLanguage); }, child: Text( localization.changeLanguageBtn, )) ], ), ); } } enum Languages { en, fa }
когда я отлаживаю, все в порядке.когда языковой стандарт будет на английском языке, они будут возвращены, а когда языковой стандарт будет fa, будет возвращена тема fa. но у текста нет правильной темы и шрифта , спасибо, ребята.