Flutter 学习笔记
2019-07-26 本文已影响0人
Oceanj
最近在学习Flutter, 想把学习过程中遇到的难点记录下来.
1. 如何禁用Button.
开发中经常会遇到禁用button的情况,比如登录时如果未输入账号或密码则button不可用, flutter 中并没有专门的属性来禁用button.而是将按钮点击事件 onPressed
设置为null
来禁用button属性,示例代码如下:
child:RaisedButton(
child: Text("登录"),
color: Colors.blue,
textColor: Colors.white,
disabledColor: Color(0xFF90A4AE),
disabledTextColor: Colors.white,
splashColor: Colors.blue,
onPressed: (_nameEditingController.text.length == 0 || _pwdEditingController.text.length == 0) ? null : () {
this.login(username: _nameEditingController.text, password: _pwdEditingController.text);
},
)
其中_nameEditingController
和_pwdEditingController
是用来监听账号和密码的输入.这里先判断 账号或密码是否为空(_nameEditingController.text.length == 0 || _pwdEditingController.text.length == 0)
,为空返回null
不为空则点击进行登录操作.
监听代码如下:
@override
void initState() {
super.initState();
_progressHUD = new MyProgressHUD(
content: '登录中...',
);
void listenEdit() {
setState(() {
});
}
_nameEditingController.addListener(listenEdit);
_pwdEditingController.addListener(listenEdit);
}
注册监听方法listenEdit, 只要输入框有变化则会调用setState, 继而刷新按钮状态.
2. 如何使用 async await Future
之前从来没使用过类似的语法, 所以对此不是很理解,经过一翻学习, 个人认为将异步操作交给Future, Future会在未来给我们结果.
先上个例子:
class LoginAPI {
Future<bool> loginRequest({String username,String password}) async{
try {
Response response = await Dio().get("http://wwww.baidu.com");
print(response);
return (response.data != null);
} catch (e) {
print(e);
return false;
}
}
}
使用await
调用接口后, 必须将将此方法声明为 async
. 成对出现; await
操作除了表示异步等待结果,同时也表示将Future
数据进行解包, 所以返回值为Response
类型.另外只有返回类型为Future
的函数,才能用await
进行调用.