Flutter 父子組件通信

在Flutter 中父組件調用子組件的方法可以通過GlobalKey實現,而子組件調用父組件方法可以通過回調函數實現。

父組件

class _MyHomePageState extends State<MyHomePage> {final GlobalKey<LoadPencilState> loadPencilKey = GlobalKey<LoadPencilState>();// 動畫狀態bool isRun = false;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(backgroundColor: Theme.of(context).colorScheme.inversePrimary,title: Text(widget.title),),body: SizedBox(width: 350,child: Column(children: [LoadPencil(backgroundColor: Colors.blue,key: loadPencilKey,changeState: (state) {setState(() {isRun = state;});},),ElevatedButton(onPressed: () {if (isRun == true) {loadPencilKey.currentState?.stop();} else {loadPencilKey.currentState?.start();}},child: isRun == true ? const Text("停止") : const Text("開始")),],),));}
}

子組件

import 'package:flutter/material.dart';class LoadPencil extends StatefulWidget {final Color backgroundColor;final Function(bool state) changeState;const LoadPencil({super.key, required this.backgroundColor, required this.changeState});@overrideState<StatefulWidget> createState() => LoadPencilState();
}class LoadPencilState extends State<LoadPencil>with SingleTickerProviderStateMixin {// 定義動畫控制器對象late AnimationController _controller;// 定義一個動畫對象late Animation _animation;double _size = 0;@overridevoid initState() {super.initState();_controller = AnimationController(vsync: this,duration: const Duration(seconds: 2),);final Tween tween = Tween(begin: 0, end: 300);_animation = tween.animate(_controller);// 監聽動畫幀的變化,在每一幀中更新UI_animation.addListener(() {setState(() {_size = _animation.value.toDouble();});});//  監聽動畫的狀態,當動畫正序完成后反向執行動畫_controller.addStatusListener((status) {// 動畫狀態status的值有:dismissed(動畫停止在開始處)、forward(正向運行)、reverse(反向運行)、completed(動畫停止在結束處)if (status == AnimationStatus.completed) {_controller.reverse();} else if (status == AnimationStatus.dismissed) {_controller.forward();}});}@overridevoid dispose() {super.dispose();//釋放動畫_controller.dispose();}@overrideWidget build(BuildContext context) {return Container(width: _size,height: 2,color: widget.backgroundColor,);}// 啟動start() {_controller.forward();// 向父組件通信widget.changeState(true);}// 終止stop() {_controller.stop();// 向父組件通信widget.changeState(false);}
}

有一個需要注意的地方是,在使用GlobalKey<>設置類型時,這個類型子組件的State,而不是子組件本身

final GlobalKey<LoadPencilState> loadPencilKey = GlobalKey<LoadPencilState>();

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164080.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

react中虛擬dom,diff,fiber - 初級了解

借鑒&#xff1a; 「React深入」一文吃透虛擬DOM和diff算法 - 掘金 (juejin.cn) 虛擬dom、fiber、渲染dom、dom-diff - 掘金 (juejin.cn) 未閱讀源碼&#xff0c;了解層面&#xff0c;后續可以深入了解 1.虛擬DOM ①.結構上&#xff1a;虛擬DOM比真實DOM輕很多 ②.操作上&…

主流的低代碼平臺有哪些?程序員應該如何與低代碼相處?

本文主要闡述低代碼的概念&#xff0c;介紹目前主流的低代碼平臺&#xff0c;總結低代碼平臺的典型特征、存在優勢以及未來發展趨勢。并站在程序員的角度&#xff0c;分析如何在已經到來的低代碼戰爭中&#xff0c;找到自己的定位&#xff0c;一展所長。 什么是低代碼&#xff…

脈沖寬度基礎知識簡介

脈沖寬度是指脈沖所能達到的最大值所持續的周期時間。脈沖寬度是電子領域中一個重要的概念&#xff0c;它與脈沖重復間隔和占空比等參數密切相關。 脈沖寬度通常用于電信號的測量&#xff0c;可以用來描述脈沖的形狀、幅度和寬度等特性。在雷達和電源領域中&#xff0c;脈沖寬度…

Flink 替換 Logstash 解決日志收集丟失問題

在某客戶日志數據遷移到火山引擎使用 ELK 生態的案例中&#xff0c;由于客戶反饋之前 Logstash 經常發生數據丟失和收集性能較差的使用痛點&#xff0c;我們嘗試使用 Flink 替代了傳統的 Logstash 來作為日志數據解析、轉換以及寫入 ElasticSearch 的組件&#xff0c;得到了該客…

實現一個計算機

圖片&#xff1a; 實現代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>body {padding: 20px;font-family: Arial;}.calc-wrap {width: 300px;bor…

VL06O報表添加增強字段

業務描述 用戶需要在VL06O事務代碼下進行批量交貨過賬&#xff0c;現有的篩選條件不太適用當前公司的業務&#xff0c;需要在報表中新增三個交貨單增強字段&#xff0c;方便其篩選&#xff08;選擇屏幕沒有加&#xff0c;用戶在報表里用標準按鈕功能自己篩選&#xff09; 效果…

十一 動手學深度學習v2計算機視覺 ——微調

一、網絡架構 一個神經網絡一般可以分成兩塊 特征抽取&#xff0c;將原始像素變成容易線性分割的特征。線性分類器來做分類。 二、訓練 是一個目標數據集上的正常訓練任務&#xff0c; 但使用更強的正則化 使用更小的學習率使用更少的數據迭代 源數據集遠遠復雜于目標數據集…

