当前位置: 首页 > 面试题库 >

不使用构造函数将StatefulWidget数据传递给State类

鱼渝
2023-03-14
问题内容

我设法通过构造函数将Stateful类变量的值传递给State类,如下所示:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Demo',
        home: MyHomePage('John', 'Morison'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage(this.fname, this.lname);

  final String fname;
  final String lname;

  @override
  _MyHomePageState createState() => _MyHomePageState(fname, lname);
}

class _MyHomePageState extends State<MyHomePage> {
  _MyHomePageState(this.fname, this.lname);

  final String fname;
  final String lname;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('Hello $fname $lname'),
      )
    );
  }
}

太奇怪了,因为有两个以上的变量,所以我不得不做很多工作。有没有更好的办法?


问题答案:

是的,有widget

从文档:

>       /// The current configuration.
>       ///
>       /// A [State] object's configuration is the corresponding
> [StatefulWidget]
>       /// instance. This property is initialized by the framework before
> calling
>       /// [initState]. If the parent updates this location in the tree to a
> new
>       /// widget with the same [runtimeType] and [Widget.key] as the current
>       /// configuration, the framework will update this property to refer to
> the new
>       /// widget and then call [didUpdateWidget], passing the old
> configuration as
>       /// an argument.
>       T get widget => _widget;
>       T _widget;

代码如下所示:

    import 'package:flutter/material.dart';

    void main() => runApp(MyApp());

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            title: 'Demo',
            home: MyHomePage('John', 'Morison'),
        );
      }
    }

    class MyHomePage extends StatefulWidget {
      MyHomePage(this.fname, this.lname);

      final String fname;
      final String lname;

      @override
      _MyHomePageState createState() => _MyHomePageState();
    }

    class _MyHomePageState extends State<MyHomePage> {

      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Text('Hello ${widget.fname} ${widget.lname}'),
          )
        );
      }
    }


 类似资料:
  • 问题内容: 我的工厂如下 这是Foo的定义: 好。我不确定如何使用Guice将此参数传递给Foo构造函数? 有任何想法吗? 问题答案: 所有“ Guice构造函数参数”答案在某种程度上似乎都不完整。这是一个完整的解决方案,包括用法: //在实现类上注释构造函数和辅助参数 //使用仅接受辅助参数的create()方法创建工厂接口。 // FooFactory接口没有显式的实现类(Guice Magi

  • 我试图将构造函数参数动态传递给Springboot框架中的一个bean。我已经使用context.getBean(class,arg...)在Spring中动态传递构造函数参数,但它没有成功获取值并显示默认值。我的代码有什么问题? 项目结构: 应用程序上下文.xml 应用 活动 输出:

  • 我为什么要这样做?因为lambda表达式生成的ClosureType不是默认可构造的。通过这个“技巧”,我可以默认构造这样的closureType。 此外,模板参数的要求是,它必须为空=>

  • 问题内容: 在处理中,我定义了以下类: 现在,我想创建该类的实例,但是我很难将数组传递给构造函数: 但这总是给我一个错误“意外令牌:{”。因此,显然无法“即时”定义数组。 但是,这将起作用: 但是我发现在对象外部声明该数组是很愚蠢的,因为这会在创建多个对象时带来各种麻烦: 现在,该类的两个实例都引用了相同的数组,这当然不是我想要的。 所以我的问题是:如何在不事先声明数组的情况下将数组正确传递给类的

  • 我创建了一个Author对象,用于构造函数的方法签名:public Book但是,我所做的赋值要求将Author(实例变量)更改为。当然,现在我以前的构造函数不行了。这是密码 如果我上传的方式不令人满意,我对任何不便表示歉意。我还没有学会使用堆栈溢出。 谢谢!

  • 我正在尝试通过:如果流文件; 在我的主()中,到一个名为“FIFO”的类的构造函数:FIFO(文件); 在FIFO(FIFO.h)的头文件中,我有: 在FIFO.cc,我有: 我一直喜欢(还有更多,我只是粘贴其中一个): 在文件包括从/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/…/包含/c /4.4.7/bits/localefwd.h: 43,从/u

  • 问题内容: 考虑以下python代码段 我想知道我是如何能够及格,并以相应的基类的构造函数。 问题答案: 好吧,一般而言,在处理多重继承时,您的基类(不幸的是)应该 设计为多重继承 。类和在你的例子都没有,这样的话你找不到适用有道的。 设计基类以进行多重继承的一种常见方法是,中级基类在其方法中接受他们不打算使用的额外的args ,并将它们传递给调用。 这是在python中执行此操作的一种方法: 这

  • Java枚举允许您将参数传递给构造函数,但我似乎不能传递数组。例如,下面的代码编译时有错误: 但如果将相同的数据作为数组常量传入,则代码将无法编译: 我也尝试过创建新的int[]数组的变体,比如: 没有运气。我认为问题在于传递一个数组常量。我不确定这是一个需要修正的简单语法,还是在传递这种类型的数据时存在一个潜在的问题。提前道谢。