我正在使用 VoidCallback 从子小部件调用 setState 。但回调函数根本没有执行。
下面是我的代码的本质。
子部件:
class TextFormMentorHashtag extends StatefulWidget {
const TextFormMentorHashtag({Key? key, required this.callback}) : super(key: key);
final VoidCallback callback;
@override
_TextFormMentorHashtagState createState() =>
_TextFormMentorHashtagState();
}
class _TextFormMentorHashtagState extends State<TextFormMentorHashtag> {
@override
Widget build(BuildContext context) {
...
TextFormField(
...
onChanged: (value) {
if(_formKey.currentState!.validate()) {
...
print('call callback');
widget.callback;
}
}
)
}
}
父小部件:
class ApplyMentorPage extends StatefulWidget {
const ApplyMentorPage({Key? key}) : super(key: key);
@override
State<ApplyMentorPage> createState() => _ApplyMentorPageState();
}
class _ApplyMentorPageState extends State<ApplyMentorPage> {
...
bool _disabled = true;
@override
Widget build(BuildContext context) {
void callback() {
print('callback called');
setState(() {
_disabled = !_mentorProvider.check();
});
}
return Scaffold(
...
child: Column(
children: [
TextFormMentorHashtag(callback: callback),
...
// _disabled turns submit button on and off in the later code
当我运行代码并按子小部件终端时,会打印“调用回调”,但不会打印“调用回调”。我缺少什么?
你没有打电话callback
在你的_TextFormMentorHashtagState
。你应该这样称呼它widget.callback()
or widget.callback.invoke()
.
完整代码:
class _TextFormMentorHashtagState extends State<TextFormMentorHashtag> {
@override
Widget build(BuildContext context) {
...
TextFormField(
...
onChanged: (value) {
if(_formKey.currentState!.validate()) {
...
print('call callback');
// or widget.callback()
widget.callback.invoke();
}
}
)
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)