设计给的效果如下:

拿到设计后,先把整体拆分成几个部分:

  1. “顶部导航栏”,标题+取消按钮+跳过按钮的应用栏。
  2. “手机号输入框”,用于获取手机号码的圆角边框输入字段。
  3. “验证码输入框”,用于获取验证码的圆角边框输入字段,还包括获取验证码的按钮。
  4. “提交按钮”,在满足条件后让用户点击的提交按钮。

然后就可以开始进行编码了。

第1步:绘制组件树

第2步:实现“顶部导航栏”

下面的代码导入了一堆东西,大概说一下都是些什么吧。../common/first_navigation.dart是《Flutter布局锦囊—简单的应用栏》,不过针对这个需求做了一些小改动。../common/doodle_button.dart是《Flutter布局锦囊—涂鸦风格按钮》。../common/round_form_field.dart是《Flutter布局锦囊—圆框的表单字段》。widgets/login_form_code.dart是《Flutter布局锦囊—验证码倒计时》。

import 'package:flutter/material.dart';
import '../common/first_navigation.dart';
import '../common/doodle_button.dart';
import '../common/round_form_field.dart';
import 'widgets/login_form_code.dart';/// 自定义的绑定页面组件。
class Binding extends StatefulWidget {@override_BindingState createState() => _BindingState();
}

下面代码的主体是《Flutter布局锦囊—简单的应用栏》中自定义的一级导航(firstNavigation)组件,不过这里你要把行动(actions)和主导(leading)属性设置成可以配置的,如果没有则为空值(null)。

/// 与自定义的绑定页面组件关联的状态子类。
class _BindingState extends State<Binding> {/// 手机号表单字段的控制器。final _phoneController = TextEditingController();/// 验证码表单字段的控制器。final _codeController = TextEditingController();/// 发送验证码按钮是否可用。bool _codeAvailable = false;/// 手机号表单字段是否符合格式。bool _phoneActivation = false;/// 验证码表单字段是否符合格式。bool _codeActivation = false;@overrideWidget build(BuildContext context) {return Scaffold(appBar: firstNavigation('绑定手机',// 墨水瓶(`InkWell`)组件,响应触摸的矩形区域。leading: InkWell(child: Text('  取消  ',style: TextStyle(color: Color(0xFF777777),fontSize: 16.0,),),onTap: (){Navigator.of(context).pop();},),actions: InkWell(child: Text('  跳过  ',style: TextStyle(color: Color(0xFFFF6B47),fontSize: 16.0,),),onTap: (){Navigator.of(context).pushNamedAndRemoveUntil('/', (Route<dynamic> route) => false);},),),body: ListView(padding: EdgeInsets.symmetric(horizontal: 20.0),children: <Widget>[// TODO: 第3步:实现“手机号输入框”// TODO: 第4步:实现“验证码输入框”// TODO: 第5步:实现“提交按钮”],),);}
}

第3步:实现“手机号输入框”

下面代码的主体是《Flutter布局锦囊—圆框的表单字段》中自定义的圆框表单字段(RoundFormField)组件。这个就可以直接使用了,不用像上面那一步修改代码。

          // TODO: 第3步:实现“手机号输入框”Container(padding: EdgeInsets.symmetric(vertical: 20.0),child: Text('绑定手机后可以直接使用手机号码登录',style: TextStyle(color: Color(0xFF777777),fontSize: 14.0,),),),RoundFormField(hintText: '请输入手机号',textEditingController: _phoneController,checkCallback: (value){if(value.trim().length == 11) {_codeAvailable = true;_phoneActivation = true;} else {_codeAvailable = false;_phoneActivation = false;}setState(() {});},),SizedBox(height: 20),

第4步:实现“验证码输入框”

下面代码的主体是《Flutter布局锦囊—圆框的表单字段》中自定义的圆框表单字段(RoundFormField)组件,再佐以《Flutter布局锦囊—验证码倒计时》中自定义的倒计时(LoginFormCode)组件作为调料。它们共同完成了验证码输入框。

          // TODO: 第4步:实现“验证码输入框”Stack(children: <Widget>[RoundFormField(hintText: '请输入验证码',textEditingController: _codeController,checkCallback: (value){if(value.trim().length == 6) {_codeActivation = true;} else {_codeActivation = false;}setState(() {});},),// 对齐(`Align`)组件,用于将其子项与其自身对齐,并根据子级的大小自行调整大小。Align(// 高度因子(`heightFactor`)属性,如果为非空值,则将其高度设置为子组件高度乘以此系数。heightFactor: 2.0,// 对准(`alignment`)属性,如何调整子组件。alignment: Alignment.centerRight,child: LoginFormCode(countdown: 60,available: _codeAvailable,onTapCallback: () {// 根据需求写提交的过程以及后续操作~},),),],),

