倒入第三方库:

flutter_picker: 1.1.0

github:https://github.com/yangyxd/flutter_picker

flutter_picker的作者提供了多种adapter来处理不同的情况(NumberPickerAdapter,PickerDataAdapter,DateTimePickerAdapter),主要处理数据对应就行了。

简单的封装了下,方便调用;


import 'package:flutter/material.dart';
import 'package:flutter_picker/flutter_picker.dart';
import 'package:percentage_flutter/config/city.dart';
import 'package:percentage_flutter/kit/util/date_util.dart';const double _kPickerSheetHeight = 216.0;
const double _kPickerItemHeight = 32.0;typedef PickerConfirmCityCallback = void Function(List<String> stringData, List<int> selecteds);class PickHelper {///普通简易选择器static void openSimpleDataPicker<T>(BuildContext context, {@required List<T> list,String title,@required T value,PickerDataAdapter adapter,@required PickerConfirmCallback onConfirm,}) {var incomeIndex = 0;if (list != null) {for (int i = 0; i < list.length; i++) {if (list[i] == value) {incomeIndex = i;break;}}}openModalPicker(context,adapter: adapter ??PickerDataAdapter(pickerdata: list,isArray: false,),onConfirm: onConfirm,selecteds: [incomeIndex],title: title);}///数字选择器static void openNumberPicker(BuildContext context, {String title,List<NumberPickerColumn> datas,NumberPickerAdapter adapter,@required PickerConfirmCallback onConfirm,}) {openModalPicker(context,adapter: adapter ?? NumberPickerAdapter(data: datas ?? []),title: title,onConfirm: onConfirm);}///日期选择器static void openDateTimePicker(BuildContext context, {String title,DateTime maxValue,DateTime minValue,DateTime value,DateTimePickerAdapter adapter,@required PickerConfirmCallback onConfirm,}) {openModalPicker(context,adapter: adapter ??DateTimePickerAdapter(type: PickerDateTimeType.kYMD,isNumberMonth: true,yearSuffix: "年",maxValue: maxValue ?? DateUtil.after(year: 20),minValue: minValue ?? DateUtil.before(year: 100),value: value ?? DateTime.now(),monthSuffix: "月",daySuffix: "日"),title: title,onConfirm: onConfirm);}///地址选择器static void openCityPicker(BuildContext context,{String title,@required PickerConfirmCityCallback onConfirm,String selectCity=""}) {var proIndex = 0;var cityIndex = 0;openModalPicker(context,adapter: PickerDataAdapter(data: CityData.asMap().keys.map((provincePos) {var province = CityData[provincePos];List citys = province['city'];return PickerItem(text: Text(province['name'],),value: province['name'],children: citys.asMap().keys.map((cityPos) {var city=citys[cityPos];if(city['name']==selectCity){proIndex=provincePos;cityIndex=cityPos;}return PickerItem(text: Text(city['name']));}).toList());}).toList()),title: title, onConfirm: (pick, value) {var p = CityData[value[0]];List citys = p['city'];onConfirm([p['name'], citys[value[1]]['name']], value);},selecteds: [proIndex,cityIndex]);}static void openModalPicker(BuildContext context, {@required PickerAdapter adapter,String title,List<int> selecteds,@required PickerConfirmCallback onConfirm,}) {new Picker(adapter: adapter,title: new Text(title ?? ""),selecteds: selecteds,cancelText: '取消',confirmText: '确定',cancelTextStyle: TextStyle(color: Colors.black,fontSize: 16.0),confirmTextStyle: TextStyle(color: Colors.black,fontSize: 16.0),textAlign: TextAlign.right,itemExtent: _kPickerItemHeight,height: _kPickerSheetHeight,selectedTextStyle: TextStyle(color: Colors.black),onConfirm: onConfirm,).showModal(context);}
}

其中城市的数据还是要看数据源的格式,CityData是一个城市集合(类似于这样的数据结构)

const CityData=[
{"name": "北京","city": [{"name": "北京", "area": []}]},{"name": "上海","city": [{"name": "上海", "area": []}]},{"name": "天津","city": [{"name": "天津", "area": []}]},{"name": "重庆","city": [{"name": "重庆", "area": []}]},{"name": "浙江","city": [{"name": "杭州", "area": []},{"name": "嘉兴", "area": []},{"name": "宁波", "area": []},{"name": "绍兴", "area": []},{"name": "金华", "area": []},{"name": "湖州", "area": []},{"name": "舟山", "area": []},{"name": "衢州", "area": []},{"name": "温州", "area": []},{"name": "丽水", "area": []},{"name": "台州", "area": []}]}
];

flutter_picker还有dialog等多种弹出方式。

