当前位置:  开发笔记 > 编程语言 > 正文

Flutter中的String xml文件

如何解决《Flutter中的Stringxml文件》经验,为你挑选了2个好方法。

嗨,我是新开发的Android开发者.在flutter字符串文本中直接设置为文本字段小部件.

(即)

new Text('Hello,  How are you?')

是正确的方法吗?或者我们可以将所有字符串保存在一个文件中并使用它.

(即)

Hello, How are you?

有可能吗?.任何帮助将不胜感激,谢谢你提前.



1> Speed..:

Flutter目前没有专门的字符串资源系统.目前,最佳做法是将复制文本作为静态字段保存在类中,并从那里访问它们.例如:

class Strings {
  static const String welcomeMessage = "Welcome To Flutter";
}

然后在您的代码中,您可以访问您的字符串:

Text(Strings.welcomeMessage)

资源


我建议使每个字符串`静态常量`

2> CopsOnRoad..:

对于那些不想使用任何第三方插件的人,这是您可以使用的方法。

    创建一个文件夹stringsasset。将您的语言文件放入其中。

    asset
      strings
      - en.json // for english 
      - ru.json  // for russian
    

    现在,在中en.json,例如,输入您的字符串。

    {
      "text1": "Hello",
      "text2": "World"
    }
    

    同样,在中ru.json

    {
      "text1": "??????",
      "text2": "???"
    }
    

    将此添加到pubspec.yaml文件(注意空格)

    flutter:
    
      uses-material-design: true
    
      assets:
        - assets/json/en.json
        - assets/json/ru.json
    

    现在,您都可以在应用程序中使用这些字符串。这是示例代码,其中AppBar显示了翻译后的文本。

    void main() {
      runApp(
        MaterialApp(
          locale: Locale("ru"), // switch between en and ru to see effect
          localizationsDelegates: [const DemoLocalizationsDelegate(), GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate],
          supportedLocales: [const Locale('en', ''), const Locale('ru', '')],
          home: HomePage(),
        ),
      );
    }
    
    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text(DemoLocalizations.of(context).getText("text2") ?? "Error")),
        );
      }
    }
    
    // this class is used for localizations
    class DemoLocalizations {
      static DemoLocalizations of(BuildContext context) {
        return Localizations.of(context, DemoLocalizations);
      }
    
      String getText(String key) => language[key];
    }
    
    Map language;
    
    class DemoLocalizationsDelegate extends LocalizationsDelegate {
      const DemoLocalizationsDelegate();
    
      @override
      bool isSupported(Locale locale) => ['en', 'ru'].contains(locale.languageCode);
    
      @override
      Future load(Locale locale) async {
        String string = await rootBundle.loadString("assets/json/${locale.languageCode}.json");
        language = json.decode(string);
        return SynchronousFuture(DemoLocalizations());
      }
    
      @override
      bool shouldReload(DemoLocalizationsDelegate old) => false;
    }
    

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有