Flutter:我想在运行时将字体应用于整个应用程序文本

vij*_*ria 5 flutter

我的应用程序中有语言选择设置。在语言选择 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)

Maz*_*him 5

假设您正在使用以下结构运行您的项目:

    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)

然后分配_fontFamilyfontFamily您的 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)