Flutter时间选择器(城市选择器,时间选择器,数量选择器)相关推荐

  1. Android --- 进入页面时,不弹出软键盘。当 EditText 被点击时不弹出软键盘,而是调用其他选择器,比如时间选择器等

    功能需求: 1.进入页面时,不弹出软键盘 2.当 EditText 被点击时不弹出软键盘,而是调用其他选择器,比如时间选择器等 搜索百度测试: 1.百度上说用 editText.setInputTyp ...

  2. DateTimePicker 日期时间选择器设置默认时间

    DateTimePicker 日期时间选择器设置默认时间 default-value属性接受一个数组,第一项为开始时间,第二项为结束时间,时间格式为:"YY-mm-dd HH:mm:ss&q ...

  3. 一款好用的时间控件(时间选择器)-jeDate

    一款好用的时间控件(时间选择器)-jeDate 1.引入jedate.js: 2.上代码 1>方法一 <input class="datainp" id="d ...

  4. vue 日期时间选择器_Vue日期时间选择器

    vue 日期时间选择器 Vue日期时间选择器 (Vue Datetime picker) Vue Datetime picker BY Vladyslav Shchepotin. Vue日期时间选择器 ...

  5. vue 日期选择器默认时间_ant-design-vue 时间选择器赋值默认时间的操作

    我就废话不多说了,大家还是直接看代码吧~ show-time format="YYYY/MM/DD HH:mm:ss" :value="[this.moment(star ...

  6. vue滑动选择器(一键开启时间选择器)

    vue滑动选择器(一键开启时间选择器) 一个vue的滑动选择器(移动端和PC端都能使用) 先来张效果图 安装 npm install time_check_jiangji 引入 import Time ...

  7. html5复合选择器,web前端练习31----Css,选择器(基本选择器,复合选择器,属性选择器,伪类,伪元素,优先级,雪碧图练习)...

    参考文档:https://man.ilovefishc.com/css3/ 一.基本选择器: 1通配符选择器 * 2元素选择器 element 3类选择器 .class 4id选择器 #id 5内联样 ...

  8. html四种选择器的特点,css四种选择器总结

    css 在网页开发中扮演着重要的角色,被誉为网页开发的三剑客,如果说html是人的外在器官部分,那css无疑是各个器官组成在一起然后表现出来,css又称样式重叠在网页排版布局中的地位举足轻重. 做为后 ...

  9. 《HTML 5与CSS 3权威指南(第3版·下册)》——19.4.2 E:enabled伪类选择器与E:disabled伪类选择器...

    19.4.2 E:enabled伪类选择器与E:disabled伪类选择器 q E:enabled伪类选择器用来指定当元素处于可用状态时的样式. q E:disabled伪类选择器用来指定当元素处于不 ...

  10. html选择器有哪些child,css3选择器child有哪些?css3选择器child用法详解

    本篇文章给大家带来的内容是关于css3选择器child有哪些?css3选择器child用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 对于CSS3的结构伪类选择器,为了更好地 ...

最新文章

  1. 精益创新之设计思维研磨——《设计改变一切》书评
  2. 导航菜单(移动出现子菜单)
  3. NodeJs连接Mysql数据库
  4. 混合使用Azure LB和ILB访问相同web服务(3)
  5. VC6 + OpenCV1.0实现图片缩放显示
  6. java在线编辑器_微软开源在线代码编辑器——Monaco Editor
  7. 除了陈真处外的深圳论坛SZ4J
  8. 这个应用魔方厉害了,让软件开发者效率提升10倍
  9. C#.NET学习笔记11,12---布尔表达式2组合,if语句
  10. 每个人都可以创业成功,不要急于求成,慢慢来
  11. 基于visual Studio2013解决C语言竞赛题之0204实数求值
  12. Spring Bean的作用域
  13. 3.SPSS Modeler数据基本分析笔记
  14. esxi6.7 vSAN 运行状况 控制器固件版本 控制器实用程序问题
  15. 一根MicroUSB线完成树莓派zero开机配置(包括SSH以及网络共享)
  16. Redis Client 之 Jedis与Lettuce
  17. 注册快手提示服务器繁忙,快手登录失败怎么回事
  18. Trister Community DAOs最新型DAO架构
  19. shell脚本清理网宿cdn缓存
  20. 悼念!旷视首席科学家孙剑博士去世,享年 45 岁

热门文章

  1. Ant内置任务之defaultexcludes
  2. 一个优秀的网页设计师
  3. 公交行业CPU卡总结(发卡,消费,充值)
  4. nfc卡模式与标准模式_全面解析NFC技术规范及测试要求
  5. Flash使用代码大全
  6. 整理后的IMF国际收支统计年鉴数据(2012-2018年)
  7. 人脸识别 —— 方法
  8. 域名被墙的解决方法?
  9. 不是微型计算机硬件组装需要做到的,微型计算机的硬件组装.ppt
  10. 基于SSM+MySQL+JSP+BootStrap的停车场管理系统