Flutter StatefulWidget函数字段TypeError错误修复求助
解决AwaitJumpPage的_TypeError类型不匹配问题
错误信息
Exception has occurred._TypeError (type '(ProfileDataset) => SelfProfilePage' is not a subtype of type '(dynamic) => Widget')
问题代码
AwaitJumpPage实现代码
import 'package:flutter/material.dart'; class AwaitJumpPage<T> extends StatefulWidget { const AwaitJumpPage({ super.key, required this.future, required this.callback, }); final Future<T> future; final Widget Function(T) callback; @override State<AwaitJumpPage> createState() => _AwaitJumpPageState<T>(); } class _AwaitJumpPageState<T> extends State<AwaitJumpPage> { @override void initState() { widget.future.then((value) { if (mounted) { Navigator.pushReplacement(context, MaterialPageRoute( builder: (context) { // ignore: unnecessary_cast final fun = widget.callback as Widget Function(dynamic); return fun(value); }, )); } }); super.initState(); } @override Widget build(BuildContext context) { return const Scaffold( body: Center( child: CircularProgressIndicator(), ), ); } }
调用代码
Navigator.of(context).push( MaterialPageRoute( builder: (context) { return AwaitJumpPage( future: [[返回ProfileDataset的Future]], callback: (data){ return SelfProfilePage(data); } ); }, ), );
错误原因
_AwaitJumpPageState类未绑定对应泛型父类,导致widget被推断为AwaitJumpPage<dynamic>,无法正确识别指定的泛型类型T- 强行将
Widget Function(T)转换为Widget Function(dynamic),破坏了Dart的类型安全机制,引发类型不匹配 - 调用
AwaitJumpPage时未显式指定泛型参数,泛型类型被默认推断为dynamic,与实际传入的ProfileDataset类型冲突
修复方案
1. 修正State类的泛型绑定
将_AwaitJumpPageState的父类指定为State<AwaitJumpPage<T>>,确保widget能正确获取泛型类型:
class _AwaitJumpPageState<T> extends State<AwaitJumpPage<T>> { // 其余代码不变 }
2. 移除不必要的类型转换
直接调用widget.callback(value),无需强制类型转换:
Navigator.pushReplacement(context, MaterialPageRoute( builder: (context) { return widget.callback(value); }, ));
3. 调用时显式指定泛型参数
创建AwaitJumpPage实例时,明确指定泛型类型为ProfileDataset:
return AwaitJumpPage<ProfileDataset>( future: [[返回ProfileDataset的Future]], callback: (data){ return SelfProfilePage(data); } );
完整修复后的AwaitJumpPage代码
import 'package:flutter/material.dart'; class AwaitJumpPage<T> extends StatefulWidget { const AwaitJumpPage({ super.key, required this.future, required this.callback, }); final Future<T> future; final Widget Function(T) callback; @override State<AwaitJumpPage<T>> createState() => _AwaitJumpPageState<T>(); } class _AwaitJumpPageState<T> extends State<AwaitJumpPage<T>> { @override void initState() { widget.future.then((value) { if (mounted) { Navigator.pushReplacement(context, MaterialPageRoute( builder: (context) { return widget.callback(value); }, )); } }); super.initState(); } @override Widget build(BuildContext context) { return const Scaffold( body: Center( child: CircularProgressIndicator(), ), ); } }
内容的提问来源于stack exchange,提问作者normidar
相关产品推荐
相关产品推荐

