我想在 initState 中創建一個 TextController,然后像處置中的好孩子一樣處置它。但由于某種原因,控制器在 intiState 之外不可用:
class _InputFieldEnterThingState extends State<InputFieldEnterThing> {
@override
void initState() {
TextEditingController textController =
TextEditingController(text: 'placeholder');
super.initState();
}
@override
void dispose() {
textController.dispose();
super.dispose();
}
它告訴我“textController”未在 dispose() 中定義......同樣,如果我嘗試在構建方法中使用它。就好像 varialbe 在 initState 中是嚴格本地的。我覺得我錯過了一些非常明顯的東西,但找不到它。
uj5u.com熱心網友回復:
textController是方法中的區域變數,initState你需要將他設為全域變數,dispose方法會識別他。
這樣做的方法:
class _InputFieldEnterThingState extends State<InputFieldEnterThing> {
TextEditingController textController; // make him global
@override
void initState() {
textController = // without redefine
TextEditingController(text: 'placeholder');
super.initState();
}
@override
void dispose() {
textController.dispose();
super.dispose();
}
uj5u.com熱心網友回復:
由于您在變數textController中宣告了變數initState,因此只能在initState. 如果你想textController在 dispose 中訪問,你必須在initState.
class _InputFieldEnterThingState extends State<InputFieldEnterThing> {
late TextEditingController textController;
@override
void initState() {
textController = TextEditingController(text: 'placeholder');
super.initState();
}
@override
void dispose() {
textController.dispose();
super.dispose();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/430635.html
