Flutter父组件调用子组件的GlobalKey的使用

285 阅读1分钟

子组件

import 'package:flutter/material.dart';

class Demo extends StatefulWidget {
  const Demo({super.key}); //key是比较关键的
  @override
  State<Demo> createState() => DemoState();
}

//_DemoState去掉下划线解除私域
class DemoState extends State<Demo> {
  String str = '我是子组件的值';
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

子组件主要:

  1. key值
  2. 有状态组件去掉下划线,成为全局组件

父组件

class Father extends StatefulWidget {
  const Father({super.key});
  @override
  State<Father> createState() => _FatherState();
}

class _FatherState extends State<Father> {
  GlobalKey<DemoState> demoKey = GlobalKey<DemoState>(); //定义Global值

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        print(demoKey.currentState?.str); //通过demoKey.currentState来获取内部的属性
      },
      child: Container(
        child: Demo(
          key: demoKey,  //将定义的key值传递给子组件的key
        ),
      ),
    );
  }
}

父组件主要:

  1. 定义GlobalKey的值
  2. 将key值传递给子组件
  3. 通过GlobalKey的值的currentState访问属性和方法