首页 > 解决方案 > setState 依赖于另一个类的值

问题描述

我认为我面临一个小问题。

我想显示一个小部件并根据另一个类的值隐藏它,这是一个小代码,可以解释我的意思。

我曾经Visibility隐藏和显示Hello world消息。

Visibility(
   visible: showAlert().getAlertVisible(),
   child: Text(
           "Hello World"
        ),
    )

showAlert().getAlertVisible()我从另一个班级得到它,它是真还是假。

这是Class

class showAlert{

  bool alertVisible = false;

  void setAlertVisible(bool value){
    alertVisible = value;
  }

  bool getAlertVisible(){
    return alertVisible;
  }

  void show(Duration duration){

    setAlertVisible(false);
    setAlertVisible(true);

    Future.delayed(
        duration,
            (){
          setAlertVisible(false);
        }
    );
  }
}

我的问题:class showAlert由于我不使用而在界面中没有任何变化的值发生变化时,当值变化或实时收听时 我该setState()如何使用?setState()

标签: flutterdartflutter-layout

解决方案


使用ValueNotifierAnimatedBuilder

class ShowAlert{
  ValueNotifier<bool> alertVisible = ValueNotifier(false);

  void show(Duration duration){
    alertVisible.value = true;
    Future.delayed(duration, ()=> alertVisible.value = false);
  }
}
void main() {
  final showAlert = ShowAlert();
  showAlert.show(Duration(seconds: 5));
  runApp(
    MaterialApp(
      home: Scaffold(
        body: AnimatedBuilder(
          animation: showAlert.alertVisible,
          builder: (context, _) {
            return Visibility(
              visible: showAlert.alertVisible.value,
              child: Text("Hello World"),
            );
          },
        ),
      ),
    ),
  );
}

当 ValueNotifier 的值发生变化时,AnimatedBuilder 将重建其子级。


推荐阅读