dispose
메서드는 StatefulWidget
의 생명 주기에서 위젯이 제거될 때 호출되는 메서드입니다. 이 메서드는 리소스를 해제하고 정리 작업을 수행하는 데 사용됩니다. 이를 통해 메모리 누수를 방지하고 애플리케이션의 성능을 최적화할 수 있습니다.
dispose
는 위젯이 트리에서 제거될 때 호출되는 메서드입니다.TextEditingController
, AnimationController
와 같은 컨트롤러를 해제합니다.StreamSubscription
을 취소합니다.Timer
를 취소합니다.import 'package:flutter/material.dart';
class MyStatefulWidget extends StatefulWidget {
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
final TextEditingController _controller = TextEditingController();
void dispose() {
_controller.dispose(); // 컨트롤러 해제
super.dispose();
}
Widget build(BuildContext context) {
return Center(
child: TextField(controller: _controller),
);
}
}
void main() {
runApp(MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('dispose Example')),
body: MyStatefulWidget(),
),
));
}
import 'package:flutter/material.dart';
import 'dart:async';
class MyStatefulWidget extends StatefulWidget {
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
late StreamSubscription<int> _subscription;
void initState() {
super.initState();
_subscription = Stream<int>.periodic(Duration(seconds: 1), (count) => count)
.listen((data) {
print('Data: $data');
});
}
void dispose() {
_subscription.cancel(); // 스트림 구독 취소
super.dispose();
}
Widget build(BuildContext context) {
return Center(
child: Text('Check console for stream data'),
);
}
}
void main() {
runApp(MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('dispose Example')),
body: MyStatefulWidget(),
),
));
}
TextEditingController
, AnimationController
등을 사용한 후 메모리 누수를 방지하기 위해 dispose
메서드에서 해제합니다.dispose
메서드를 재정의할 때는 항상 super.dispose()
를 호출하여 부모 클래스의 정리 작업을 수행합니다.dispose
메서드에서는 더 이상 필요하지 않은 모든 리소스를 정리하여 메모리 누수를 방지합니다.dispose
메서드를 사용하여 상태 관리를 최적화하고, 애플리케이션의 성능을 향상시킵니다.dispose
메서드의 공식 문서입니다.initState
메서드의 공식 문서입니다.StatefulWidget
클래스의 공식 문서입니다.