【问题标题】:Why does flutter localization not work properly?为什么颤振本地化不能正常工作?
【发布时间】:2020-12-31 13:04:40
【问题描述】:

我想将 tr 标签添加到 Flutter 本地化部分。我是 尽管有对 Tr 的支持,但出现错误。错误是 跟随;错误:元素类型 'Locale(其中 Locale 在 C:\Users\StatTark\AppData\Roaming\Pub\Cache\hosted\pub.dartlang.org\intl-0.16.1\lib\src\locale.dart)' 不能分配给列表类型 'Locale(其中 Locale 在 C:\flutter\bin\cache\pkg\sky_engine\lib\ui\window.dart)'。

错误:无法实例化抽象类。 (instantiate_abstract_class at [ajanda] lib\pages\mainmenu.dart:36)

我不明白如果我在使用中犯了错误,如果你能帮忙,我会很高兴。

class MainMenu extends StatelessWidget {
  MainMenu({Key key}) : super(key: key);
  final _sdb = SettingsDbHelper();

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _sdb.getSettings(),
      builder: (context, snapshot) {
        if (snapshot.data == null) {
          return MaterialApp(
            localizationsDelegates: [
              GlobalMaterialLocalizations.delegate,
              GlobalWidgetsLocalizations.delegate
            ],
            supportedLocales:  [Locale('en','US'),Locale('tr','')], //The error is here
            debugShowCheckedModeBanner: false,
            home: Scaffold(
              body: Center(
                child: Text(proTranslate["Yükleniyor....."][Language.languageIndex]),
              ),
            ),
          );
        } else {
          Language.languageIndex = snapshot.data[0].language;
          return DynamicTheme(
              defaultBrightness: Brightness.light,
              data: (brightness) => ThemeData(
                    brightness: brightness,
                    fontFamily: snapshot.data[0].fontName,
                    floatingActionButtonTheme: FloatingActionButtonThemeData(
                      foregroundColor: Colors.green,
                    ),
                  ),
              themedWidgetBuilder: (context, theme) {
                return MaterialApp(
                  localizationsDelegates: [
                    GlobalMaterialLocalizations.delegate,
                    GlobalWidgetsLocalizations.delegate
                  ],
                 supportedLocales:  [Locale('en','US'),Locale('tr','')],

                  debugShowCheckedModeBanner: false,
                  theme: theme,
                  home: MainMenuBody(
                    warning: snapshot.data[0].warning,
                  ),
                  // navigatorKey: navigatorKey,
                );
              });
        }
      },
    );
  }
}

class MainMenuBody extends StatefulWidget {....}

【问题讨论】:

    标签: flutter localization


    【解决方案1】:

    您可以尝试/测试的一些建议,见下文。

    1. [Locale('en','US'),Locale('tr','')], 替换为[Locale('en'),Locale('tr')],

    2. 首先初始化支持的语言环境列表并相应地使用它。

    // init before build  
    final List<Locale> appSupportedLocales = [
      Locale('en'),
      Locale('tr')
    ];
    
    // ...
    // then use it like this   
    supportedLocales: appSupportedLocales,  
    

    【讨论】:

    • 错误:位置参数太多:预期为 0,但找到了 1。错误:无法实例化抽象类。
    • 您的代码难以阅读,根据不同的状态重新加载整个MaterialApp 可能会给您带来问题。
    • 请检查这个 repo,它还包含一个本地化的工作示例。 github.com/beerstorm-net/ulink-url-shortener/blob/master/…
    【解决方案2】:

    我来晚了,但我刚刚解决了同样的问题。

    我很确定您的文件正在导入 intl/locale.dart 而不是 flutter/material.dart,因为两者都定义了 Local 类型。

    要修复它,只需将文件顶部的导入替换为:

    import 'package:intl/locale.dart';

    import 'package:flutter/material.dart';

    你应该没事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2019-08-29
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多