首页 > 解决方案 > Flutter:setState 不更新 UI

问题描述

onTap 它打印值,但 setState 在 UI 中没有任何区别,我也在有状态的小部件和内部构建中使用它,我无法找到我犯错的地方,我使用的是颤振 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)),
          ),

        ],),
    )
);

}

标签: flutter

解决方案


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

您需要移动这部分:

  String text = "HEY";

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

到构建功能之外,变成这样:

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);


推荐阅读