设计给的效果如下:

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

  1. “点击操作”,感应用户选择性别的区域。
  2. “选择性别男”,性别男的选择区域,点击会更新图片和样式。
  3. “选择性别女”,性别女的选择区域,点击会更新图片和样式。

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

第1步:绘制组件树

第2步:实现“点击操作”

首先为性别男和性别女的图文内容搭一个可以点击的区域,等一下把它们俩放在这个区域里来,同时定义一个性别选择的控制器,用来记录用户选择的性别。

import 'package:flutter/material.dart';/// 自定义的性别选择组件。
class GenderSelection extends StatefulWidget {/// 选择性别时的回调函数。final Function selectCallback;GenderSelection({this.selectCallback,});@override_GenderSelectionState createState() => _GenderSelectionState();
}/// 与自定义的性别选择组件关联的状态子类。
class _GenderSelectionState extends State<GenderSelection> {/// 性别选择的控制器,0表示未选择,1表示男人,2表示女人。int _genderController = 0;@overrideWidget build(BuildContext context) {return Row(// 主轴对齐(`mainAxisAlignment`)属性,如何将子组件放在主轴上。mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[// TODO: 第3步:实现“选择性别男”// TODO: 第4步:实现“选择性别女”],);}
}

第3步:实现“选择性别男”

将性别男的选中、未选中图片和文本说明,来组合一个选择性别男的组件,并结合性别选择的控制器来更新图片和文本。

        // TODO: 第3步:实现“选择性别男”GestureDetector(onTap: (){// 选择男人时返回1并更新组件。setState(() {_genderController = 1;widget.selectCallback(_genderController);});},child: Column(children: <Widget>[Image.asset(_genderController == 1? 'assets/icon_male_selected.png': 'assets/icon_male_normal.png',fit: BoxFit.contain,height: 90.0,width: 90.0,),Text('男',style: TextStyle(fontSize: 16.0,color: _genderController == 1? Color(0xFF25C6CA): Color(0xFF4A4A4A),),),],),),

第4步:实现“选择性别女”

与上面选择性别男的组件一样,不过你要在中间插入一个大小框(SizedBox)组件来分离它们,毕竟距离产生美鸭。

        // TODO: 第4步:实现“选择性别女”SizedBox(width: 36.0),GestureDetector(onTap: (){// 选择女人时返回2并更新组件。setState(() {_genderController = 2;widget.selectCallback(_genderController);});},child: Column(children: <Widget>[Image.asset(_genderController == 2? 'assets/icon_female_selected.png': 'assets/icon_female_normal.png',fit: BoxFit.contain,height: 90.0,width: 90.0,),Text('女',style: TextStyle(fontSize: 16.0,color: _genderController == 2? Color(0xFFFF6B47): Color(0xFF4A4A4A),),),],),),

第5步:还原效果

Flutter布局锦囊---男女性别单选相关推荐

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

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

  2. Flutter布局锦囊---绑定手机页

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "顶部导航栏",标题+取消按钮+跳过按钮的应用栏. "手机号输入框",用于获取手机号码的圆角边框输入字 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. Flutter布局锦囊---带输入字段的应用栏

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "堆栈容器",使用大小框(SizedBox)和堆栈(Stack)组件搞的容器,用于实现层次结构. "下层的导航& ...

最新文章

  1. (C++)1008 数组元素循环右移问题
  2. SourceTree的安装
  3. 图灵的秘密:他的生平、思想及论文解读pdf
  4. spring的service不启动事务的配置。
  5. [NOI2021 day1]轻重边(树链剖分),路径交点(矩阵行列式)
  6. 情商低的七种表现,你占了几个
  7. 5.1.8 DELETE删除数据
  8. flutter Radio 单选框
  9. php:两个文件夹递归地比较,没有的文件自动复制过去
  10. python编程正方形面积_编程里面的算法真的很难吗?
  11. 遥感软件_遥感软件的可持续发展
  12. 实战项目之后台管理系统
  13. 《物联网通信》知识提纲-第1章 概述
  14. android手机如何拥有苹果表情包,怎样让安卓emoji显示iPhone的emoji样式
  15. 倾斜摄影技术应用之:自动三维建模对输电线路走廊资源快速调查
  16. VMware虚拟机中安装win10操作系统
  17. 苏州企业申报2019年高新技术企业财务工作如何开展
  18. oracle性能优化简介
  19. 红遍全网的SD-WAN,到底是什么?
  20. 子网掩码和prefixlength

热门文章

  1. A Point-Line Feature based Visual SLAM Method in Dynamic Indoor Scene
  2. 计算机算法设计与分析 找零钱问题
  3. PostgreSQL从未授权到高权限命令执行
  4. Python读取PDF信息插入Word文档
  5. ## CSP 201312-2 ISBN号码(C语言)(100分)
  6. 【已解决】请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记
  7. 使textarea支持tab缩进
  8. Java中文编码转换与字节长度判断
  9. Tina-TI 电路仿真下载、安装、简单功能介绍
  10. stm32F4驱动AD7793程序-ADC模拟前端-应用详解,应该是最全了