Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flutter 父子组件互调方法

Flutter 父子组件互调方法

作者头像
訾博ZiBo
发布于 2025-01-06 11:50:31
发布于 2025-01-06 11:50:31
18000
代码可运行
举报
运行总次数:0
代码可运行

Flutter 父子组件互调方法

一、父组件调用子组件方法

1、概述

使用 GlobalKey:可以为子组件创建一个 GlobalKey 对象,通过该 GlobalKey 可以获取到子组件的状态,并调用其方法。

2、代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => HomePageState();
}

class HomePageState extends State<HomePage> {
  // 在父组件中创建 GlobalKey
  GlobalKey<SonWidgetState> sonWidgetState = GlobalKey<SonWidgetState>();

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          // 在子组件中使用 GlobalKey
          SonWidget(key: sonWidgetState),
          const SizedBox(height: 10),
          ElevatedButton(
            onPressed: () => {
              // 调用子组件方法
              sonWidgetState.currentState?.changeName("訾博${DateTime.now().microsecondsSinceEpoch}"),
            },
            child: const Text("change name"),
          )
        ],
      ),
    );
  }
}

/// 子组件
class SonWidget extends StatefulWidget {
  const SonWidget({super.key});

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

class SonWidgetState extends State<SonWidget> {
  late String name = "zibo";

  /// 父组件调用此方法实现修改 name
  /// @param newName 新的名字
  void changeName(String newName) {
    setState(() {
      name = newName;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(name, style: const TextStyle(fontSize: 40)),
    );
  }
}

3、效果

screenshots
screenshots

二、子组件调用父组件方法

1、概述

Flutter 中,子组件可以通过回调函数的方式来调用父组件的方法。

2、代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => HomePageState();
}

class HomePageState extends State<HomePage> {

  late String name = "zibo";

  /// 子组件调用此方法实现修改 name
  /// @param newName 新的名字
  void changeName(String newName) {
    setState(() {
      name = newName;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text(name, style: const TextStyle(fontSize: 40)),
          const SizedBox(height: 10),
          SonWidget(changeName: changeName),
        ],
      ),
    );
  }
}

/// 子组件
class SonWidget extends StatefulWidget {
  const SonWidget({super.key, required this.changeName});

  final Function(String name) changeName;

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

class SonWidgetState extends State<SonWidget> {

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () => {
          // 调用父组件方法
          widget.changeName("訾博${DateTime.now().microsecondsSinceEpoch}"),
        },
        child: const Text("change name"),
      ),
    );
  }
}

3、效果

screenshots2
screenshots2
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flutter入门三部曲(2) - 界面开发基础
上一节我们熟悉了初始化后的flutter的界面。这一节,我们就来重点了解一下这部分的内容。
deep_sadness
2018/08/17
2.7K0
Flutter入门三部曲(2) - 界面开发基础
【Flutter 实战】国际化及App 内切换语言功能
当应用程序支持不同语言的时候,就需要对应用程序进行国际化,当然国际化不仅仅指文字,也可以是布局、图片等。Flutter 已经提供了组件来实现国际化,下面是实现国际化的步骤:
老孟Flutter
2020/11/26
7.7K0
Flutter | Key 的原理和使用
在几乎所有的 widget 中,都有一个参数 key ,那么这个 key 的作用是什么,在什么时候才需要使用到 key ?
345
2022/02/11
1.3K0
Flutter | Key 的原理和使用
10.Flutter学习之StatefulWidget有状态组件、页面绑定数据、改变数据
StatelessWidget:无状态的widget,适用于我们描述用户界面不依赖对象中的配置信息时。例如:使用ImaegView/UIImageView来显示Logo,Logo在运行时不会改变,所以可以使用StatelessWidget
易帜
2022/02/09
8830
10.Flutter学习之StatefulWidget有状态组件、页面绑定数据、改变数据
【Flutter 组件集录】Visibility| 8月更文挑战
前面介绍了 Offstage 组件可以控制 child 的显隐,与它相比较的往往是 Visibility 组件。Offstage 源码中有对 Visibility 的一句介绍:它可以更高效地隐藏组件(尽管不那么微妙)。
张风捷特烈
2022/03/18
2K0
【Flutter 组件集录】Visibility| 8月更文挑战
Riverpod - flutter 状态管理的应用
Riverpod 是 Flutter 下知名度较高的状态管理依赖,同样出自 Provider 的开发者 rrousselGit 之手。
xcsoft
2024/07/31
2971
Flutter 状态管理之GetX库
  Flutter使用的是声明式UI,是通过状态去更新UI组件的,因此我们首先就要学习状态的使用。同样为了简化原本的状态使用,我们会使用Getx库。
