美文网首页
Flutter 学习笔记

Flutter 学习笔记

作者: Oceanj | 来源:发表于2019-07-26 15:33 被阅读0次

    最近在学习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 进行调用.

    相关文章

      网友评论

          本文标题:Flutter 学习笔记

          本文链接:https://www.haomeiwen.com/subject/uzmxrctx.html