Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
Flutter 颤振:无状态小部件能否从其构建方法返回StatefulWidget?_Flutter_Dart - Fatal编程技术网

Flutter 颤振:无状态小部件能否从其构建方法返回StatefulWidget?

Flutter 颤振:无状态小部件能否从其构建方法返回StatefulWidget?,flutter,dart,Flutter,Dart,我想知道如果我定义了一个无状态的小部件,但从它的构建方法返回了一个有状态的小部件,会发生什么?我试过了,一切似乎都正常,但我只想知道幕后发生了什么,这样我就可以确保在我把它投入生产时不会有任何东西损坏。具体而言: 1) 我想知道父无状态小部件的每次重建是否都会触发它返回的StatefulWidget的重建?如果是这样,是不是说我实际上返回了一个无状态小部件 2) 我想知道,如果父无状态小部件仅仅是一个包装器,并且没有任何要呈现的可视元素,那么它是否仍然在小部件树中 3) 如果我想给子Statef

我想知道如果我定义了一个无状态的小部件,但从它的构建方法返回了一个有状态的小部件,会发生什么?我试过了,一切似乎都正常,但我只想知道幕后发生了什么,这样我就可以确保在我把它投入生产时不会有任何东西损坏。具体而言:

1) 我想知道父无状态小部件的每次重建是否都会触发它返回的StatefulWidget的重建?如果是这样,是不是说我实际上返回了一个无状态小部件

2) 我想知道,如果父无状态小部件仅仅是一个包装器,并且没有任何要呈现的可视元素,那么它是否仍然在小部件树中


3) 如果我想给子StatefulWidget一个键,我应该给父StatefulWidget一个相同的键吗?或者,我应该把键放在父无状态小部件上吗?

混合无状态和有状态是一个非常非常常见的用例

答案相对简单:没有什么特别的事情发生

无状态+有状态与无状态*2或有状态*2相同。没有行为改变,也不需要额外的代码

我想知道父无状态小部件的每次重建是否都会触发它返回的StatefulWidget的重建?如果是这样,是不是说我实际上返回了一个无状态小部件

不是。每个小部件都是独立的,可以在不强制其他小部件重建的情况下重建

子级重建不会使父级重建。类似地,父级重建也不一定强制子级重建

我想知道,如果父无状态小部件仅仅是一个包装器,并且没有任何要呈现的可视元素,那么它是否仍然在小部件树中

是的,树中仍然有一个无状态小部件

不,它不仅仅是一个包装器。无状态小部件可以使用继承的小部件并覆盖
=

这些可以导致小部件独立于其他小部件重建。因此,这个小部件必须在树中显示

它甚至有一个
setState
等价物;这不是公开的

如果我想给子StatefulWidget一个键,我应该给父StatefulWidget一个相同的键吗?或者,我应该把密钥放在父控件上吗

不,不需要

如果键位于小部件上,这将影响其整个子树。所以没有必要把它也加在后代身上

事实上,你不能,这取决于钥匙。例如,GlobalKey要求是唯一的