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.pswp.cn/bicheng/73909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73909.shtml
英文地址,請注明出處:http://en.pswp.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;—…