Flutter:setState无法更新UI

时间:2020-06-05 18:34:04

标签: flutter

onTap可以打印值,但是setState不会在UI和使用有状态的小部件以及在内部构建中使用im的情况下产生任何区别,我无法弄清我在哪里出错,而我使用的是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)),
          ),

        ],),
    )
);

}

2 个答案:

答案 0 :(得分:1)

您的变量不是页面状态的一部分,它不是构建功能的一部分。每次状态更改时,都会触发构建函数,并变回变量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);

答案 1 :(得分:1)

您不应将变量放在build内。它应该在build函数之外。

class _YourPageState extends State<YourPage> {
    String text = "HEY";

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

    Widget build(BuildContext context) {
      ....
    }
}