flutter 滚动隐藏悬浮按钮

Windows Phone 7 Panorama中枢设计:信息架构与MVVM轻量化实践 Panorama是Windows Phone 7提出的一种空间化信息组织范式,本质并非滑动容器,而是通过水平延展、视觉引导与内容隔离构建用户认知路径;其设计原理直指移动端核心命题——在有限屏幕与低性能设备上实现高信息密度与高操作效率的平衡。该模式依托MVVM实现松耦合,但摒弃教条框架,采用按需通知、Insert(0)置顶、TwoWay绑定等轻量化落地策略,显著提升响应性与可维护性。技术价值在于以空间换时间、用平台原生能力替代算力堆砌,适用于Xamarin、Flutter及现代跨平台教育类应用的信息中枢重构。 阅读详情

在这里插入图片描述
实现思路,当开始滚动的时候,执行动画让中间的悬浮按钮向右移动。当滚动结束的时候复位动画

监听滚动的方法有两种
第一种 NotificationListener 在widget树中,子widget滚动时会向上发送notification,通过NotificationListener可以监控到该notification。NotificationListener也是一个widget,可以将被监控的widget放入其child内。
NotificationListener

const NotificationListener({
    Key key,
    @required this.child,  被监控的子widget树
    this.onNotification,  监控到notification后的回调方法。
  }) 

onNotification(ScrollNotification notification) , 此方法需要一个返回值,表示是否拦截住notification,如果是true,那么notifcation到此为止;如果是false,那么notification会继续向更外层widget传递。参数ScrollNotification包含了监听到的信息。
ScrollNotification

ScrollNotification({
    @required this.metrics,   所有信息都在这里存储 ScrollMetrics
    @required this.context,
  });

第二种是通过ScrollController来监听
ScrollController 常用方法

addListener 滑动监听方法,在initState中监听
_scrollController.position.pixels 滑动距离
_scrollController.offset 滚动的偏移量
_scrollController.position.maxScrollExtent 最大可滑动距离,滑动组件内容长度
-_scrollController.position.minScrollExtent 最小可滑动距离,0
_scrollController.position.viewportDimension 滑动视图所占长度
_scrollController.dispose() 销毁监听,在dispose方法中调用
_scrollController.jumpTo 控制滑动组件的滑动距离,无动画
_scrollController.animateTo(10); 控制滑动组件的滑动距离,有动画
_scrollController.position.jumpTo 同上
_scrollController.position.animateTo 同上

  controller.addListener((){
      print(controller......)
   });

下面我们开始实现我们的效果

第一步
我们使用Scaffold floatingActionButton 来添加我们widget ,配合 floatingActionButtonLocation 设置下位置,

Scaffold(
     appBar: PreferredSize(
       child: _getAppBar(),
       preferredSize: Size(double.infinity,44),
     ),
     backgroundColor: Colors.white,
     floatingActionButton: AnimationWidget(),
     floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
     body: ...,

   );

创建悬浮按钮 AnimationWidget

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
//状态管理
class NotifierAnimation extends ChangeNotifier{
//回调方法
 ValueChanged stopValueChanged;
 void animationStartAndEnd(isStop){
   stopValueChanged(isStop);
   notifyListeners();
 }
}

class AnimationWidget extends StatefulWidget {
 @override
 _AnimationWidgetState createState() => _AnimationWidgetState();
}

class _AnimationWidgetState extends State<AnimationWidget> with SingleTickerProviderStateMixin{
 AnimationController _animationController;
 Animation<Offset> _animation;
 @override
 void initState() {
   super.initState();
   //实例化动画
   _animationController = new AnimationController(vsync: this,duration: new Duration(milliseconds: 240));
   _animation = Tween(begin: Offset(0,0), end: Offset(0.8, 0)).animate(_animationController);
 }

