首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flutter 父子组件互调方法

Flutter 父子组件互调方法

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

Flutter 父子组件互调方法

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

1、概述

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

2、代码实现

代码语言:javascript
代码运行次数:0
运行
复制
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
运行
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flutter 父子组件互调方法
  • 一、父组件调用子组件方法
    • 1、概述
    • 2、代码实现
    • 3、效果
  • 二、子组件调用父组件方法
    • 1、概述
    • 2、代码实现
    • 3、效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档