藍橋杯算法雙周賽心得——迷宮逃脫(dp)

大家好&#xff0c;我是晴天學長&#xff0c;dp版的來啦&#xff0c;可以是受益匪淺啊&#xff0c;需要的小伙伴可以關注支持一下哦&#xff01;后續會繼續更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .迷宮逃脫 迷官逃脫[算法賽] 問題描述 在數學王國中&#xff0c;存…

便攜式心電圖機方案_基于MT6735平臺的手持心電圖機

便攜式心電圖機具備體積小、易攜帶、兼容12導模式的特點&#xff0c;通過工頻濾波、基線濾波和肌電濾波等處理&#xff0c;能夠獲得更精準的心電圖譜。該設備可以與醫院信息系統(HIS)相連接&#xff0c;實現患者信息的共享。采集的心電數據可以通過無線方式發送到心電判讀平臺&…

企業建數倉的第一步是選擇一個好用的ETL工具

當企業決定建立數據倉庫&#xff08;Data Warehouse&#xff09;&#xff0c;第一步就是選擇一款優秀的ETL&#xff08;Extract, Transform, Load&#xff09;工具。數據倉庫是企業數據管理的核心&#xff0c;它存儲、整合并管理各種數據&#xff0c;為商業決策和數據分析提供支…

PC8250(CC-CV控制)5V/8A同步降壓恒流恒壓軟啟動帶EN功能只需極少外圍元件

概述 PC8250是一個同步降壓轉換器輸出電流至8A。它的設計允許操作電源電壓范圍從9V到42V。外部關閉功能可以通過邏輯電平來控制COMP/EN引腳下降&#xff0c;然后進入待機模式。外部補償使反饋控制具有良好的線路和負載調節&#xff0c;外部設計靈活。PC8250在CC&#xff08;恒定…

【讀懂AUTOSAR規范】PduR 緩存分配(Buffer allocation)

1. 前言 PDU路由器模塊支持將I-PDU從一個源總線網關到一個或多個目標總線。與從/到本地模塊的傳輸和接收不同,PDU路由器模塊必須同時充當接收器和發射器,并且在某些情況下還提供I-PDU的緩沖。網關需求被有意地分離,以便在不需要網關的情況下高效實現PDU路由器模塊。如果PDU…

華三無線控制器WX2540H配合準入做Portal認證

數據通信 - 建設篇 - 無線 第四章 華三無線控制器WX2540H配合準入做Portal認證 數據通信 - 建設篇 - 無線系列文章回顧華三無線控制器WX2540H配合準入做Portal認證前言其他配置優化參考來源系列文章回顧 第一章 華三無線控制器配置本地轉發 第二章 華三無線控制器配置802.1X認…

Redis-Day1基礎篇(初識Redis, Redis常見命令, Redis的Java客戶端)

Redis-Day1基礎篇 初識Redis認識NoSQL認識Redis安裝Redis啟動RedisRedis客戶端 Redis命令數據結構介紹通用命令操作命令StringHashListSetSortedSet Redis的Java客戶端客戶端對比Jedis客戶端Jedis快速入門Jedis連接池 SpringDataRedis客戶端SpringDataRedis概述SpringDataRedis…

boardmix AI思維導圖,一鍵自動生成思維導圖!

在日常學習和工作中&#xff0c;我們常常需要記憶和整理大量的知識點和思維結構。 此時&#xff0c;思維導圖的存在就大大方便了我們的工作。與傳統的文本筆記不同&#xff0c;思維導圖可以結合文字、圖像、顏色等多種元素&#xff0c;幫助我們更好地整理和分析知識的關系&…

centos7上用docker部署redis

1. 下載redis鏡像 docker pull redis docker images # 查看鏡像是否下載成功2. 安裝redis容器 2.1 先準備好配置文件redis.conf vi /data/redis/redis.conf寫入配置信息&#xff0c;appendonly yes&#xff0c;如果需要給redis配置密碼&#xff0c;可以寫入requirepass root…

如何選擇更快更穩定的存儲服務器

如何選擇更快更穩定的存儲服務器 存儲介質&#xff1a;存儲服務器的主要存儲介質包括固態硬盤&#xff08;SSD&#xff09;和機械硬盤&#xff08;HDD&#xff09;。相比于機械硬盤&#xff0c;固態硬盤具有更高的讀寫速度和更低的延遲&#xff0c;因此能夠提供更快的數據傳輸…

python安裝的記錄

python setup.py install --user

(附程序)AD采集中的10種經典軟件濾波程序優缺點分析

前言 本次我們學習一下AD采集的一些簡單的軟件濾波算法并分析優缺點 本篇博客大部分是自己收集和整理&#xff0c;如有侵權請聯系我刪除。 AD采樣點的電壓多少有點起伏波動&#xff0c;經運放放大后電壓的波動如果超過ADC的分辯率&#xff0c;則顯示的值會出現波動。波動如…

RTOS的任務觸發底層邏輯

&#xff08;定時器用于計時和觸發事件&#xff0c;任務則由調度器進行調度和執行&#xff1a;每當時鐘節拍到達時&#xff0c;系統會觸發一個稱為 tick 中斷的事件。當 tick 中斷發生時&#xff0c;操作系統會在中斷服務例程中執行一定的處理&#xff0c;其中包括更新任務的運…