 @override
 void didChangeDependencies() {
   //Provider 状态管理 得到回调如果true 那就是开始动画
   final counter = Provider.of<NotifierAnimation>(context);
   if (counter !=null) {
     Provider.of<NotifierAnimation>(context,listen: false).stopValueChanged=((v){
       if(v){
         //开始动画
         _animationController.forward();
       }else{
         //复位动画
         _animationController.reverse();

       }
     });
   }

 }
 @override
 Widget build(BuildContext context) {
   return Align(
     alignment: Alignment.centerRight,
     child: Column(
       mainAxisAlignment: MainAxisAlignment.center,
       children: <Widget>[
         SizedBox(height: 100),
         SlideTransition(
           child: Container(
             width: 50,
             height: 50,
             decoration: BoxDecoration(
                 color: Colors.red
             ),
           ),position: _animation,),
       ],
     )
   );
 }
}

这么这里使用到的是NotificationListener,因为ScrollController不能得到什么时候开始滚动什么时候结束滚动,
第二步 创建 NotificationListener child就是你的滚动视图 可以是 ListView CustomScrollView,也可以包裹 三方插件 SmartRefresher

NotificationListener<ScrollNotification>(
      onNotification: (notification){
        if( notification.depth == 0){
          switch (notification.runtimeType){
            case ScrollStartNotification:{
              //开始滚动 执行动画
                Provider.of<NotifierAnimation>(context,listen: false).animationStartAndEnd(true);
            }
            break;
            case ScrollUpdateNotification: print("正在滚动") ; break;
            case ScrollEndNotification:{
              print("滚动停止");
              //滚动停止 结束动画 复位
              Provider.of<NotifierAnimation>(context,listen: false).animationStartAndEnd(false);

            } break;
            case OverscrollNotification: print("滚动到边界"); break;
          }
        }
        return;
      },
      child: ListView()
    );

我们这里通过三方插件Provider状态共享来执行动画 ,当然了你也可以使用其他方法,无非就是一个回调,调用我们封装好的widget 来执行动画

main

//Provider
void main() {
  NotifierAnimation notifierAnimation = NotifierAnimation();
    runApp(MultiProvider(
      providers: [
        ChangeNotifierProvider.value(value: notifierAnimation),

      ],
      child: MyApp(),
    ));
}
Flutter禁用滚动事件 在ScrollView或ListView中嵌套GridView创建二维布局的元素,但是GridView自带滚动属性,使得页面无法随着ScrollView或Listview滚动,所以我们需要禁用GridView的滚动属性。 阅读详情

相关推荐

Flutter 增强版的页面悬浮按钮(FloatingActionButton)

安利一个可以增强Flutter 自带的 FloatingActionButton 的组件,点击后可以展开更多操作,简单易用。

Flutter 跨平台技术研究 2148

Flutter NestedScrollView 、SliverAppBar全解析,悬浮菜单的应用

上述便是通过NestedScrollView 、SliverAppBar实现的效果,通过两个控件我们便可以实现上述的效果。在我们开发过程中经常会使用到悬浮菜单的使用,当我们滑动到指定位置后,菜单会自动悬浮。以上便是菜单悬浮的效果实现,注释写的很详细,直接粘贴复制即可实现。

WangQingLei0307的博客 2115

Flutter 框架跨平台鸿蒙开发 —— FloatingActionButton 控件之悬浮点睛之笔

本文深入解析了鸿蒙(HarmonyOS)应用开发中的FloatingActionButton(FAB)组件。文章首先阐述了FAB作为页面"灵魂快门"的设计哲学,强调其Promoted Action的核心使命。然后详细介绍了FAB的三种形态类型及其适用场景,并通过流程图和UML图展示了FAB与Scaffold组件的协调机制。实战部分提供了鸿蒙风格任务浮标的实现代码,并给出三点交互优化建议:动效衔接、视觉避让和Hero动画。最后指出FAB作为UI构图"定海神针"的重要性,

红目香薰 724

flutter-可拖动悬浮按钮

flutter-可拖动悬浮按钮

NotesChapter 2957

ollama环境变量配置:修改ollama的数据路径(安装路径)

ollama安装模型,如果很大,会占用C盘空间,影响系统运行速度,通过设置环境变量,来改变ollama放目录的地址。

正经教主是个热衷于正经学习分享的教主。 1万+

安卓7.0+抓包难题:雷电模拟器9.0+Charles系统证书安装全攻略

