Flutter:setState 不更新 UI

Gau*_*dar 4 flutter

onTap 它打印值,但 setState 在 UI 中没有任何区别,我在有状态小部件和内部构建中也使用它,我无法得到我犯错误的地方,并且我使用 flutter beta。

Widget build(BuildContext context) {

String text = "HEY";

void bb(){
  print('Clicked Clicked');
  setState(() {
    text = "HEY2";
  });
}

return Scaffold(
  body: Container(
      decoration: BoxDecoration(
        image:  DecorationImage(image: new AssetImage("assets/floor.jpg"), fit: BoxFit.cover,),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Center(
            child: Text(
              'HELLO, WORLD!', 
              style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold), 
              textScaleFactor: 6,),
          ),
          Divider(height: 80),
          GestureDetector(
            onTap: (){
              bb();
            },
            child: Text(text, style: TextStyle(color: Colors.red)),
          ),

        ],),
    )
);
Run Code Online (Sandbox Code Playgroud)

}

Gui*_*ini 11

您的变量不是页面状态的一部分,而是构建函数的一部分。每次状态发生变化时,都会触发构建函数,将变量的值改回text

您需要移动这部分:

  String text = "HEY";

    void bb(){
      print('Clicked Clicked');
      setState(() {
        text = "HEY2";
      });
    }
Run Code Online (Sandbox Code Playgroud)

到构建函数之外,变成这样:

class _MyHomePageState extends State<MyHomePage> {
    String text = "HEY";

    void bb(){
      print('Clicked Clicked');
      setState(() {
        text = "HEY2";
      });
    }
  @override
  Widget build(BuildContext context) {

    List<bool> _selections = List.generate(3, (index) => false);

Run Code Online (Sandbox Code Playgroud)