有没有办法在StatelessWidget中使用setState?我知道我可以与StatefulWidget和使用状态一起使用,但我不知道是否有一种方法可以与StatelessWidget一起使用。
我认为这是一个直接的问题,它不需要代码来显示。
如果你能帮助我,我将不胜感激。
发布于 2018-08-09 06:04:56
不是的。这就是StatelessWidget的全部意义所在:它没有状态。
只有StatefulWidget有状态,因此只有它有setState。
发布于 2019-11-05 21:37:07
这是一个可以让StatelessWidget自我更新的代码示例,它来自Didier Boelens的一篇文章。
https://www.didierboelens.com/2019/09/flutter-internals/“下面的无用代码使StatelessWidget能够通过使用BuildContext…来更新自身(就像它是一个StatefulWidget,但不使用任何setState())
void main(){
runApp(MaterialApp(home: TestPage(),));
}
class TestPage extends StatelessWidget {
// final because a Widget is immutable (remember?)
final bag = {"first": true};
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Stateless ??')),
body: Container(
child: Center(
child: GestureDetector(
child: Container(
width: 50.0,`enter code here`
height: 50.0,
color: bag["first"] ? Colors.red : Colors.blue,
),
onTap: (){
bag["first"] = !bag["first"];
//
// This is the trick
//
(context as Element).markNeedsBuild();
}
),
),
),
);
}
}在我们之间,当您调用setState()方法时,后者最终会做同样的事情:_element.markNeedsBuild()。
“
https://stackoverflow.com/questions/51756262
复制相似问题