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 进行调用.

上一篇下一篇

猜你喜欢

热点阅读