TextField 사용시 반드시 해줘야 하는게 있다.
바로 controller의 dispose인데
만약 까먹지 않고 하지 않았다고 하면 페이지는 사라져도 controller는 메모리에 계속 남게되어 leak이 된다.
dispose하는 방법은 간단한데,
Widget을 StatefulWidget으로 변경한뒤 dispose 메서드를 override해주면서
controller의 dispose함수를 같이 호출해 주는것이다.
아래 코드를 보면 void dispose부분에서 controller의 dispose메서드를 호출하는부분을 확인할 수 있다.
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
TextEditingController _controller = TextEditingController();
@override
void dispose() {
// TODO: implement dispose
_controller.dispose();
super.dispose();
}
void onSearch(String text) {
print(text);
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: Scaffold(
appBar: AppBar(
title: TextField(
onSubmitted: onSearch,
controller: _controller,
maxLines: 1,
decoration: InputDecoration(
hintText: 'Search any book',
border: MaterialStateOutlineInputBorder.resolveWith((states) {
if (states.contains(WidgetState.focused)) {
return OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color: Colors.blue,
width: 2,
),
);
} else {
return OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
);
}
}),
),
),
),
body: Center(
child: Text('This is the home page'),
),
),
);
}
}
728x90
'Programming > Flutter' 카테고리의 다른 글
[내일배움] flutter Builder Widget사용법 (0) | 2024.12.03 |
---|---|
[내일배움] Flutter WebView 종류 (0) | 2024.12.02 |
[내일배움] Flutter TextField 사용시 빈화면 클릭할때 키보드 비활성화 (0) | 2024.12.02 |
[내일배움] 데이터 통신 기초와 JSON (1) | 2024.11.29 |
[내일배움] 플러터 기본 폴더 구성 (0) | 2024.11.11 |