Skip to content

Picker 选择器

代码演示

import 'package:antd_flutter_example/demo_block.dart';
import 'package:flutter/widgets.dart';
import 'package:trionesdev_antd_mobile/trionesdev_antd_mobile.dart';

class PickerPage extends StatefulWidget {
  const PickerPage({super.key});

  @override
  State<StatefulWidget> createState() => _PickerPageState();
}

class _PickerPageState extends State<PickerPage> {
  final List<AntPickerOption> _options1 = [
    AntPickerOption(label: "周一", value: "Mon"),
    AntPickerOption(label: "周二", value: "Tues"),
    AntPickerOption(label: "周三", value: "Wed"),
    AntPickerOption(label: "周四", value: "Thur"),
    AntPickerOption(label: "周五", value: "Fri"),
  ];

  final List<List<AntPickerOption>> _columns = [
    [
      AntPickerOption(label: "周一", value: "Mon"),
      AntPickerOption(label: "周二", value: "Tues"),
      AntPickerOption(label: "周三", value: "Wed"),
      AntPickerOption(label: "周四", value: "Thur"),
      AntPickerOption(label: "周五", value: "Fri"),
    ],
    [
      AntPickerOption(label: "上午", value: "am"),
      AntPickerOption(label: "下午", value: "pm"),
    ],
  ];

  List<AntPickerOption> _optionsJiangSu = [
    AntPickerOption(
      label: "南京",
      value: "nanjing",
      children: [
        AntPickerOption(label: "雨花区", value: "yuhuaqu"),
        AntPickerOption(label: "江宁区", value: "jiangningqu"),
        AntPickerOption(label: "浦口", value: "pukou"),
        AntPickerOption(label: "栖霞", value: "qixia"),
        AntPickerOption(label: "六合", value: "liuhe"),
        AntPickerOption(label: "溧水", value: "lishui"),
      ],
    ),
    AntPickerOption(
      label: "苏州",
      value: "suzhou",
      children: [
        AntPickerOption(label: "姑苏", value: "gansu"),
        AntPickerOption(label: "吴中", value: "wuzhong"),
      ],
    ),
  ];

  final List<AntPickerOption> _optionsZheJiang = [
    AntPickerOption(label: "杭州", value: "hangzhou"),
    AntPickerOption(label: "宁波", value: "ningbo"),
  ];

  final List<AntPickerOption> _optionsHeNan = [
    AntPickerOption(label: "开封", value: "kaifeng"),
  ];

  late final List<List<AntPickerOption>> _options2 = [
    [
      AntPickerOption(label: "江苏", value: "jiangsu", children: _optionsJiangSu),
      AntPickerOption(
        label: "浙江",
        value: "zhejiang",
        children: _optionsZheJiang,
      ),
      AntPickerOption(label: "河南", value: "henan", children: _optionsHeNan),
    ],
  ];

  @override
  Widget build(BuildContext context) {
    return AntScaffold(
      appBar: AntAppBar(title: Text('Picker')),
      body: SingleChildScrollView(
        child: Column(
          spacing: 10,
          children: [
            DemoBlock(
              title: "基本用法",
              child: Column(
                children: [
                  AntButton(
                    text: '选择',
                    block: true,
                    onPressed: () {
                      AntPicker.show(
                        context: context,
                        options: _options1,
                        title: Text("选择日期"),
                        maxHeight: 400,
                        onOk: (value) {
                          print(value);
                          showAntToast(
                            context: context,
                            content: Text(
                              "${value?.label}",
                            ),
                          );
                        },
                      );
                    },
                  ),
                ],
              ),
            ),
            DemoBlock(
              title: "多列选择",
              child: Column(
                children: [
                  AntButton(
                    text: "默认值",
                    block: true,
                    onPressed: () {
                      AntPicker.showMulti(
                        context: context,
                        title: Text("选择日期"),
                        options: _columns,
                        value: ["Fri", "pm"],
                        maxHeight: 400,
                        onOk: (value) {
                          print(value);
                          showAntToast(
                            context: context,
                            content: Text(
                              "${value?.map((e) => e?.label).toList().join(",")}",
                            ),
                          );
                        },
                      );
                    },
                  ),
                ],
              ),
            ),
            DemoBlock(
              title: "联动效果",
              child: Column(
                children: [
                  AntButton(
                    text: "联动效果",
                    block: true,
                    onPressed: () {
                      showMultiPicker(
                        context: context,
                        title: Text("选择地区"),
                        options: _options2,
                        maxHeight: 400,
                        onOk: (value) {
                          print(value);
                          showAntToast(
                            context: context,
                            content: Text(
                              "${value?.map((e) => e?.label).toList().join(",")}",
                            ),
                          );
                        },
                        // onColumnSelectedChanged: (value, index) {
                        //   print('column $index selected: ${value?.value}');
                        //   setState(() {
                        //     if (index == 0) {
                        //       if (value?.value == "zhejiang") {
                        //         _options2[1] = _optionsZheJiang;
                        //       }
                        //       if (value?.value == "jiangsu") {
                        //         _options2[1] = _optionsJiangSu;
                        //       }
                        //       if (value?.value == "heinan") {
                        //         _options2[1] = _optionsHeNan;
                        //       }
                        //       _options2 = List.from(_options2);
                        //     }
                        //   });
                        // },
                      );
                    },
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}