扑动:未处理的异常:无法加载资产:assets/languages/en
flutter: Unhandled Exception: Unable to load asset: assets/languages/en
我正在使用 flutter 本地化,我已经添加了我的语言和参数以翻译为每种语言的 json 文件。语言 json 文件位于名为 asset 的文件夹中像这样的根文件夹
我也在我的 pubspec.yaml 中这样声明了它
这也是我的 en json:
代码
{
"home_title": "Welcome To Tamata! \nThe online supermarket"
}
这是我的 material 应用程序:
MaterialApp(
locale: _locale,
supportedLocales: [
Locale('en', 'US'),
Locale('ar', ''),
// Locale('ar', 'IQ'),
],
localizationsDelegates: [
DemoLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
localeResolutionCallback: (deviceLocale, supportedLocales) {
for (var locale in supportedLocales) {
if (locale.languageCode == deviceLocale.languageCode &&
locale.countryCode == deviceLocale.countryCode) {
return deviceLocale;
}
}
return supportedLocales.first;
},
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Color(0xffba0100),
accentColor: Color(0xff188949),
canvasColor: Colors.grey[100],
textTheme: TextTheme().copyWith(
bodyText1: TextStyle(
color: Colors.white,
fontSize: 17.0,
fontWeight: FontWeight.w700,
),
bodyText2: TextStyle(
color: Colors.white,
),
headline6: TextStyle(
color: Colors.black,
fontSize: 18.0,
),
)),
title: 'Tamata Online',
initialRoute: '/',
routes: {
'/': (ctx) => LoadingScreen(
initScreen), //TODO put it back to be LoadingScreen(initScreen)
TabsScreen.id: (ctx) => TabsScreen(
filteredBySearch: filteredBySearch,
filteredBySpecialSearch: filteredBySpecialSearch,
),
SettingsScreen.id: (ctx) => SettingsScreen(),
CartScreen.id: (ctx) => CartScreen(),
IntroScreen.id: (ctx) => IntroScreen(),
ChooseLanguageScreen.id: (ctx) => ChooseLanguageScreen(),
SpecialOffers.id: (ctx) => SpecialOffers(),
},
),
这是我的本地化演示:
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class DemoLocalizations {
final Locale locale;
DemoLocalizations(this.locale);
static DemoLocalizations of(BuildContext context) {
return Localizations.of<DemoLocalizations>(context, DemoLocalizations);
}
Map<String, String> _localizedValues;
Future load() async {
String jsonStringValues =
await rootBundle.loadString('assets/languages/${locale.languageCode}'); //where it says it has a problem reading my assets/language/en
Map<String, dynamic> mappedJson = jsonDecode(jsonStringValues);
_localizedValues =
mappedJson.map((key, value) => MapEntry(key, value.toString()));
}
String getTranslatedValue(String key) {
return _localizedValues[key];
}
static const LocalizationsDelegate<DemoLocalizations> delegate =
_DemoLocalizationDelegate();
}
class _DemoLocalizationDelegate
extends LocalizationsDelegate<DemoLocalizations> {
const _DemoLocalizationDelegate();
@override
bool isSupported(Locale locale) {
return ['en', 'ar'].contains(locale.languageCode);
}
@override
Future<DemoLocalizations> load(Locale locale) async {
DemoLocalizations localization = DemoLocalizations(locale);
await localization.load();
return localization;
}
@override
bool shouldReload(_DemoLocalizationDelegate old) => false;
}
我做错了什么?
这是错误:
Unable to load asset: assets/languages/en
E/flutter (19559): #0 PlatformAssetBundle.load
由于您的本地化文件是 JSON 格式,您需要将 .json 添加到您的文件路径。
Future load() async {
String jsonStringValues =
await rootBundle.loadString('assets/languages/${locale.languageCode}.json'); // add .json at the end
Map<String, dynamic> mappedJson = jsonDecode(jsonStringValues);
_localizedValues =
mappedJson.map((key, value) => MapEntry(key, value.toString()));
}
我正在使用 flutter 本地化,我已经添加了我的语言和参数以翻译为每种语言的 json 文件。语言 json 文件位于名为 asset 的文件夹中像这样的根文件夹
我也在我的 pubspec.yaml 中这样声明了它
这也是我的 en json:
代码{
"home_title": "Welcome To Tamata! \nThe online supermarket"
}
这是我的 material 应用程序:
MaterialApp(
locale: _locale,
supportedLocales: [
Locale('en', 'US'),
Locale('ar', ''),
// Locale('ar', 'IQ'),
],
localizationsDelegates: [
DemoLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
localeResolutionCallback: (deviceLocale, supportedLocales) {
for (var locale in supportedLocales) {
if (locale.languageCode == deviceLocale.languageCode &&
locale.countryCode == deviceLocale.countryCode) {
return deviceLocale;
}
}
return supportedLocales.first;
},
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Color(0xffba0100),
accentColor: Color(0xff188949),
canvasColor: Colors.grey[100],
textTheme: TextTheme().copyWith(
bodyText1: TextStyle(
color: Colors.white,
fontSize: 17.0,
fontWeight: FontWeight.w700,
),
bodyText2: TextStyle(
color: Colors.white,
),
headline6: TextStyle(
color: Colors.black,
fontSize: 18.0,
),
)),
title: 'Tamata Online',
initialRoute: '/',
routes: {
'/': (ctx) => LoadingScreen(
initScreen), //TODO put it back to be LoadingScreen(initScreen)
TabsScreen.id: (ctx) => TabsScreen(
filteredBySearch: filteredBySearch,
filteredBySpecialSearch: filteredBySpecialSearch,
),
SettingsScreen.id: (ctx) => SettingsScreen(),
CartScreen.id: (ctx) => CartScreen(),
IntroScreen.id: (ctx) => IntroScreen(),
ChooseLanguageScreen.id: (ctx) => ChooseLanguageScreen(),
SpecialOffers.id: (ctx) => SpecialOffers(),
},
),
这是我的本地化演示:
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class DemoLocalizations {
final Locale locale;
DemoLocalizations(this.locale);
static DemoLocalizations of(BuildContext context) {
return Localizations.of<DemoLocalizations>(context, DemoLocalizations);
}
Map<String, String> _localizedValues;
Future load() async {
String jsonStringValues =
await rootBundle.loadString('assets/languages/${locale.languageCode}'); //where it says it has a problem reading my assets/language/en
Map<String, dynamic> mappedJson = jsonDecode(jsonStringValues);
_localizedValues =
mappedJson.map((key, value) => MapEntry(key, value.toString()));
}
String getTranslatedValue(String key) {
return _localizedValues[key];
}
static const LocalizationsDelegate<DemoLocalizations> delegate =
_DemoLocalizationDelegate();
}
class _DemoLocalizationDelegate
extends LocalizationsDelegate<DemoLocalizations> {
const _DemoLocalizationDelegate();
@override
bool isSupported(Locale locale) {
return ['en', 'ar'].contains(locale.languageCode);
}
@override
Future<DemoLocalizations> load(Locale locale) async {
DemoLocalizations localization = DemoLocalizations(locale);
await localization.load();
return localization;
}
@override
bool shouldReload(_DemoLocalizationDelegate old) => false;
}
我做错了什么?
这是错误:
Unable to load asset: assets/languages/en
E/flutter (19559): #0 PlatformAssetBundle.load
由于您的本地化文件是 JSON 格式,您需要将 .json 添加到您的文件路径。
Future load() async {
String jsonStringValues =
await rootBundle.loadString('assets/languages/${locale.languageCode}.json'); // add .json at the end
Map<String, dynamic> mappedJson = jsonDecode(jsonStringValues);
_localizedValues =
mappedJson.map((key, value) => MapEntry(key, value.toString()));
}