HTTPS协议通过SSL/TLS加密保障网络通信安全,其核心机制依赖于证书信任链。在Android系统中,自7.0版本起,谷歌收紧了证书信任策略,默认仅信任系统预置的CA证书,这直接导致了传统抓包方法失效。理解这一原理对于移动开发、测试及安全研究至关重要,它揭示了应用层安全策略与系统底层机制的关联。通过将用户证书安装至系统信任区,可以突破此限制,实现HTTPS流量的解密与分析。这一技术在App调试、接口测试、安全审计等场景中具有广泛的应用价值。本文以雷电模拟器9.0和Charles抓包工具为例,详细演示了如

weixin_42521843的博客 280

Flutter滑动隐藏头部

Flutter如何写出如下界面呢? NestedScrollView结合SliverAppBar,搞一个背景滑动放几个文字滑动还是可以玩一玩的。SliverAppBar上面显示title但是对于复杂的部件,能整死你,而去你没法解决它这个SliverAppbar的容量,那咋们自己写呗。这里我描述一下自己的做法,代码整理之后会贴出来。 一,1.对于滑动到顶部,TabBarView或者(法大大,分装的)ExtendedTabBarView(多级嵌套TabBarView)都可以.2.对于滑动隐藏部分Ta..

大灰狼的小绵羊哥哥的博客 1695

JeecgBoot漏洞利用工具解析:一键getshell原理与安全加固实践

在应用安全领域,远程代码执行(RCE)和文件上传漏洞是Web系统面临的高危威胁,其核心原理在于对用户输入的控制不足或安全校验缺失。攻击者通过构造恶意请求,可绕过系统边界,在服务器上执行任意命令或上传恶意文件,从而获取系统控制权。这类漏洞的技术价值在于揭示了应用层安全防护的薄弱环节,其利用方式自动化、集成化趋势明显,极大地提升了攻击效率。在低代码开发平台等快速构建的业务系统中,此类风险尤为突出。应用场景广泛覆盖安全测试、渗透评估与应急响应。本文聚焦于JeecgBoot平台的历史高危漏洞,深入解析其SQL注入、

weixin_30787531的博客 552

FloatingActionButton 下滑隐藏,上滑显示

先上效果图整体思路:1.Fab需要作为CoordinatorLayout的子控件2.设置好动画,分别隐藏和显示Fab3.自定义MyBehavior类,继承FloatingAcitionButton.Behavior,重写方法public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNul...

qq_36999309的博客 3035

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程 1.NVIDIA驱动检测及安装 2.Anaconda的安装 3.安装cuda、cudnn、pytorch 4.其他报错

aaaccc444的博客 2424

ZYNQ双核通信实战:手把手教你用OpenAMP搭建Linux+FreeRTOS开发环境(2018.3版)

本文详细介绍了如何在ZYNQ平台上使用OpenAMP框架实现双核通信,构建Linux与FreeRTOS协同开发环境。从开发环境配置、系统组件编译到OpenAMP框架应用,手把手指导开发者完成ZYNQ双核通信系统的搭建与调试,为异构计算开发提供实用解决方案。

weixin_33737134的博客 476

flutter 的 overlay组件示例10

实现了一个页面功能,当页面内容向下滚动超过 100 像素时,会在页面右下角显示一个悬浮的向上箭头按钮,点击该按钮可使页面快速滚动回到顶部;这段代码通过合理运用 Flutter 的各种组件、控制器以及覆盖层等相关技术,实现了根据页面滚动情况动态显示和隐藏悬浮按钮,并实现了点击悬浮按钮使页面滚动回顶部的功能。先创建一个 OverlayEntry,其构建函数返回一个组件用于将悬浮操作按钮定位在页面右下角,设置按钮图标为向上箭头,点击可调用滚动到顶部的方法。应用入口点(main 函数)

weixin_42668920的博客 1078

基于Xilinx Artix7 的FPGA高级应用 (二):千兆以太网通信(实战篇)第一期

本项目是基于Xlinx Artix7 XC7A35T芯片 以太网芯片选用的是RTL8211EG PHY芯片 MAC 和PHY接口标准是GMII 开发工具是vivado 2018.3 我们先来复习一下以太网的基本通信原理: 当我们的计算机需要与局域网中另外的设备进行通信的时候,需要将数据传输到网卡进行编码,然后传输到线上,经过另一个设备的网卡解码成该设备能读取的数据。 关于以太网协议的知识在原理篇中已经讲过,不再重复,下面直接看接收代码: 首先注意我们的MAC和PHY通信选择的是GMII接口标准,发送数据一

