flutter - 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)),
),
],),
)
);
}
解决方案
您的变量不是页面状态的一部分,而是构建功能的一部分。每次状态变化时,都会触发构建函数,将变量的值改回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);
推荐阅读
- mysql - 了解不同存储引擎的 MYSQL 集群中的 Sharding
- reactjs - 我如何将我的数组发送到其他组件以做出反应?
- css - material-ui 表单标签位置
- javascript - 如何将行更改为 Angular 材料表上的组件?
- typescript - <: 在打字稿上的字符是什么意思?
- c++ - 在 C++ 中从文件中读取对象时出现问题
- java - 努力连接我的 SQLite db android studio,表没有要插入的列
- ruby-on-rails - 导航 jbuilder 以附加 html 字符串
- github - 雨果主题未加载
- rdma - 我怎样才能检测到 RDMA 读/写的完成