我按顺序处理控制器,我真的不知道这个错误是怎么发生的。
=小部件库捕获到异常=
_McCountingTextState通过其TickerProviderStateMixin创建了一个Ticker,但在mixin上调用dispose()时,该Ticker仍然处于活动状态。在调用super.dispose()之前,必须处理所有Ticker。
AnimationController使用的代码应该通过调用AnimationController本身的dispose()来释放。否则,代码会泄漏。
import 'package:flutter/material.dart';
import 'package:landlore/model/roomInfo.dart';
class RoomEditScreen extends StatefulWidget {
final RoomInfo roomInfo;
RoomEditScreen({super.key, required this.roomInfo});
@override
State<RoomEditScreen> createState() => _RoomEditScreenState();
}
class _RoomEditScreenState extends State<RoomEditScreen> {
RoomInfo? roomInfo;
TextEditingController c1 = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: TextField(
controller: c1,
onChanged: (value) {
print(value);
},
),
);
}
@override
void dispose() {
c1.dispose();
super.dispose();
}
}
字符串
1条答案
按热度按时间pw136qt21#
查找小部件中的任何AnimationController示例。它可能位于同一个_RoomEditScreenState类中,或者位于属于同一屏幕或导航流的另一个小部件中。
确保在State类的dispose()方法中调用AnimationController上的dispose()。这应该在调用super.dispose()之前完成。它应该看起来像这样:
字符串
确保AnimationController在initState()方法中初始化,并且仅在状态的生命周期内使用。如果在_RoomEditScreenState中找不到AnimationController,请检查属于同一屏幕或导航流的其他小部件。
请记住,每个AnimationController都应该被释放,以防止内存泄漏和其他副作用,比如您遇到的副作用。