Flutter 父子组件通信

在Flutter 中父组件调用子组件的方法可以通过GlobalKey实现,而子组件调用父组件方法可以通过回调函数实现。

父组件

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<LoadPencilState> loadPencilKey = GlobalKey<LoadPencilState>();
  // 动画状态
  bool isRun = false;
  @override
  Widget 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});

  @override
  State<StatefulWidget> createState() => LoadPencilState();
}

class LoadPencilState extends State<LoadPencil>
    with SingleTickerProviderStateMixin {
  // 定义动画控制器对象
  late AnimationController _controller;
  // 定义一个动画对象
  late Animation _animation;
  double _size = 0;

  @override
  void 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();
      }
    });
  }

  @override
  void dispose() {
    super.dispose();
    //释放动画
    _controller.dispose();
  }

  @override
  Widget 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>();

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 Python 的 requests 二进制数据的传输方式发生了变化

在Python编程中&#xff0c;requests库是一个非常有用的工具&#xff0c;用于发送HTTP请求。由于其简单易用的API和广泛的兼容性&#xff0c;requests库已经成为Python开发者中最常用的网络请求库之一。 然而&#xff0c;最近在requests 0.10.1版本中&#xff0c;POST二进制数据…

课堂巡课如何提升教学质量?简单才是硬道理

随着教育技术的不断发展&#xff0c;在线巡课系统逐渐成为学校管理和教育质量提升的重要工具。在线巡课系统通过数字化手段&#xff0c;为学校提供了更加高效、精准的巡课管理方式&#xff0c;有力地支持了教育教学的改进和优化。 客户案例 小学巡课项目 山东某小学引入了泛地…

python练习题

1.身体质量指数 BMI指数即身体健康指数&#xff0c;它与人的体重和身高相关&#xff0c;是目前国际常用的衡量人体胖瘦程度以及是否健康的一个标准。已知BMI值的计算公式如下&#xff1a; 体质指数&#xff08;BMI&#xff09; 体重&#xff08;kg&#xff09;身高^2&#xf…

基于qemu_v8+optee 3.17平台的ca/ta Demo

1、整体集成构建 基于官方构建&#xff0c;加入自定义ca/ta后一体构建到rootfs&#xff0c;在qemu上运行 $ mkdir -p <optee-project> $ cd <optee-project> $ repo init -u https://github.com/OP-TEE/manifest.git -m ${TARGET}.xml [-b ${BRANCH}] $ repo syn…

IDEA的插件市场无法打开,无法连接到https://plugins.jetbrains.com/

1&#xff1a;网上搜到的&#xff1a; 在这里测试https://plugins.jetbrains.com/ 能否连接到&#xff0c;可以的话就成功&#xff0c;但是我一直失败&#xff0c;网络配置与防火墙也没问题。 2&#xff1a;我成功的方法&#xff1a; 把这个勾取消再测试&#xff0c;成功&…

【Linux】make/Makefile 进度条小程序

目录 一&#xff0c;认识 make/makefile 二&#xff0c;实例代码 1&#xff0c;依赖关系 2&#xff0c;原理 3&#xff0c;项目清理 4&#xff0c;测试讲解 三&#xff0c;Linux第一个小程序&#xff0d;进度条 game.h game.c test.c 程序详解 一&#xff0c;认识 m…

Notepad-- ubuntu下载安装

Notepad-- ubuntu下载安装 下载 Gitee链接&#xff1a; https://gitee.com/cxasm/notepad– 安装 sudo apt install *.deb运行 /opt/apps/com.hmja.notepad/files/Notepad--出错 需要安装qt5 sudo apt-get install qt5-default

C#,简单修改Visual Studio 2022设置以支持C#最新版本的编译器,尊享编程之趣

1 PLS README & CHAPTER 5 用一个超简单的例子说明各版本 C# 的差异。 使用新版本&#xff08;比如C#.11&#xff09;&#xff0c;当然有一定的好处。我们在写程序的时候一般这样&#xff1a; Visual Studio 2022 默认只能这样写&#xff1a; string imageFile Path.C…

如何解决跨国访问Microsoft 365网络卡顿问题?

