반응형
GlobalKey
는 Flutter에서 사용되는 키 중 하나로, 특정 위젯의 상태와 관련된 작업을 수행하거나 다른 위젯에서 접근할 수 있게 하기 위해 사용됩니다. 특히, GlobalKey
는 위젯의 상태를 글로벌하게 관리하거나 여러 위젯 트리 간에 동일한 상태를 공유해야 할 때 유용합니다.
주요 사용 사례:
- 상태 접근 및 변경:
GlobalKey
를 사용하면 StatefulWidget의 상태에 접근하여 상태를 변경할 수 있습니다. 이는 위젯 트리의 다른 부분에서 해당 위젯의 상태를 변경할 필요가 있을 때 유용합니다. - 위젯 간 통신:
GlobalKey
를 사용하여 두 개 이상의 위젯 간에 상태나 데이터를 공유할 수 있습니다. 예를 들어, Form 위젯과 그 안에 포함된 TextFormField 위젯 간의 상호 작용에서 사용됩니다. - 위젯의 위치나 크기 얻기:
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
를 사용하면 특정 위젯의 상태를 손쉽게 접근하고 조작할 수 있어 복잡한 위젯 트리에서도 효율적인 상태 관리를 할 수 있습니다.
반응형
'[====== Development ======] > Flutter' 카테고리의 다른 글
[Flutter] 여러가지 생성자 사용법 (1) | 2024.07.12 |
---|---|
[Flutter] 자식 Widget에서 부모 Widget 으로 이벤트 전달 (0) | 2024.07.07 |
[Flutter] DefaultTabController 에 대해서.. (0) | 2024.06.20 |
[Flutter] FirebaseAuth 상태에 따라 자동으로 Screen 이동하기 (0) | 2024.06.19 |
showModalBottomSheet 안의 TextField 가 키보드에 가려지지 않게 하는 방법 (0) | 2024.06.12 |