当我像下面这样创建一个简单的基本应用程序时,我是在创建一个非显式的StatelessWidget
吗?
import 'package:flutter/material.dart';
void main() {
return runApp(
MaterialApp(
home: Scaffold(
body: Text('HI),
),
),
);
}
答案 0 :(得分:3)
它不是在创建非显式窗口小部件。因此,它既不是无状态的也不是有状态的。
runApp function仅将您的MaterialApp
小部件并“附加到屏幕上”,因此您并不是一路创建小部件,而只是使用已经存在的小部件。您的小部件树将从MaterialApp
本身开始。
从概念上讲,我也要说,由于您没有空间来处理窗口小部件的状态和/或变量,因此可以将其称为StatelessWidget
,因为您无法更改您构建的状态。
小部件描述了当前配置和状态后视图的外观。当小部件的状态更改时,小部件会重新构建其描述[...]。 -从Flutter Widgets Intro
在您的示例中,即使您的应用程序树中确实有StatefulWidgets
,也没有办法公开该树的状态,没有变量,没有控件,也没有管理。您只是将其他小部件直接传递到您的应用程序。您实际上是将一个小部件树(MaterialApp
及其子级)引用到runApp函数。
答案 1 :(得分:1)
尽管显然我们无法与屏幕进行交互,但实际上是在小部件树中,但是我们通过渲染Scaffold来实现有状态小部件。
答案 2 :(得分:1)
无状态小部件是不能更改其状态的小部件,或者其中定义的实例是最终的。并且在您的代码中,您的应用程序状态无法更改。因此,您可以假定它是无状态的小部件,因为在混乱中,所有东西都是小部件。
答案 3 :(得分:0)
无状态小部件 在某些情况下,您将需要创建不需要管理任何内部状态的小部件,而在这里您要使用 StatelessWidget 。此小部件不需要任何可变状态,并且会在最初传递给对象的数据之外的其他时间使用。
https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html