Flutter 颤振:未处理的异常:无法加载资源:资源/语言/en
我使用的是颤振本地化,我已经添加了我的语言和参数,以便翻译为每种语言的json文件。。语言json文件位于根文件夹中名为asset的文件夹中,如下所示 我也在我的pubspec.yaml中这样声明了它 下面是我的en json代码:Flutter 颤振:未处理的异常:无法加载资源:资源/语言/en,flutter,dart,localization,locale,assets,Flutter,Dart,Localization,Locale,Assets,我使用的是颤振本地化,我已经添加了我的语言和参数,以便翻译为每种语言的json文件。。语言json文件位于根文件夹中名为asset的文件夹中,如下所示 我也在我的pubspec.yaml中这样声明了它 下面是我的en json代码: { "home_title": "Welcome To Tamata! \nThe online supermarket" } 这是我的材料应用程序: MaterialApp( locale: _lo
{
"home_title": "Welcome To Tamata! \nThe online supermarket"
}
这是我的材料应用程序:
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;
}
因为您的本地化文件是JSON格式的,所以需要将.JSON添加到文件路径中
Future load()异步{
字符串jsonStringValues=
等待rootBundle.loadString('assets/languages/${locale.languageCode}.json');//最后添加.json
Map mappedJson=jsonDecode(JSonStringValue);
_本地化值=
mappedJson.map((key,value)=>MapEntry(key,value.toString());
}
非常感谢!这对我来说很有效,idk,我以前试过,但没有成功,我把json放在其他地方,但现在它起作用了!谢谢你
Unable to load asset: assets/languages/en
E/flutter (19559): #0 PlatformAssetBundle.load