flutter实现ios风格时间选择器

效果展示:

选择器组件代码:

import 'package:flutter/cupertino.dart';

class TimePicker extends StatelessWidget {
  final DateTime time;

  /// tap 事件
  final Function(DateTime) onDateTimeChanged;
  const TimePicker(
      {super.key, required this.time, required this.onDateTimeChanged});

  @override
  Widget build(BuildContext context) {
    return Container(
        child: _BottomPicker(
      child: CupertinoDatePicker(
          backgroundColor:
              CupertinoColors.systemBackground.resolveFrom(context),
          mode: CupertinoDatePickerMode.time,
          initialDateTime: time,
          onDateTimeChanged: onDateTimeChanged),
    ));
  }
}

class _BottomPicker extends StatelessWidget {
  const _BottomPicker({required this.child});

  final Widget child;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 216,
      padding: const EdgeInsets.only(top: 6),
      margin: EdgeInsets.only(
        bottom: MediaQuery.of(context).viewInsets.top,
      ),
      color: CupertinoColors.systemBackground.resolveFrom(context),
      child: DefaultTextStyle(
        style: TextStyle(
          color: CupertinoColors.label.resolveFrom(context),
          fontSize: 22,
        ),
        child: GestureDetector(
          // Blocks taps from propagating to the modal sheet and popping.
          onTap: () {},
          child: SafeArea(
            top: false,
            child: child,
          ),
        ),
      ),
    );
  }
}

页面使用:

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值