• picker 选择器


    先上效果图

       

    单列选择器
    var aa = ["11","22","33","44"];

    PickerTool.showStringPicker(context,
      data: aa,
      // normalIndex: 2,
      // title: "请选择2",
      clickCallBack: (int index,var str){
        print(index);
        print(str);
      }
    );

    多列选择器
    var bb = [["11","22"],["33","44"],["55","66"]];

    PickerTool.showArrayPicker(context,
      data: bb,
      // title: "请选择2",
      // normalIndex: [0,1,0],
      clickCallBack:(var index, var strData){
        print(index);
        print(strData);
      }
    );

    日期选择器
    PickerTool.showDatePicker(context,
      // dateType: DateType.YMD,
      // dateType: DateType.YM,
      // dateType: DateType.YMD_HM,
      // dateType: DateType.YMD_AP_HM,
      // title: "请选择2",
      // minValue: DateTime(2020,10,10),
      // maxValue: DateTime(2023,10,10),
      // value: DateTime(2020,10,10),
      clickCallback: (var str,var time){
        print(str);
        print(time);
      }
    );

    PickerTool.dart 代码

    import 'package:flutter/material.dart';
    import 'package:flutter_picker/flutter_picker.dart';
    import 'package:date_format/date_format.dart';

    import './utils.dart';

    final double kPickerHeight = Screen.width(216.0);
    const double kItemHeight = 40.0;
    const Color kBtnColor = Color(0xFF323232);//50
    const Color kTitleColor = Color(0xFF787878);//120
    const double kTextFontSize = 17.0;

    typedef StringClickCallback = void Function(int selectIndex,Object selectStr);
    typedef ArrayClickCallback = void Function( List<int> selecteds,List<dynamic> strData);
    typedef DateClickCallback = void Function(dynamic selectDateStr,dynamic selectDate);

    enum DateType {
    YMD, // y, m, d
    YM, // y ,m
    YMD_HM, // y, m, d, hh, mm
    YMD_AP_HM, // y, m, d, ap, hh, mm
    }

    class PickerTool {

    /** 单列 **/
    static void showStringPicker<T>(
    BuildContext context, {
    @required List<T> data,
    String title,
    int normalIndex,
    PickerDataAdapter adapter,
    @required StringClickCallback clickCallBack,
    }) {

    openModalPicker(context,
    adapter: adapter ?? PickerDataAdapter( pickerdata: data, isArray: false),
    clickCallBack:(Picker picker, List<int> selecteds){
    // print(picker.adapter.text);
    clickCallBack(selecteds[0],data[selecteds[0]]);
    },
    selecteds: [normalIndex??0] ,
    title: title);
    }

    /** 多列 **/
    static void showArrayPicker<T>(
    BuildContext context, {
    @required List<T> data,
    String title,
    List<int> normalIndex,
    PickerDataAdapter adapter,
    @required ArrayClickCallback clickCallBack,
    }) {
    openModalPicker(context,
    adapter: adapter ?? PickerDataAdapter( pickerdata: data, isArray: true),
    clickCallBack:(Picker picker, List<int> selecteds){
    clickCallBack(selecteds,picker.getSelectedValues());
    },
    selecteds: normalIndex,
    title: title);

    }


    static void openModalPicker(
    BuildContext context, {
    @required PickerAdapter adapter,
    String title,
    List<int> selecteds,
    @required PickerConfirmCallback clickCallBack,
    }) {
    new Picker(
    adapter: adapter,
    title: new Text(title ?? "请选择",style:TextStyle(color: kTitleColor,fontSize: kTextFontSize)),
    selecteds: selecteds,
    cancelText: '取消',
    confirmText: '确定',
    cancelTextStyle: TextStyle(color: kBtnColor,fontSize: kTextFontSize),
    confirmTextStyle: TextStyle(color: kBtnColor,fontSize: kTextFontSize),
    textAlign: TextAlign.right,
    itemExtent: kItemHeight,
    height: kPickerHeight,
    selectedTextStyle: TextStyle(color: Colors.black),
    onConfirm:clickCallBack
    ).showModal(context);
    }


    /** 日期选择器 **/
    static void showDatePicker(
    BuildContext context, {
    DateType dateType,
    String title,
    DateTime maxValue,
    DateTime minValue,
    DateTime value,
    DateTimePickerAdapter adapter,
    @required DateClickCallback clickCallback,
    }) {

    int timeType;
    if(dateType == DateType.YM){
    timeType = PickerDateTimeType.kYM;
    }else if(dateType == DateType.YMD_HM){
    timeType = PickerDateTimeType.kYMDHM;
    }else if(dateType == DateType.YMD_AP_HM){
    timeType = PickerDateTimeType.kYMD_AP_HM;
    }else{
    timeType = PickerDateTimeType.kYMD;
    }

    openModalPicker(context,
    adapter: adapter ??
    DateTimePickerAdapter(
    type: timeType,
    isNumberMonth: true,
    yearSuffix: "年",
    monthSuffix: "月",
    daySuffix: "日",
    strAMPM: const["上午", "下午"],
    maxValue: maxValue ,
    minValue: minValue,
    value: value ?? DateTime.now(),
    ),
    title: title,
    clickCallBack:(Picker picker, List<int> selecteds){

    var time = (picker.adapter as DateTimePickerAdapter).value;
    var timeStr;
    if(dateType == DateType.YM){
    timeStr =time.year.toString()+"年"+time.month.toString()+"月";
    }else if(dateType == DateType.YMD_HM){
    timeStr =time.year.toString()+"年"+time.month.toString()+"月"+time.day.toString()+"日"+time.hour.toString()+"时"+time.minute.toString()+"分";
    }else if(dateType == DateType.YMD_AP_HM){
    var str = formatDate(time, [am])=="AM" ? "上午":"下午";
    timeStr =time.year.toString()+"年"+time.month.toString()+"月"+time.day.toString()+"日"+str+time.hour.toString()+"时"+time.minute.toString()+"分";
    }else{
    timeStr =time.year.toString()+"年"+time.month.toString()+"月"+time.day.toString()+"日";
    }
    // print(formatDate(DateTime(1989, 02, 21), [yyyy, '-', mm, '-', dd]));
    clickCallback(timeStr,picker.adapter.text);

    }

    );

    }
    }
  • 相关阅读:
    JavaStript基础 —— JavaStript语法
    JS拖动滑块验证
    解释型语言和编译型语言、弱类型语言和强类型语言、动态语言和静态语言的区别
    user-select 用户禁止选中
    短地址
    JS实现 Tab栏切换案例
    setAttribute()方法和 getAttribute() 方法
    JS 全局作用域和局部作用域
    数组遍历 forEach 方法
    十进制小数转换为二进制
  • 原文地址:https://www.cnblogs.com/zhaofeis/p/12505473.html
Copyright © 2020-2023  润新知