工大技术底层人员的博客 4034

Flutter for OpenHarmony 微动漫App实战 - 回到顶部功能实现

本文介绍了如何在Flutter应用中实现流畅的"回到顶部"功能。通过ScrollController监听滚动位置,当用户下滑超过300像素时显示悬浮按钮,点击后以300ms的easeOut动画平滑返回顶部。关键步骤包括:1)声明ScrollController和显示状态变量;2)在initState注册滚动监听;3)根据offset值动态控制按钮显示;4)使用animateTo实现平滑滚动动画;5)将控制器绑定到SingleChildScrollView;6)

2501_94452159的博客 620

国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核

从板子整体角度来看,这是一款国产化程度很高的板子,从主控FPGA,到JTAG芯片,存储芯片、电源芯片等,都是使用的国产半导体公司的产品。板子整体尺寸也比较迷你,属于小而美类型的,可以认为是一款FPGA核心板,当然也预留了排针接口,给用户足够的扩展空间。对于想了解高云小蜜蜂SoC软硬件开发,以及对云源软件、MCU开发环境做个深度评测来说足够了。JTAG调试器固件可以增加虚拟串口功能,对于板子本来来说面积不会有改动,只需要添加两根信号线即可。

whik1194的博客 6399

Android 13 灭屏音乐播放问题解决与优化建议

通过在中增加对音乐播放状态的检测,我们成功解决了客户应用在灭屏状态下音乐播放被中断的问题。

m0_60898338的博客 1157

Flutter for OpenHarmony 实战之基础组件:第十七篇 滚动进阶 ScrollController 与 Scrollbar

在前面的文章中,我们学习了如何使用 ListView 和 GridView 展示列表数据。但在实际开发中,我们往往需要更精细的控制:比如用户滑到一定高度时显示“回到顶部”按钮,或者在右侧展示一个符合鸿蒙系统风格的滚动条。本文将深入探讨滚动布局的“指挥官” —— `ScrollController`。

好代码自己会说话,烂代码才需要注释来圆谎 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Flutter SpeedDial组件:增强版悬浮按钮开发指南

在移动应用UI设计中,悬浮按钮(FloatingActionButton)是实现核心操作入口的关键组件。其实现原理基于Material Design规范,通过浮动层叠方式提供快捷操作入口。传统悬浮按钮在功能扩展性上存在局限,而Flutter社区的SpeedDial组件通过支持多级子按钮、自定义动画和灵活布局方向等特性,大幅提升了交互可能性。这类增强型组件特别适合电商应用的快捷下单、社交媒体的多类型内容发布等需要聚合多个高频操作的场景。SpeedDial作为Flutter悬浮按钮的进阶解决方案,不仅保留了原生

weixin_32075843的博客 231

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

flutter列表无法滚动到底部_Flutter 列表滑动到顶部浮动按钮实现

import 'package:flutter/material.dart';class ScrollControllerDemoPage extends StatefulWidget {@override_ScrollControllerDemoPageState createState() =>_ScrollControllerDemoPageState();}class _Scroll...

weixin_39781326的博客 711

推荐开源项目:sliver_fab - 让你的Flutter应用更具创新力的悬浮按钮解决方案

推荐开源项目:sliver_fab - 让你的Flutter应用更具创新力的悬浮按钮解决方案 项目介绍 在寻找一种能够将浮动操作按钮(FloatingActionButton)优雅地安置于FlexibleSpacebar边缘的解决方案吗?那么,你一定不能错过这个名为sliver_fab的Flutter开源项目。它是一个包装器小部件,可以让你在滑动列表的顶部区域添加一个悬浮元素,从而提升用户体验,实...

gitblog_00089的博客 446

基于HarmonyOS API 24 Flutter for OpenHarmony 实战:阅读进度悬浮球

