IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> flutter 上拉抽屉(实现一下简单逻辑 没有深入) -> 正文阅读

[移动开发]flutter 上拉抽屉(实现一下简单逻辑 没有深入)

import 'dart:async';

import 'package:flutter/material.dart';

class SlideUp extends StatefulWidget {

? const SlideUp({Key? key}) : super(key: key);

? @override

? State<SlideUp> createState() => _SlideUpState();

}

class _SlideUpState extends State<SlideUp> {

? //手指移动的位置

? double _lastMoveY = 0.0;

? //手指按下的位置

? double _downY = 0.0;

? double height = 0.0;

? //盒子的高度

? double boxHeight = 200;

? @override

? Widget build(BuildContext context) {

? ? var maxPostion = MediaQuery.of(context).size.height;

? ? print(maxPostion);

? ? return Scaffold(

? ? ? appBar: AppBar(

? ? ? ? title: Text("手势上滑"),

? ? ? ),

? ? ? body: Container(

? ? ? ? ? child: Stack(

? ? ? ? children: [

? ? ? ? ? Positioned(

? ? ? ? ? ? ? bottom: 0,

? ? ? ? ? ? ? left: 0,

? ? ? ? ? ? ? right: 0,

? ? ? ? ? ? ? child: Container(

? ? ? ? ? ? ? ? padding: EdgeInsets.all(20),

? ? ? ? ? ? ? ? height: boxHeight,

? ? ? ? ? ? ? ? // width: 400,

? ? ? ? ? ? ? ? color: Colors.pink,

? ? ? ? ? ? ? ? child: GestureDetector(

? ? ? ? ? ? ? ? ? ? onVerticalDragStart: (v) {

? ? ? ? ? ? ? ? ? ? ? position = v.localPosition.dy;

? ? ? ? ? ? ? ? ? ? ? print("开始垂直滑动");

? ? ? ? ? ? ? ? ? ? ? print(v.localPosition);

? ? ? ? ? ? ? ? ? ? ? print(v);

? ? ? ? ? ? ? ? ? ? ? _downY = v.localPosition.dy;

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? onVerticalDragEnd: (v) {

? ? ? ? ? ? ? ? ? ? ? if (_downY - _lastMoveY > 0) {

? ? ? ? ? ? ? ? ? ? ? ? print("上滑");

? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? print("下滑");

? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? if (boxHeight >= 200 && boxHeight < maxPostion / 2) {

? ? ? ? ? ? ? ? ? ? ? ? // print("在最下面");

? ? ? ? ? ? ? ? ? ? ? ? //在最下面

? ? ? ? ? ? ? ? ? ? ? ? if (_lastMoveY > 0) {

? ? ? ? ? ? ? ? ? ? ? ? ? // print("下滑");

? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? if (height > maxPostion / 3) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? // print("上滑很大");

? ? ? ? ? ? ? ? ? ? ? ? ? ? setState(() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? boxHeight = maxPostion - 200;

? ? ? ? ? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? ? // print("上滑小");

? ? ? ? ? ? ? ? ? ? ? ? ? ? setState(() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? boxHeight = maxPostion / 2;

? ? ? ? ? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? //在中间

? ? ? ? ? ? ? ? ? ? ? else if (maxPostion / 2 + 100 > boxHeight &&

? ? ? ? ? ? ? ? ? ? ? ? ? boxHeight >= maxPostion / 2) {

? ? ? ? ? ? ? ? ? ? ? ? // print("在最中间");

? ? ? ? ? ? ? ? ? ? ? ? //在最下面

? ? ? ? ? ? ? ? ? ? ? ? if (height > 0) {

? ? ? ? ? ? ? ? ? ? ? ? ? // print("上滑");

? ? ? ? ? ? ? ? ? ? ? ? ? setState(() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? boxHeight = maxPostion - 200;

? ? ? ? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? // print("下滑");

? ? ? ? ? ? ? ? ? ? ? ? ? setState(() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? boxHeight = 200;

? ? ? ? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? //在最上面

? ? ? ? ? ? ? ? ? ? ? else if (boxHeight >= (maxPostion / 2 + 100) &&

? ? ? ? ? ? ? ? ? ? ? ? ? maxPostion - 100 >= boxHeight) {

? ? ? ? ? ? ? ? ? ? ? ? // print("在最上面");

? ? ? ? ? ? ? ? ? ? ? ? //在最下面

? ? ? ? ? ? ? ? ? ? ? ? if (_lastMoveY < 0) {

? ? ? ? ? ? ? ? ? ? ? ? ? // print("最上面上滑");

? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? if (-height > maxPostion / 3) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? // print("下滑很大");

? ? ? ? ? ? ? ? ? ? ? ? ? ? setState(() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? boxHeight = 200;

? ? ? ? ? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? ? // print("下滑小");

? ? ? ? ? ? ? ? ? ? ? ? ? ? setState(() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? boxHeight = maxPostion / 2;

? ? ? ? ? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? onVerticalDragUpdate: (v) {

? ? ? ? ? ? ? ? ? ? ? _lastMoveY = v.localPosition.dy;

? ? ? ? ? ? ? ? ? ? ? height = -(_lastMoveY - _downY);

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? child: Column(

? ? ? ? ? ? ? ? ? ? ? mainAxisSize: MainAxisSize.min,

? ? ? ? ? ? ? ? ? ? ? children: [

? ? ? ? ? ? ? ? ? ? ? ? Container(

? ? ? ? ? ? ? ? ? ? ? ? ? color: Colors.green,

? ? ? ? ? ? ? ? ? ? ? ? ? height: 10,

? ? ? ? ? ? ? ? ? ? ? ? ? width: 200,

? ? ? ? ? ? ? ? ? ? ? ? ),

? ? ? ? ? ? ? ? ? ? ? ],

? ? ? ? ? ? ? ? ? ? )),

? ? ? ? ? ? ? ))

? ? ? ? ],

? ? ? )),

? ? );

? }

? Widget buildListener() {

? ? return GestureDetector(

? ? ? ? onVerticalDragStart: (v) {

? ? ? ? ? print("开始垂直滑动");

? ? ? ? ? print(v.localPosition);

? ? ? ? ? print(v);

? ? ? ? ? _downY = v.localPosition.dy;

? ? ? ? },

? ? ? ? onVerticalDragEnd: (v) {

? ? ? ? ? print("结束垂直滑动");

? ? ? ? ? if (_downY - _lastMoveY > 0) {

? ? ? ? ? ? print("上滑");

? ? ? ? ? } else {

? ? ? ? ? ? print("下滑");

? ? ? ? ? }

? ? ? ? ? print(v.primaryVelocity);

? ? ? ? ? print(v);

? ? ? ? ? print("onVerticalDragEnd---${v.velocity}---${v.primaryVelocity}");

? ? ? ? ? setState(() {});

? ? ? ? },

? ? ? ? onVerticalDragUpdate: (v) {

? ? ? ? ? _lastMoveY = v.localPosition.dy;

? ? ? ? ? // print("滑动过程中");

? ? ? ? ? // setState(() {

? ? ? ? ? // ? height = _lastMoveY - _downY;

? ? ? ? ? // });

? ? ? ? },

? ? ? ? child: Column(

? ? ? ? ? children: [

? ? ? ? ? ? Container(

? ? ? ? ? ? ? height: height + 200,

? ? ? ? ? ? ? color: Colors.pink,

? ? ? ? ? ? )

? ? ? ? ? ],

? ? ? ? ));

? }

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-16 11:23:47  更:2022-05-16 11:24:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 1:39:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码