第5步:实现“提交按钮”

下面代码的主体是《Flutter布局锦囊—涂鸦风格按钮》中自定义的涂鸦按钮(DoodleButton)组件,注意要通过setState(() {});来改变按钮的可点击状态。

        // TODO: 第5步:实现“提交按钮”SizedBox(height: 40),DoodleButton(promptText: '绑定',activation: _phoneActivation && _codeActivation,onTapCallback: (){setState(() {_codeActivation = false;});// 根据需求写提交的过程以及后续操作~setState(() {_codeActivation = true;});},),

第6步:还原效果

Flutter布局锦囊---绑定手机页相关推荐

  1. Flutter布局锦囊---完善信息页

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "用户昵称输入",获取用户输入的昵称信息. "用户头像选取",获取用户选取作为头像的图片. " ...

  2. Flutter布局锦囊---手机号登录页

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "运营位",使用自定义的旋转木马滑块组件实现可以滚动的运营位. "登录表单",使用自定义的登录表单组件 ...

  3. Flutter布局锦囊---蜡笔画的表单

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "手机号输入框",使用自定义的登录表单字段组件实现的输入框. "验证码输入框",使用自定义的登录表单验 ...

  4. Flutter布局锦囊---带彩条的文本字段

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "文本输入框",使用文本字段(TextField)组件实现的输入框. "状态指示条",使用容器(Con ...

  5. Flutter布局锦囊---涂鸦风格按钮

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "可点击框",使用堆栈(Stack)组件布局的可点击区域. "底部矩形",用来衬托"主要矩形 ...

  6. Flutter布局锦囊---轮播图片与滑块

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "运营位",可以通过左右滑动来切换图片. "进度条",显示"运营位"当前位置的进度 ...

  7. Flutter布局锦囊---有背景图的头像选择

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "获取相册图片",Flutter团队开发的图片选择器(image_picker)插件,从手机相册中获取图片. " ...

  8. Flutter布局锦囊---圆框的表单字段

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "黑色圆角边框",因为文本字段(TextField)组件的没有符合需求的样式,所以要自己做一个边框. "文本输入 ...

  9. Flutter布局锦囊---男女性别单选

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "点击操作",感应用户选择性别的区域. "选择性别男",性别男的选择区域,点击会更新图片和样式. &q ...

最新文章

  1. linux java平台,如何下载和安装用于 Linux 平台的 Java
  2. jquery学习手记(7)Data_utility_index方法
  3. node-inspector 在chrome里调试node代码
  4. SAP 销售云支持的丰富的报表显示类型
  5. python实现手机号归属地相关信息查询
  6. 【jQuery笔记Part1】07-jQuery操作css-添加删除切换类、开关灯泡案例
  7. UVM入坑系列笔记(一)
  8. function core.php is missing,PHP代码
  9. 相机模型与标定(八)--传统相机标定算法简介
  10. ic启动器怎么导入模组_icmod模组管理器最新版下载-ICMOD管理器(Inner Core)下载v1.5-阵 安卓版-西西软件下载...
  11. 《我的眼睛--图灵识别》第九章:训练:制作识别字库
  12. Mac改变系统截图存储路径
  13. 数据可视化~matplotlib显示多个子图
  14. Docker从0到1
  15. 关于虚拟机的十个基本小技巧
  16. Win10家庭版Hyper-V出坑(完美卸载,冲突解决以及Device Guard问题)
  17. Mole and Abandoned Mine
  18. 计算机组成原理-算术逻辑单元ALU
  19. IC卡电表及用电信息管理系统
  20. 航空母舰与钢铁侠助阵,这么硬核的智能锁你见过么

热门文章

  1. N---Exponentiation
  2. Excel Cookbook by Eric
  3. 轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)
  4. 如何运行从github拉取的vue项目
  5. 【编程珠玑】第十二章 取样问题
  6. kubernetes集群应用部署实例
  7. leetCode-数组:Remove Duplicates from Sorted Array
  8. springmvc 监听器getWriter() has already been called for this response问题
  9. Android 使用Webview时,有时抛 java.lang.Throwable: EventHub.removeMessages(int what = 107) warning...
  10. 求职历程之-----我的求职信