作为主流的协调办公工具&#xff0c;Microsoft 365(旧称Office 365)是众多企业每天必须访问的应用&#xff0c;但由于多种原因&#xff0c;许多企业在跨区域访问Microsoft 365服务器时常面临卡顿、掉线等问题&#xff0c;对工作效率产生严重影响。 对此&#xff0c;连官方也专门…

视频监控平台EasyCVR+智能分析网关+物联网,联合打造智能环卫监控系统

一、背景介绍 城市作为人们生活的载体&#xff0c;有着有无数楼宇和四通八达的街道&#xff0c;这些建筑的整洁与卫生的背后&#xff0c;是无数环卫工作人员的努力。环卫工人通过清理垃圾、打扫街道、清洗公共设施等工作&#xff0c;保持城市的整洁和卫生&#xff0c;防止垃圾…

java学习part08权限

1.权限表格 外部类都是公有和缺省&#xff0c;因为其他两种对于外部类没有意义 一些内部成分都各种权限都可以 2.如何体现java封装性 答&#xff0c;通过权限控制&#xff0c;保证哪些可以给人看到&#xff0c;哪些不能

MySQL--慢查询(一)

1. 查看慢查询日志是否开启 show variables like slow_query%; show variables like slow_query_log; 参数说明&#xff1a; 1、slow_query_log&#xff1a;这个参数设置为ON&#xff0c;可以捕获执行时间超过一定数值的SQL语句。 2、long_query_time&#xff1a;当SQL语句执行…

【Sorted Set】Redis常用数据类型: ZSet [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 目录 ⑤Redis Zset 操作命令汇总1. zadd 添加或…

软件系统测试有哪些测试流程?系统测试报告编写注意事项

在软件开发的过程中&#xff0c;系统测试是至关重要的一环&#xff0c;它的目的是验证和评估软件产品是否符合预期的质量标准&#xff0c;以确保系统的稳定性、可靠性和安全性。 一、软件系统测试的测试流程 1、需求分析与测试计划制定&#xff1a;根据需求分析确定测试目标、…

Linux:设置Ubuntu的root用户密码

执行以下命令&#xff1a; 给root用户设置密码 sudo passwd 输入两次密码 切换root su root 退出root用户 exit

需求调研计划及用户需求调研单

1.目的 2.概述 3.需求调研计划 3.1调研目的 3.2调研范围 3.2.1.调研的职能范围 3.2.2.调研的业务范围 3.2.3.调研的地点范围 3.3调研方式 3.4调研阶段 3.5具体时间安排 软件开发全文档获取&#xff1a;点我获取 1、需求调研计划 2、用户需求调研单 项目名称 客…

boardmix AI思维导图,一键自动生成思维导图!

在日常学习和工作中&#xff0c;我们常常需要记忆和整理大量的知识点和思维结构。 此时&#xff0c;思维导图的存在就大大方便了我们的工作。与传统的文本笔记不同&#xff0c;思维导图可以结合文字、图像、颜色等多种元素&#xff0c;帮助我们更好地整理和分析知识的关系&…

腾讯又出王炸产品!使用混元大模型进行数据报表测试

最近腾讯出了自己的大模型&#xff0c;命名混元。 现在已经开始内测&#xff0c;感谢腾讯小伙伴卢晓明同学帮我们提前申请到了内测机会&#xff0c;接下来我们用腾讯混元大模型与实际工作结合&#xff0c;开始我的报表测试之旅。 腾讯混元大模型官方入口:https://hunyuan.ten…

CVE-2023-6099:优卡特脸爱云一脸通智慧管理平台SystemMng.ashx接口未授权漏洞复现

文章目录 优卡特脸爱云一脸通智慧管理平台未授权SystemMng.ashx接口漏洞复现&#xff08;CVE-2023-6099&#xff09; [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 优卡特脸爱云一脸通智慧管理平台未授权…

conda环境module ‘clip‘ has no attribute ‘load‘解决

1 问题描述 运行基于clip的zero-shot预测代码&#xff0c;报错如下&#xff1a; Traceback (most recent call last):File "D:\code\ptcontainer\clip\clipembeding.py", line 38, in <module>clip_embeding ClipEmbeding()File "D:\code\ptcontainer\c…