반응형

GlobalKey는 Flutter에서 사용되는 키 중 하나로, 특정 위젯의 상태와 관련된 작업을 수행하거나 다른 위젯에서 접근할 수 있게 하기 위해 사용됩니다. 특히, GlobalKey는 위젯의 상태를 글로벌하게 관리하거나 여러 위젯 트리 간에 동일한 상태를 공유해야 할 때 유용합니다.

주요 사용 사례:

  1. 상태 접근 및 변경:
    GlobalKey를 사용하면 StatefulWidget의 상태에 접근하여 상태를 변경할 수 있습니다. 이는 위젯 트리의 다른 부분에서 해당 위젯의 상태를 변경할 필요가 있을 때 유용합니다.
  2. 위젯 간 통신:
    GlobalKey를 사용하여 두 개 이상의 위젯 간에 상태나 데이터를 공유할 수 있습니다. 예를 들어, Form 위젯과 그 안에 포함된 TextFormField 위젯 간의 상호 작용에서 사용됩니다.
  3. 위젯의 위치나 크기 얻기:
    GlobalKey를 사용하면 위젯의 위치나 크기를 쉽게 얻을 수 있습니다. 이는 레이아웃 계산이나 애니메이션을 구현할 때 유용합니다.

사용 예제:

아래는 GlobalKey를 사용하여 StatefulWidget의 상태에 접근하고 변경하는 간단한 예제입니다.

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 {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<_MyChildWidgetState> _key = GlobalKey();

  void _incrementCounter() {
    _key.currentState?.increment();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GlobalKey Example'),
      ),
      body: Center(
        child: MyChildWidget(key: _key),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

class MyChildWidget extends StatefulWidget {
  MyChildWidget({Key? key}) : super(key: key);

  @override
  _MyChildWidgetState createState() => _MyChildWidgetState();
}

class _MyChildWidgetState extends State<MyChildWidget> {
  int _counter = 0;

  void increment() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Text(
      'Counter: $_counter',
      style: Theme.of(context).textTheme.headline4,
    );
  }
}

 

이 예제에서, GlobalKey를 사용하여 MyChildWidget의 상태에 접근하고 FloatingActionButton을 눌렀을 때 MyChildWidget의 상태를 변경합니다.

GlobalKey를 사용하면 특정 위젯의 상태를 손쉽게 접근하고 조작할 수 있어 복잡한 위젯 트리에서도 효율적인 상태 관리를 할 수 있습니다.

반응형

+ Recent posts