【问题标题】:Flutter GetX initialise translation source from a remote server?Flutter GetX 从远程服务器初始化翻译源?
【发布时间】:2021-06-18 18:14:51
【问题描述】:

我正在尝试使用 getX 作为颤振状态管理工具。 GetX 有自己的方式处理语言翻译。我不确定的一件事是如何从远程服务器初始化翻译源,而不是对翻译进行硬编码。通过这种方式,我无需发布新应用即可修改翻译。

欢迎提出任何建议。谢谢。

【问题讨论】:

    标签: flutter flutter-getx


    【解决方案1】:

    我有 DotNet WebAPI 后端,我正在发送如下格式的翻译:

    [ApiController]
    [Route("[controller]")]
    public class TranslationsController : ControllerBase
    {
        [HttpGet]
        public async Task<IActionResult> GetAll()
        {
            return Ok(new
            {
                en_US = new
                {
                    hi = "Hi",
                    bye = "Bye"
                },
                bn_BD = new
                {
                    hi = "ওহে",
                    bye = "বিদায়"
                }
            });
        }
    }
    

    还有我的 AppTranslations 课程:

    class AppTranslations extends Translations {
      final Map<String, String> en_US;
      final Map<String, String> bn_BD;
    
      AppTranslations({required this.en_US, required this.bn_BD});
    
      static AppTranslations fromJson(dynamic json) {
        return AppTranslations(
        en_US: Map<String, String>.from(json["en_US"]),
        bn_BD: Map<String, String>.from(json["bn_BD"]),
       );
      }
    
     @override
     Map<String, Map<String, String>> get keys => {
        "en_US": en_US,
        "bn_BD": bn_BD,
      };
    }
    

    我的TranslationProvider

    class TranslationProvider extends GetConnect {
      Future<AppTranslations?> getTranslations() async {
      final url = 'http://192.168.0.106:5000/translations';
    
      final response = await get(url, decoder: AppTranslations.fromJson);
    
       if (response.hasError) {
         return Future.error(response.statusText!);
        }
    
       return response.body;
      }
    }
    

    然后在我的 ma​​in 函数中:

    void main() async {
     final translationProvider = TranslationProvider();
    
     final translations = await translationProvider.getTranslations();
    
     runApp(MyApp(translations: translations!));
    }
    

    这是我的MyApp

    class MyApp extends StatelessWidget {
     final AppTranslations translations;
    
     const MyApp({Key? key, required this.translations}) : super(key: key);
    
     @override
     Widget build(BuildContext context) {
      return GetMaterialApp(
        translations: translations,
        locale: Locale("en_US"),
        home: MyHomePage(),
      );
     }
    }
    

    你就完成了!现在您可以在 API 中更新您的翻译,更新将反映在应用程序上。

    【讨论】:

    • 这个解决方案很好用,但是有没有可能我可以在 GerMaterialApp 之后从 api 获取语言,就像在初始屏幕中一样,谢谢。
    猜你喜欢
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2023-03-18
    • 2021-07-09
    相关资源
    最近更新 更多