个人技术分享

在Flutter中,GlobalKey是一种特殊的键,可以标识Widget树中的特定Widget,并允许直接与该Widget交互。通常,GlobalKey用于获取对Widget状态的访问权限,尤其是State对象。

注意:

GlobalKey不应该在build方法中初始化,否则会每次build都重建GlobalKey,更好的办法是让State对象拥有GlobalKey对象,

然后在 State.initState 的方法中初始化GlobalKey。

flutter中文网

flutter开发

以下是如何使用GlobalKey的基本步骤:

创建GlobalKey实例。

将GlobalKey传递给需要访问的Widget的key参数。

使用GlobalKey来获取对Widget状态的访问权限。

示例代码:

import 'package:flutter/material.dart';
 
void main() => runApp(MyApp());
 
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}
 
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);
 
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
 
class _MyHomePageState extends State<MyHomePage> {
  // 创建GlobalKey实例
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey();
 
  // 显示SnackBar的函数
  void _showSnackBar() {
    // 使用GlobalKey访问特定Widget的状态
    _scaffoldKey.currentState.showSnackBar(SnackBar(
      content: Text('这是一个SnackBar'),
    ));
  }
 
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey, // 将GlobalKey传递给Scaffold的key参数
      appBar: AppBar(
        title: Text('Flutter GlobalKey示例'),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: _showSnackBar, // 点击按钮时调用_showSnackBar函数
          child: Text('显示SnackBar'),
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个GlobalKey<ScaffoldState>,并将它传递给了Scaffold的key参数。这样我们就可以在_MyHomePageState的_showSnackBar方法中通过_scaffoldKey.currentState访问到Scaffold的状态,并调用showSnackBar方法来显示一个SnackBar。