Flutter通过showDialog实现下拉筛选菜单效果

一、效果图

二、 实现方式

  1. 获取固定在顶部筛选头部Widget在屏幕上的位置和它的高度
  2. 在弹窗中通过获取到的高度进行内容显示区域定位
  3. 巧用AnimatedContainer组件实现下拉动画效果
  4. 最后在底部加上黑色蒙层
dart 复制代码
unawaited(
      showDialog(
        context: context,
        useSafeArea: false,
        barrierColor: Colors.transparent,
        builder: (_) {
          return Padding(
            padding: EdgeInsets.only(top: startY),
            child: Column(
              children: [
                ColoredBox(
                  color: Colors.white,
                  child: Column(
                    children: [
                      Container(
                        height: 1,
                        margin: const EdgeInsets.symmetric(horizontal: 16),
                        color: const Color(0xfff6f7f9).withOpacity(0.8),
                      ),
                      ///下拉效果
                      ValueListenableBuilder<double>(
                        valueListenable: _notifier,
                        builder: (context, value, child) {
                          return AnimatedContainer(
                            height: value,
                            curve: Curves.fastEaseInToSlowEaseOut,
                            duration: const Duration(milliseconds: 300),
                            child: child,
                          );
                        },
                        child: widget.content,
                      ),
                    ],
                  ),
                ),
                ///底部黑色蒙层
                Expanded(
                  child: GestureDetector(
                    onTap: _close,
                    behavior: HitTestBehavior.opaque,
                    child: Container(
                      color: Colors.black.withOpacity(0.7),
                    ),
                  ),
                ),
              ],
            ),
          );
        },
      ),
    );

三、具体代码可查看此处的完整Demo

相关推荐
独特的螺狮粉几秒前
开源鸿蒙跨平台Flutter开发:微波射频阻抗匹配系统-极坐标史密斯圆图与天线信号渲染架构
开发语言·flutter·华为·架构·开源·harmonyos
小雨天気.1 分钟前
Flutter 框架跨平台鸿蒙开发 - 选择困难终结者应用
flutter·华为·生活·harmonyos·鸿蒙
世人万千丶25 分钟前
开源鸿蒙跨平台Flutter开发:儿童语文认知与语义皮层映射引擎_视觉词形区与布洛卡网络渲染架构
flutter·华为·开源·harmonyos
小雨天気.27 分钟前
Flutter 框架跨平台鸿蒙开发 - 每日一问应用
flutter·华为·生活·harmonyos·鸿蒙
Utopia^1 小时前
Flutter 框架跨平台鸿蒙开发 - 闪回相机
数码相机·flutter·华为·harmonyos
提子拌饭1331 小时前
开源鸿蒙跨平台Flutter开发:国寿险收益速算表系统:基于 Flutter 的金融精算模型与 IRR 收益率动态测绘架构
flutter·华为·金融·开源·harmonyos·鸿蒙
AI_零食1 小时前
开源鸿蒙跨平台Flutter开发:极简暗黑风与五行雷达测绘架构
学习·flutter·游戏·华为·开源·交互·harmonyos
提子拌饭1331 小时前
开源鸿蒙跨平台Flutter开发:中小学跳绳遥测记录表:基于 Flutter 的体能监测与分钟级频域测绘架构
flutter·华为·架构·开源·harmonyos
浮芷.1 小时前
Flutter 框架跨平台鸿蒙开发 - 沉默挑战应用
flutter·华为·harmonyos
独特的螺狮粉1 小时前
开源鸿蒙跨平台Flutter开发:DNA测序波峰色谱可视化分离平台:基于 Flutter 的信号解耦与基因组流体渲染架构
flutter·华为·架构·开源·harmonyos·鸿蒙