Flutter:页面滚动,导航栏背景颜色过渡动画

记录:导航默认透明,页面发生滚动后,导航背景色由0-1,过渡到白色背景。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

view

import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:redone/common/index.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
import 'index.dart';class SendRedPacketReceivePage extends GetView<SendRedPacketReceiveController> {const SendRedPacketReceivePage({super.key});// 头部Widget _buildHeader() {return <Widget>[TDImage(assetUrl: 'assets/chat/images/6.png', width: 750.w, height: 216.w,type: TDImageType.square,),<Widget>[SizedBox(height: 150.w,),TDImage(assetUrl: 'assets/chat/images/user.png', width: 130.w, height: 130.w,type: TDImageType.circle,),SizedBox(height: 20.w,),TextWidget.body('黄玲玲发出的红包', size: 32.sp, color: AppTheme.color333,weight: FontWeight.w600,),SizedBox(height: 10.w,),TextWidget.body('恭喜发财,大吉大利', size: 26.sp, color: AppTheme.color999,),SizedBox(height: 10.w,),<Widget>[TextWidget.body('8.88', size: 80.sp, color: AppTheme.primary,weight: FontWeight.w600,),SizedBox(width: 10.w,),TextWidget.body('元', size: 26.sp, color: AppTheme.primary,weight: FontWeight.w600,),].toRow(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.baseline,textBaseline: TextBaseline.alphabetic),].toColumn()].toStack();}// 红包总数Widget _buildRedPacketCount() {return <Widget>[TextWidget.body('共10个红包,5秒钟抢完', size: 26.sp, color: AppTheme.color999,),].toRow().paddingHorizontal(30.w).height(68.w).backgroundColor(const Color(0xfff3f4f5)).clipRRect(all: 10.w);}// 红包列表Widget _buildRedPacketList() {return SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return <Widget>[TDImage(assetUrl: 'assets/chat/images/user.png',width: 84.w,height: 84.w, type: TDImageType.circle,),SizedBox(width: 20.w),<Widget>[TextWidget.body('黄玲玲', size: 30.sp,color: AppTheme.color333,),SizedBox(height: 10.w),TextWidget.body('2024-01-01 12:00',size: 24.sp,color: AppTheme.color999,),].toColumn(crossAxisAlignment: CrossAxisAlignment.start,).expanded(),TextWidget.body('0.88元',size: 30.sp,color: AppTheme.color333,),].toRow(crossAxisAlignment: CrossAxisAlignment.start).paddingVertical(20.w).decorated(border: const Border(bottom: BorderSide(width: 1, color: AppTheme.dividerColor),));},childCount: 15,),);}// 主视图Widget _buildView() {return CustomScrollView(controller: controller.scrollController,slivers: [_buildHeader().sliverToBoxAdapter(),SizedBox(height: 60.w,).sliverToBoxAdapter(),_buildRedPacketCount().sliverToBoxAdapter().sliverPaddingHorizontal(30.w),SizedBox(height: 20.w,).sliverToBoxAdapter(),_buildRedPacketList().sliverPaddingHorizontal(30.w),],);}@overrideWidget build(BuildContext context) {return GetBuilder<SendRedPacketReceiveController>(init: SendRedPacketReceiveController(),id: "send_red_packet_receive",builder: (_) {return Scaffold(backgroundColor: AppTheme.pageBgColor,body: <Widget>[_buildView(),AnimatedContainer(duration: const Duration(milliseconds: 100),color: Colors.white.withOpacity(controller.opacity),child: TDNavBar(height: 44,title: '领取红包',titleColor: AppTheme.color333.withOpacity(controller.opacity),titleFontWeight: FontWeight.w600,backgroundColor: Colors.transparent,screenAdaptation: true,useDefaultBack: true,),).positioned(left: 0, right: 0, top: 0),].toStack());},);}
}

controller