本项目是一个设计精美的阅读进度悬浮球组件演示应用,虽然功能相对单一,但在交互设计和组件封装方面有很多值得学习的地方。在交互设计方面,悬浮球支持自由拖动和边界限制,点击展开详情面板的设计符合用户对悬浮按钮的常见认知。拖动时的实时位置更新和边界约束,保证了良好的用户体验。在组件设计方面,组件采用参数化设计,将颜色、尺寸、初始值等属性通过构造函数暴露给外部,提高了组件的复用性和灵活性。内部状态自包含,外部使用简单,是一个良好封装的范例。

2301_79516858的博客 351

Flutter三方库适配OpenHarmony【expense_tracker】消费记录器项目完整实战

本文介绍了如何将Flutter三方库expense_tracker消费记录器项目适配到OpenHarmony平台。该项目是一个轻量级的消费记录工具,支持新增、查看和删除支出记录,并提供总额统计、分类汇总等功能。 文章首先介绍了项目背景和技术目标,包括数据模型设计、列表统计、表单输入等核心功能。然后详细讲解了工程结构、环境配置和应用入口实现,包括蓝色Material 3主题的配置。 重点分析了Expense数据模型的设计,包含标题、金额、分类和日期字段,并展示了默认的五条支出数据初始化方式。项目通过Flutt

gao_dou的博客 242

【Flutter x HarmonyOS 6】魔方计时APP——记录页面的UI设计

,圆角背景(半透明填充色(主色边框。这种设计让选中态非常醒目,同时保持了整体的轻盈感。页面布局:使用Stack,Tab 切换 + 悬浮按钮。Tab 切换栏:包裹在卡片中,自定义指示器样式,支持显示/隐藏动画。分组记录视图:水平滚动的分组选择器 + 统计信息 + 记录列表。项目统计视图:项目选择器 + 多种统计卡片。通用卡片组件提供统一的视觉风格。记录列表项:罚时标记、水波纹点击效果。下一篇我们可以深入聊聊数据层的设计,以及如何实现这些统计功能。

2503_94458334的博客 1793

HarmonyOS 6.1 实战:.scrollBar(BarState.Off)隐藏了滚动条,滚动条的存在有时会破坏整体的视觉美感

在鸿蒙操作系统的分布式应用生态中,ArkTS作为官方主推的声明式UI开发语言,承载了HarmonyOS应用开发的核心生产力。ArkTS在TypeScript的基础上进行了深度扩展,引入了装饰器(Decorator)驱动的声明式UI范式,使得开发者能够以接近自然语言的方式描述用户界面,同时享受类型系统带来的安全保障。与传统的命令式UI框架不同,ArkTS采用"数据驱动视图"的核心理念——当状态发生变化时,框架会自动计算差异并高效更新界面,这一机制与Flutter的Widget体系、React的虚拟DOM思想有

2401_86049470的博客 455

如何轻松搭建跨平台漫画阅读器:开源工具nhentai-cross的完整指南

你是否曾因在不同设备上阅读漫画而烦恼?手机、电脑、平板之间的阅读进度无法同步,界面操作各异,数据安全也令人担忧。今天,我要为你介绍一款革命性的开源跨平台漫画阅读工具——nhentai-cross。这款创新的漫画阅读器支持Windows、macOS、Linux、Android和iOS五大操作系统,通过智能同步和个性化设置,让你随时随地享受流畅的漫画阅读体验。 ## 🎯 痛点场景:漫画爱好者的真实

gitblog_00934的博客 383

HarmonyOS ArkTS API 24|数组 concat 合并列表数据,新消息追加至聊天列表头部实现最新消息置顶效果

在鸿蒙的ArkTS开发框架中,组件化开发思想贯穿始终。每一个UI界面都被拆解为一个个独立、可复用的自定义组件(Custom Component)。一个自定义组件由struct关键字声明,并通过@Component装饰器标注,它拥有自己的内部状态、构建函数和生命周期。组件之间可以嵌套组合,形成复杂的界面层级结构。这种组件化方式类似于React的函数组件或Flutter的Widget,但在语法层面更加贴近TypeScript的原生写法。组件的构建逻辑统一放在build()方法中,该方法返回一个或多个UI组件的声

2401_89578244的博客 230
上一篇: flutter-可拖动悬浮按钮
下一篇: 前端商城项目实战-(前端篇)
叔怀
博客等级 码龄10年 127粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值