为啥颤振本地化不能正常工作?
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 文件失败(而在本地工作正常)?