You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
            }
          );
        },
      ),
    );

错误原因

  1. _AwaitJumpPageState类未绑定对应泛型父类,导致widget被推断为AwaitJumpPage<dynamic>,无法正确识别指定的泛型类型T
  2. 强行将Widget Function(T)转换为Widget Function(dynamic),破坏了Dart的类型安全机制,引发类型不匹配
  3. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:53:21