晨曦_LLW
2024/05/25
1.1K0
Flutter 状态管理之GetX库
【Flutter 组件】001-关于 Widget 的一切
当 Widget 状态发生变化,需要更新界面时,框架会先计算从上一个状态转换到下一个状态所需的最小更改,然后再去刷新界面。
訾博ZiBo
2025/01/06
2040
【Flutter 组件】001-关于 Widget 的一切
flutter-状态管理2-inheritedWidget的使用例子
2.创建子Widget,依赖InheritedWidget的数据.(这里创建两个Widget,一个StatefulWidget,一个StatelessWidget)
前端小tips
2021/11/28
8140
flutter-状态管理2-inheritedWidget的使用例子
Flutter跨平台移动端开发丨WillPopScope、InheritedWidget、Theme
通过 InheritedWidget 数据可以在 Widget 树中从上向下共享与传递,组件之间也可实现跨级传递数据
码脑
2019/05/25
1.4K0
【Flutter 组件】005-基础组件:单选、开关和复选框
Material 组件库中提供了 Material 风格的单选开关 Switch 和复选框 Checkbox,虽然它们都是继承自 StatefulWidget,但它们本身不会保存当前选中状态,选中状态都是由父组件来管理的。当Switch或Checkbox被点击时,会触发它们的onChanged回调,我们可以在此回调中处理选中状态改变逻辑。
訾博ZiBo
2025/01/06
4050
【Flutter 组件】005-基础组件:单选、开关和复选框
【Flutter 工程】003-钩子函数:Flutter Hooks
Hooks 是 React 框架中引入的一项特性,用来分离状态逻辑和视图逻辑。如今,这个概念已经不仅限于 React,其他前端框架也在学习和借鉴。在 Flutter 开发中,业务逻辑和视图逻辑的耦合一直是一个比较突出的痛点,这也是各大前端框架常遇到的一个共性难题。为了解决这个问题,前端社区提出了许多方案,如MVP、MVVM、React 的Mixin、高阶组件(HOC),以及Hooks。在Flutter中,开发者可能对Mixin比较熟悉。但是,Mixin的应用也存在一定的局限性:
訾博ZiBo
2025/01/06
1740
【Flutter 工程】003-钩子函数:Flutter Hooks
使用 fl_chart 实现 Flutter 图表魔法🪄
原文链接:Flutter Chart Magic with fl_chart - 原文作者 Ece
Jimmy_is_jimmy
2024/07/02
1.1K0
使用 fl_chart 实现 Flutter 图表魔法🪄
【Flutter 工程】006-路由跳转:go_router
GoRouter是一个用于Flutter应用程序的导航库,它提供了一种简单而强大的方式来管理应用程序的导航栈和路由。它可以帮助你组织和管理Flutter应用程序中的页面导航,使页面之间的跳转和参数传递更加方便。
訾博ZiBo
2025/01/06
2310
【Flutter 工程】006-路由跳转:go_router
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发
flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件
卓伊凡
2025/01/22
1420
Flutter Provider状态管理---八种提供者使用分析
在我们上一篇文章中对Provider进行了介绍以及类结构的说明,最后还写了一个简单的示例,通过上一章节我们对Provider有了一个基本的了解,这一章节我们来说说Provider的8种提供者以及他们的使用区别。
玖柒的小窝
2021/10/06
4.4K0
Flutter Provider状态管理---八种提供者使用分析
flutter基础布局代码
骨灰级别的基础代码,只是做个简单的记录,方便以后看 都是用dart写的,都在flutter项目下的lib文件夹下 import 'package:flutter/material.dart'; import './tomFont.dart'; void main() { runApp( MaterialApp( theme: ThemeData( primarySwatch: Colors.yellow, ), home: Scaffold(
Tom2Code
2023/02/14
7400
flutter基础布局代码
【- Flutter 性能 -】都 2021 年了,你的动画还在用 setState ?
对于每个 UI 帧来说,主要依次执行 Animate、Build、Layout、Compositing bits、Paint、Compositing。每当界面发生变化时,都是一帧触发会更新放入结果。如下每两格代表一帧的UI 时间(左)和 Raster 时间(右)。 当左侧很高时,说明你的界面写的有问题。看下面的两个 UI 帧, 可以看出 Build 占了很大部分,就说明 UI 可能存在某些低效率情况。
张风捷特烈
2020/12/18
1.1K0
【- Flutter 性能 -】都 2021 年了,你的动画还在用 setState ?
第130期:flutter的状态组件和状态管理
怎样才能在我们的flutter应用中对用户输入做出响应?比如我们有个图标,我们想让它支持点击事件,或者在状态改变的时候换一个不同的图标。
terrence386
2023/02/25
1.7K0
第130期:flutter的状态组件和状态管理
Flutter局部刷新优化性能
可以明显的看到按钮的count并无变动,但需要更新的文本组件更新了值,已经完美实现了局部刷新。
用户1974410
2022/09/20
1.4K0
Flutter局部刷新优化性能
推荐阅读
相关推荐
Flutter入门三部曲(2) - 界面开发基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验