我对开发人员尝试抖动感到反应。
我有如下状态的小部件
// 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']);
}
}
}
JumpingDotsProgressIndicator
是progress_indicators
中的一种方法,为我提供了一个简单的加载程序。
我想在loginUser
方法执行过程中显示加载程序。 loginUser
是到我的NodeJS服务器的简单请求。
当单击位于onLogin
中的按钮时,也会调用Form()
。
一切正常,但是即使我设置了状态,加载程序也没有显示。
条件渲染在做什么?
我还有一个问题
_isLoading ? JumpingDotsProgressIndicator(
fontSize: 60.0,
): Padding(padding: EdgeInsets.only(top:0))
在这里,我给0
填充,就像一个空窗口小部件,因此我也尝试添加null
代替Padding(padding: EdgeInsets.only(top:0))
,然后在模拟器中显示Assertion failed
有人能解释一下原因吗?
感谢adv!
答案 0 :(得分:1)
您好尝试从setState(() { _isLoading = false; });
中删除initState()
,否则每次小部件由于状态更改而构建新的东西时,它将_isLoading设置为false,甚至无法看到预期的行为。简而言之,您的状态永远不会正确。