gpt4 book ai didi

Flutter setState 不更新小部件

转载 作者:行者123 更新时间:2023-12-03 03:39:48 27 4
gpt4 key购买 nike

我是 React 开发人员,正在尝试使用 Flutter。

我有如下的有状态小部件

// progress_indicators: ^0.1.2
import 'package:progress_indicators/progress_indicators.dart';

class Login extends StatefulWidget {
@override
_LoginState createState() => _LoginState();
}

class _LoginState extends State<Login> {
var _isLoading = false;

@override
void initState() {
super.initState();
setState(() { _isLoading = false; });
}

@overide
Widget build(BuildContext context) {
body: Container(
child: Column(
children: <Widget>[
Form(),
_isLoading ? JumpingDotsProgressIndicator(
fontSize: 60.0,
): Padding(padding: EdgeInsets.only(top:0))
]
)
)
}

onLogin() async {
final response = await loginUser(_userController.text.trim(), _passController.text.trim());
setState(() { _isLoading = true; });
if(response == true) {
print("User Logging take them to activity");
} else {
setState(() { _isLoading = false; });
bottomModel(response['message']);
}
}
}

JumpingDotsProgressIndicatorprogress_indicators 中的一个方法,它为我提供了一个简单的加载器。

我想在我的 loginUser 方法执行时显示加载程序。 loginUser 是对我的 NodeJS 服务器的简单发布请求。

当单击位于 Form() 中的按钮时,也会调用 onLogin。一切正常,但即使我正在设置状态,加载器也没有显示。

条件渲染我做错了什么?

我还有一个问题

_isLoading ? JumpingDotsProgressIndicator(
fontSize: 60.0,
): Padding(padding: EdgeInsets.only(top:0))

这里我给了 0 填充,这就像一个空小部件所以我也尝试添加 null 代替 Padding(padding: E​​dgeInsets.only( top:0)) 然后在模拟器中显示 Assertion failed

谁也能解释一下原因吗?

致谢!

最佳答案

您好尝试从 initState() 中删除 setState(() { _isLoading = false; }); 否则每次构建新的小部件时,因为状态已更改,它将设置_isLoading 为 false 之前你甚至可以看到预期的行为。简而言之,您的代码永远不会是真实的。

关于Flutter setState 不更新小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57877381/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com