将setState与StatelessWidget一起使用

Jos*_*aza 4 dart flutter

有没有办法将setState与StatelessWidget一起使用?我知道我可以与StatefulWidget一起使用并使用State,但是我不知道是否有一种方法可以与StatelessWidget一起使用。

我认为这是一个直接的问题,不需要显示代码。

如果您能帮助我,我将不胜感激。

小智 17

这是一个使 StatelessWidget 能够自我更新的代码示例,它来自 Didier Boelens 的一篇文章。

https://www.didierboelens.com/2019/09/flutter-internals/ "以下无用的代码使 StatelessWidget 能够自我更新(就像它是一个 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();
                        }
                    ),
                ),
            ),
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

在我们之间,当您调用 setState() 方法时,后者最终会做同样的事情:_element.markNeedsBuild()。


Rém*_*let 9

否。这就是问题的全部StatelessWidget:它没有状态。

只有StatefulWidget一个状态,因此只有一个状态setState