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

为什么有状态的窗口小部件在flutter中定义为两个类?

宋高寒
2023-03-14
问题内容

我不熟悉Flutter / Dart,因此在尝试制作应用程序时,我还尝试理解为什么事情是特定的。在flutter文档中,有状态小部件的示例代码如下所示:

class YellowBird extends StatefulWidget {
  const YellowBird({ Key key }) : super(key: key);

  @override
  _YellowBirdState createState() => new _YellowBirdState();
}

class _YellowBirdState extends State<YellowBird> {
  @override
  Widget build(BuildContext context) {
    return new Container(color: const Color(0xFFFFE306));
  }
}

问题:

  1. 为什么用两个类而不是一个类来定义它们?我猜State类可以在其他地方使用,所以最好拆分。

  2. 据我了解,该createState()函数返回一个类型的对象State,因此_YellowBirdState extends State有意义,但是为什么将其YellowBird传递给的泛型类State呢?我的猜测与Yellowbird扩展StatefulWidget类有关,但不确定。


问题答案:

有多种原因:

  • 小部件是不可变的。由于StatefulWidget扩展Widget,因此它也必须是不变的。将声明分为两个类可以使它们既StatefulWidget不变又 State可变。

  • 使用语法实例化窗口小部件new MyWidget()。如果我们将两个类合并为一个,new MyWidget()则每次其父级更新时,都会重置该状态的所有属性。

至于解释 class _MyStatefulState extends State<MyStateful>

那是因为State该类可以Stateful使用该this.widget字段访问它的一部分。泛型在这里使该类型的字段MyStateful而不是just
StatefulWidget。您可能要访问MyStateful属性。



 类似资料:
  • 问题内容: 即使在指定Container GridView的高度之后,我的代码仍在生成方形小部件。 上面代码的输出如左图所示。如何获得带有自定义高度小部件的GridView ,如右图所示? 问题答案: 关键是。这个值是用来确定的布局在。为了获得所需的外观,您必须将其设置为 ()。解决方案是这样的:

  • 有状态小部件被定义为在其生命周期内改变其状态的任何小部件。但是,将作为它的一个子元素是非常常见的做法。如果作为其子元素之一,,它不是变成有状态的吗? 我试图将文档作为代码的一部分进行查看,但无法弄清楚如何具有作为其子级,并且仍然保持。 Flutter中有状态和无状态小部件之间的关系和区别是什么?

  • 问题内容: 为什么B类无法公开?如何在其他班级使用班级?在Cons中定义它更好吗? 问题答案: 根据Java语言规范,文件(.java)中只能有一个公共类,并且文件名应与公共类名相同。 如果希望在其他地方访问B类,则可以创建一个单独的B.java文件,然后将B类代码移至该文件。 该线程可以为您提供更多信息。

  • 我正在尝试创建一个非常简单的应用程序,当点击中心小部件时,列表中的元素会显示出来。 这是我的代码: 没有显示任何错误,但同时,我的目标没有达到,因为没有显示任何文本,即使我添加了这个代码打印(yourList[randomIndex]),也不会在终端中打印任何内容;。我如何显示文本,并使打印出现?

  • 有一个Android应用程序是实现与和我在其他应用程序中实现相同的功能写在但ionic文件大小只有。具有类似功能的flutter(实现仍然不完整)文件大小为。 我有以下问题: > 我想知道是什么让我的apk变得更大? 这可能与代码实现或其他方面有关吗? 有人帮我减少应用程序大小吗?

  • 问题内容: 当我尝试使用以下代码将左上角的窗口图标从难看的红色“ TK”更改为我自己的收藏夹图标时,Python抛出错误: 这应该将图标设置为“ favicon.ico”(根据网络上的许多论坛帖子)。但是不幸的是,所有这些行所做的只是抛出以下错误: 我已经做了: 我检查了路径-一切都是100%正确 我尝试了其他文件格式,例如-或均无效 我在许多网站上查询了这个问题 第三点,我最喜欢的Tkinter

  • 问题内容: 编辑: 从Java 8开始,接口中现在允许使用静态方法。 例子如下: 当然这行不通。但是为什么不呢? 可能的问题之一是,当你致电时会发生什么: 在这种情况下,我认为它应该只调用一个空方法(即{})。所有子类都将被强制实现static方法,因此在调用static方法时它们都很好。那为什么不可能呢? 编辑:我想我正在寻找比“因为这就是Java的方式”更深的答案。 有特定的技术原因为什么不能