我的应用程序中有语言选择设置。在语言选择 English 或 Arab 的基础上,我想使用不同的字体系列。我在 MaterialApp() 里面做了,但它不会达到我的目标。
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'OnlyTick',
theme: ThemeData(
primarySwatch: Colors.indigo,
buttonColor: Colors.indigo,
iconTheme: IconThemeData(color: Colors.indigo),
accentIconTheme: IconThemeData(color: Colors.indigoAccent),
fontFamily: appLang == 'English'?'Proxima':'DroidKufi',
),
debugShowCheckedModeBanner: false,
home: SplashScreenPage(),
localizationsDelegates: [
// const TranslationsDelegate(), //TODO: will create it later, refer https://www.didierboelens.com/2018/04/internationalization---make-an-flutter-application-multi-lingual/
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('ar', ''),
],
// setHome(),
routes: routes,
);
}
Run Code Online (Sandbox Code Playgroud)
假设您正在使用以下结构运行您的项目:
void main() => runApp(new App());
Run Code Online (Sandbox Code Playgroud)
将函数添加setAppFontFamily到您的App类中,它将负责更改您的应用程序fontFamily:
class App extends StatefulWidget {
App({Key key,}) :
super(key: key);
@override
_AppState createState() => new _AppState();
static void setAppFontFamily(BuildContext context, String _selectedFontFamily) {
_AppState state = context.findAncestorStateOfType<_AppState>();
state.setState(() {
state._fontFamily = _selectedFontFamily;
});
}
}
Run Code Online (Sandbox Code Playgroud)
之后,将局部变量添加到您的_AppState类或您当前用于State类的任何名称;
String _fontFamily = 'Proxima' ; //Initial value before any selection is made
Run Code Online (Sandbox Code Playgroud)
然后分配_fontFamily给fontFamily您的 Material App的属性Theme:
theme: ThemeData(
primarySwatch: Colors.indigo,
buttonColor: Colors.indigo,
iconTheme: IconThemeData(color: Colors.indigo),
accentIconTheme: IconThemeData(color: Colors.indigoAccent),
fontFamily: _fontFamily,
),
Run Code Online (Sandbox Code Playgroud)
完成所有这些步骤后,您将能够fontFamily使用以下行从应用程序的任何位置更改应用程序的 :
App.setAppFontFamily(context, 'DroidKufi');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1986 次 |
| 最近记录: |