什么是StatelessWidget?

时间:2019-08-19 22:00:08

标签: flutter dart

当我像下面这样创建一个简单的基本应用程序时,我是在创建一个非显式的StatelessWidget吗?

import 'package:flutter/material.dart';

void main() {
  return runApp(
    MaterialApp(
      home: Scaffold(
         body: Text('HI),
      ),
    ),
  );
}

4 个答案:

答案 0 :(得分:3)

它不是在创建非显式窗口小部件。因此,它既不是无状态的也不是有状态的。

runApp function仅将您的MaterialApp小部件并“附加到屏幕上”,因此您并不是一路创建小部件,而只是使用已经存在的小部件。您的小部件树将从MaterialApp本身开始。


从概念上讲,我也要说,由于您没有空间来处理窗口小部件的状态和/或变量,因此可以将其称为StatelessWidget,因为您无法更改您构建的状态。

  

小部件描述了当前配置和状态后视图的外观。当小部件的状态更改时,小部件会重新构建其描述[...]。 -从Flutter Widgets Intro

在您的示例中,即使您的应用程序树中确实有StatefulWidgets,也没有办法公开该树的状态,没有变量,没有控件,也没有管理。您只是将其他小部件直接传递到您的应用程序。您实际上是将一个小部件树(MaterialApp及其子级)引用到runApp函数。

答案 1 :(得分:1)

尽管显然我们无法与屏幕进行交互,但实际上是在小部件树中,但是我们通过渲染Scaffold来实现有状态小部件。

Scaffold extends StatefulWidget

答案 2 :(得分:1)

无状态小部件是不能更改其状态的小部件,或者其中定义的实例是最终的。并且在您的代码中,您的应用程序状态无法更改。因此,您可以假定它是无状态的小部件,因为在混乱中,所有东西都是小部件。

答案 3 :(得分:0)

无状态小部件 在某些情况下,您将需要创建不需要管理任何内部状态的小部件,而在这里您要使用 StatelessWidget 。此小部件不需要任何可变状态,并且会在最初传递给对象的数据之外的其他时间使用。

  

https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html