import 'package:get/get.dart';
import 'package:flutter/material.dart';class SendRedPacketReceiveController extends GetxController {SendRedPacketReceiveController();// 滚动控制器final ScrollController scrollController = ScrollController();// 渐变系数 0-1double opacity = 0.0;// 滚动开始变化的位置final double scrollStartPoint = 20.0;// 滚动结束变化的位置final double scrollEndPoint = 120.0;_initData() {update(["send_red_packet_receive"]);}@overridevoid onInit() {super.onInit();// 监听滚动scrollController.addListener(() {// 计算 0-1 之间的渐变系数double newOpacity;if (scrollController.offset <= scrollStartPoint) {// 开始点之前完全透明newOpacity = 0.0;} else if (scrollController.offset >= scrollEndPoint) {// 结束点之后完全不透明newOpacity = 1.0;} else {// 在开始点和结束点之间线性计算newOpacity = (scrollController.offset - scrollStartPoint) /  (scrollEndPoint - scrollStartPoint);// 确保值在0-1范围内并保留更多小数位精度newOpacity = double.parse(newOpacity.toStringAsFixed(3)).clamp(0.0, 1.0);}// 只有当透明度变化时才更新UIif ((opacity - newOpacity).abs() > 0.001) {opacity = newOpacity;update(["send_red_packet_receive"]);}});_initData();}@overridevoid onReady() {super.onReady();_initData();}@overridevoid onClose() {scrollController.dispose();super.onClose();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 —— MCU、MPU、ARM、FPGA、DSP

在嵌入式系统中&#xff0c;MCU、MPU、ARM、FPGA和DSP是核心组件&#xff0c;各自在架构、功能和应用场景上有显著差异。以下从专业角度详细解析这些概念&#xff1a; 一、 MCU&#xff08;Microcontroller Unit&#xff0c;微控制器单元&#xff09; 核心定义 集成系统芯片&a…

批量删除 PPT 空白幻灯片页面

如果我们需要删除 PPT 文档中的空白幻灯片页面&#xff0c;我们可以借助 Office 工具来完成&#xff0c;但是如果是大量的 PPT 文档需要批量删除空白幻灯片页面&#xff0c;那就需要使用专业的批量处理工具来完成&#xff0c;今天就给大家介绍一种批量删除 PPT 空白幻灯片页面的…

【canvas】一键自动布局:如何让流程图节点自动找到最佳位置

一键自动布局&#xff1a;如何让流程图节点自动找到最佳位置 引言 在流程图、拓扑图和系统架构图设计中&#xff0c;节点布局往往是最令人头疼的问题。如果手动调整每个节点位置&#xff0c;不仅耗时费力&#xff0c;还难以保证美观性和一致性。本文将深入解析如何实现自动布…

【平台优化】大数据集群一个客户端参数引起的任务性能差的问题

大数据集群一个客户端参数引起的任务性能差的问题 背景介绍排查过程任务慢的具体原因Executor中数据内存往磁盘溢写结果数据写入分区路径 分析解决方案 结语&思考 背景介绍 随着业务量不断扩大&#xff0c;平台逐步发展成HDFS多联邦的架构&#xff0c;这个过程中&#xff…

【微信小程序变通实现DeepSeek支持语音】

微信小程序实现录音转文字&#xff0c;并调用后端服务&#xff08;Node.js&#xff09;进行语音识别和&#xff0c;然后调用DeepSeek 处理的完整实现。 整体架构 前端&#xff08;微信小程序&#xff09;&#xff1a; 实现录音功能。将录音文件上传到后端。接收后端返回的语音…

uniapp常用组件

写在前面 今天将uniapp中的组件都过了一遍&#xff0c;上手难度不大&#xff0c;但是还是遇到了一些问题&#xff1a; HBuilder实在是太难用&#xff0c;不管是插件生态还是设计之类的&#xff0c;总之就是用的哪哪不顺手虽然打开内置浏览器是挺方便的&#xff0c;但是不知道…

【Linux】应用层自定义协议 + 序列化和反序列化

应用层自定义协议 序列化和反序列化 一.应用层1.再谈 "协议"2.序列化 和 反序列化 二. Jsoncpp1.序列化2.反序列化 三. Tcp全双工 面向字节流四.自定义协议 保证报文的完整性1.Makefile2.Mutex.hpp3.Cond.hpp4.Log.hpp5.Thread.hpp6.ThreadPool.hpp7.Common.hpp8.…

二.使用ffmpeg对原始音频数据重采样并进行AAC编码

重采样&#xff1a;将音频三元组【采样率 采样格式 通道数】之中的任何一个或者多个值改变。 一.为什么要进行重采样&#xff1f; 1.原始音频数据和编码器的数据格式不一致 2.播放器要求的和获取的数据不一致 3.方便运算 二.本次编码流程 1.了解自己本机麦克风参数&#x…

器材借用管理系统详细设计基于Spring Boot-SSM

‌ 目录 ‌摘要 一、系统概述‌ ‌二、系统架构设计‌ 2‌.1技术选型‌ ‌2.2系统架构‌ ‌三、需求分析 3.1用户需求分析 3.2功能模块设计‌ 3.3、性能需求分析 3.4、安全需求分析 ‌四、数据库设计‌ ‌五、安全性设计‌ ‌六、系统测试与维护‌ ‌七、总结‌…

麒麟V10 arm cpu aarch64 下编译 RocketMQ-Client-CPP 2.2.0

国产自主可控服务器需要访问RocketMQ消息队列&#xff0c;最新的CSDK是2020年发布的 rocketmq-client-cpp-2.2.0 这个版本支持TLS模式。 用默认的版本安装遇到一些问题&#xff0c;记录一下。 下载Releases apache/rocketmq-client-cpp GitHubhttps://github.com/apache/roc…

C语言每日一练——day_12(最后一天)

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第十二天。&#xff08;最后一天&#xff0c;完结散花啦&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff0…

网络安全应急入门到实战

奇安信&#xff1a;95015网络安全应急响应分析报告&#xff08;2022-2024年&#xff09;官网可以下载 https://github.com/Bypass007/Emergency-Response-Notes 应急响应实战笔记 网络安全应急响应技术实战指南 .pdf 常见场景 第4章 勒索病毒网络安全应急响应 第5章 挖矿木…

jvm中每个类的Class对象是唯一的吗

jvm中每个类的Class对象是唯一的吗 在 Java 中&#xff0c;同一个类的 Class 对象在由同一个类加载器加载时是唯一的。析&#xff1a; 1. 同一类加载器的唯一性 规则&#xff1a;若一个类被同一个类加载器加载&#xff0c;无论创建多少实例&#xff0c;其 Class 对象始终唯一…

Visual Studio里的调试(debugging)功能介绍

参考 1- Introduction to Debugging | Basic Visual Studio Debugging&#xff08;这是一位印度博主视频&#xff0c;我下面做到笔记也主要参考她的视频&#xff0c;但不得不说口音太重了&#xff0c;一股咖喱味&#xff09; 目录 个人对调试浅显的认识和对调试的介绍逐行调…

NLP高频面试题(六)——decoder-only、encoder-only和encoder-decoder的区别与联系

一、基本概念与代表模型 1. Encoder-only 架构 Encoder-only 架构最具代表性的模型是 BERT。BERT 使用 masked language modeling&#xff08;MLM&#xff09;进行预训练&#xff0c;即随机遮蔽部分输入词汇&#xff0c;让模型预测被遮蔽的词汇。由于这种架构能够同时看到输入…

如何判断 MSF 的 Payload 是 Staged 还是 Stageless(含 Meterpreter 与普通 Shell 对比)

在渗透测试领域&#xff0c;Metasploit Framework&#xff08;MSF&#xff09;的 msfvenom 工具是生成 Payload&#xff08;载荷&#xff09;的核心利器。然而&#xff0c;当我们选择 Payload 时&#xff0c;经常会遇到一个问题&#xff1a;这个 Payload 是 Staged&#xff08;…

基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等

板卡简介&#xff1a; 本板为模拟量高速采样板&#xff08;ADI&#xff09;&#xff0c;主要用于电机转速和相电流检测&#xff0c;以实现电机闭环控制。 性能规格&#xff1a; 电源&#xff1a;DC5V&#xff0c;DC3.3V&#xff0c;DC15V&#xff0c;DC24V FPGA&#xff1a;…

Gymnasium Cart Pole 环境与 REINFORCE 算法 —— 强化学习入门 2

Title: Gymnasium Cart Pole 环境与 REINFORCE 算法 —— 强化学习入门 2 文章目录 I. Gymnasium Cart Pole 环境II. REINFORCE 算法1. 原理说明2. REINFORCE 算法实现 I. Gymnasium Cart Pole 环境 Gymnasium Cart Pole 环境是一个倒立摆的动力学仿真环境. 状态空间: 0: Ca…

Python高级:GIL、C扩展与分布式系统深度解析

文章目录 &#x1f4cc; **前言**&#x1f527; **第一章&#xff1a;Python语言的本质与生态**1.1 **Python的实现与版本演进**1.2 **开发环境与工具链** &#x1f527; **第二章&#xff1a;元编程与动态特性**2.1 **描述符协议&#xff08;Descriptor Protocol&#xff09;*…

C++学习笔记(二十一)——文件读写

一、文件读写 作用&#xff1a; 文件读写指的是将数据从程序存储到文件&#xff0c;或从文件读取数据&#xff0c;以实现数据的持久化存储。 C 提供了 fstream 头文件&#xff0c;用于文件操作&#xff0c;主要包括&#xff1a; ofstream&#xff08;输出文件流&#xff09;—…