为啥颤振本地化不能正常工作?

Posted

技术标签:

【中文标题】为啥颤振本地化不能正常工作?【英文标题】: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 ....

【问题讨论】:

【参考方案1】:

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

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

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

// 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';

你应该没事。

【讨论】:

以上是关于为啥颤振本地化不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 docker 中构建这个 nuxtjs 应用程序,而本地构建工作?

为啥颤振本地通知会出现异常

为啥在集群模式下读取 CSV 文件失败(而在本地工作正常)?

JS 复制粘贴代码,本地测试正常,为啥到服务器就不能执行复制?

为啥FTP不能正常连接?

当表单在本地服务器上正常工作时,为啥表单中的数据没有发布到主机服务器上的 PHP 文件?