Flutter 颤振:未处理的异常:无法加载资源:资源/语言/en

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

我使用的是颤振本地化,我已经添加了我的语言和参数,以便翻译为每种语言的json文件。。语言json文件位于根文件夹中名为asset的文件夹中,如下所示

我也在我的pubspec.yaml中这样声明了它

下面是我的en json代码:

{
  "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