flutter - 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()
解决方案
使用ValueNotifier
和AnimatedBuilder
:
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 将重建其子级。
推荐阅读
- kendo-ui - Kendo MVVM Grid,过滤多选框
- c# - 使用 Visual Studio 2017 构建 FFMPEGINTEROP?
- mongodb - 在辅助 mongodb 中等待读锁的高队列
- python - 在 python 3 中使用换行符将字符串写入 CSV
- scala - 使用 Scala 中的值列表过滤 Spark Dataframe
- mongodb - 计算其他集合中的 _id 出现次数
- google-analytics - amp 分析如何影响同一资产上的多个会话?
- java - 如何遍历多个列表并使用 Java 8 lambda 表达式合并两个列表中的唯一值来创建另一个列表
- mysql - mysql查询结果导出到csv文件的问题
- angular - Angular 6 和 Polyfills.ts