Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Internationalization 如何在Flutter中将国际化对象传递给子小部件_Internationalization_Dart_Flutter - Fatal编程技术网

Internationalization 如何在Flutter中将国际化对象传递给子小部件

Internationalization 如何在Flutter中将国际化对象传递给子小部件,internationalization,dart,flutter,Internationalization,Dart,Flutter,刚刚开始使用flatter/dart,正在进行PHP转换,正在努力找出如何将类传递到小部件中 我正在使用flutter创建我的第一个android和iOS应用程序 我正在使用国际化,在我的初始构建页面上,使用我拥有的国际化类,一切都很好。但是,当将其传递到另一个小部件时,我得到: NoSuchMethodError:调用getter textTitle时为null。 接收方:空 尝试呼叫:textTitle 最好的处理方法是什么 颤振医生 [✓] Flutter (Channel beta,

刚刚开始使用flatter/dart,正在进行PHP转换,正在努力找出如何将类传递到小部件中

我正在使用flutter创建我的第一个android和iOS应用程序

我正在使用国际化,在我的初始构建页面上,使用我拥有的国际化类,一切都很好。但是,当将其传递到另一个小部件时,我得到:

NoSuchMethodError:调用getter textTitle时为null。
接收方:空
尝试呼叫:textTitle

最好的处理方法是什么

颤振医生

  [✓] Flutter (Channel beta, v0.1.5, on Mac OS X 10.13.3 17D47, locale en-US)
  [✓] Android toolchain - develop for Android devices (Android SDK 27.0.1)
  [✓] Android Studio (version 3.0)
  [✓] Connected devices (1 available)
本地化省道

class HnLocalizations{
        HnLocalizations(this.locale);

        final Locale locale;

        static HnLocalizations of(BuildContext context){
            return Localizations.of<HnLocalizations>(context, HnLocalizations);
        }

        static Map<String, Map<String, String>> _localizedValues = {
            'en': {
                'btnLabelLoginS1': 'Login',
                'btnLabelRegisterS1': 'Sign Up'
            },
        ;

        String get s1ButtonLabelLogin =>
            _localizedValues[locale.languageCode]['btnLabelLoginS1'];

class HnLocalizationsDelegate extends LocalizationsDelegate<HnLocalizations> {
        const HnLocalizationsDelegate();

        @override
        bool isSupported(Locale locale) => ['en', 'es'].contains(locale.languageCode);

        @override
        Future<HnLocalizations> load(Locale locale) =>
            new SynchronousFuture<HnLocalizations>(new HnLocalizations(locale)); //HnLocalizations.load(locale);

        @override
        bool shouldReload(HnLocalizationsDelegate old) => false;
    }
void main() {

        runApp(new MaterialApp(
            localizationsDelegates: [
                const HnLocalizationsDelegate(),
                GlobalMaterialLocalizations.delegate,
                GlobalWidgetsLocalizations.delegate,
            ],
            supportedLocales: [
                const Locale('en', 'US'), /// Americans
                const Locale('en', 'GB') /// Brits
            ],
            title: 'HN',
            home: new EntryPage(),
        ));

    }

    class EntryPage extends StatelessWidget {

       final HnColors _hnColors = new HnColors();

        @override
        Widget build(BuildContext context) {

            return new Scaffold(
                appBar: new AppBar(
                    // !!!**** THIS WORKS AS EXPECTED ****!!!!
                    title: new Text(HnLocalizations.of(context).s1ButtonLabelLogin),
                    backgroundColor: _hnColors.transparent(),
                    elevation: 0.0,
                ),
                backgroundColor: _hnColors.accent(),
                body: new Container(
                    decoration: new BoxDecoration(
                        image: new DecorationImage(
                            image: new AssetImage("assets/Background_World.png"),
                            fit: BoxFit.fitWidth,
                        ),
                    ),
                    child: new PanelArea(),
                )
            );
        }
    }


    class PanelArea extends StatelessWidget {

        @override
        Widget build(BuildContext context) {

            HnColors _hnColors = new HnColors();

            return new Container(
                child: new Center(
                    child: new Container(
                        decoration: new BoxDecoration(
                            borderRadius: new BorderRadius.circular(15.0),
                            color: _hnColors.transparent()
                        ),
                        child: new Column(
                            children: [
                                new Image.asset('assets/Icon_Intro_login'),
                                new Text(
                                    // !!!**** ERROR IS HERE ****!!!!
                                    HnLocalizations.of(context).s1M1HeaderTitle,
                                    style: new TextStyle(
                                        color: _haillioColors.white()
                                    ),
                                ),
最好的处理方法是什么

更新日期:2018年3月11日 我发现如果我将所有代码移到main.dart文件中。所有本地化工作正常。然而,当我将我的小部件移动到一个单独的dart文件中时,错误会再次出现,即使所有代码都是相同的

更新日期:2018年3月12日 (谢谢)指出了正确的方向。这个问题与进口有关,而进口是解决问题的办法,这对我来说是有效的。下面的答案中添加了示例

指出了一个解决方案,该解决方案与给我造成问题的原因有关

本地化.dart
文件导入中,我有:

import 'package:hn/hnLocalization.dart';
import 'hnLocalization.dart';
main.dart
文件导入中,我有:

import 'package:hn/hnLocalization.dart';
import 'hnLocalization.dart';
这些与描述的不一样

确保使用相对路径和包导入所有文件解决了此问题。区别在于我的文件,而不是依赖项使用相对路径。那部分一开始很难理解

现在,我的
本地化.dart
文件具有以下内容

import 'hnLocalization.dart'; // <--- Using relative Path

class PanelArea extends StatelessWidget {

        @override
        Widget build(BuildContext context) { ...

        child: new Column(
            children: [
                new Image.asset('assets/Icon_Intro_login'),

                // This Now Works --->
                new Text(HnLocalizations.of(context).s1M1HeaderTitle,
            ] 
       ...
导入“hnLocalization.dart”;//
新文本(HnLocalizations.of(context).s1M1HeaderTitle,
] 
...

现在一切正常。

可能重复您不使用package:intl?相对paht解决方案不适用于我任何其他想法?或完整的示例代码?@fvisticot您不能将相对路径导入与包导入混合使用。它们需要在任何地方都保持一致。导入“path/to/file”与导入“package:path/to/file”不同在你的项目中坚持使用1种导入方法。这就是我所要解决的问题。Tx,在项目中的任何地方只使用相对路径来解决问题。