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

Flutter go_router报错:表达式类型为void无法使用

问题解决:go_router中pushNamed返回void无法赋值的错误

错误原因

context.pushNamed('location')返回类型为void,无法通过await接收返回值;同时你在location页面使用context.goNamed('home')的方式无法将数据回传给上一页——goNamed是直接导航到目标页面,不会触发返回值传递逻辑。

解决步骤

1. 修改location页面的返回逻辑

将location.dart中的context.goNamed('home', extra: instance);替换为context.pop(instance);,通过pop方法将数据回传给上一页:

class _LocationState extends State<Location> {
    ...
  void updateTime(index) async {
      WorldTime instance = locations[index];
      await instance.getTime();
      // 用pop返回数据给上一页,而非直接跳转home
      context.pop(instance);
  }
}

2. 修正home页面的pushNamed调用

确保导入package:go_router/go_router.dart,并正确接收返回值(指定泛型类型提升类型安全性):

// 顶部导入go_router包
import 'package:go_router/go_router.dart';

onPressed: () async {                            
    // 指定泛型为WorldTime,避免使用dynamic
    final WorldTime? result = await context.pushNamed<WorldTime>('location');
    if (result != null) {
        setState(() {
            mydata = result;
        }); 
    }
},

3. 确认路由配置

确保GoRouter路由配置中,location页面是可被push的常规路由,示例配置:

final GoRouter router = GoRouter(
  routes: <RouteBase>[
    GoRoute(
      path: '/',
      name: 'home',
      builder: (BuildContext context, GoRouterState state) {
        return const HomePage();
      },
    ),
    GoRoute(
      path: '/location',
      name: 'location',
      builder: (BuildContext context, GoRouterState state) {
        return const LocationPage();
      },
    ),
  ],
);

修改完成后,home页面通过pushNamed跳转到location页面,location页面完成操作后用pop返回数据,home页面即可正确接收并更新状态。

内容的提问来源于stack exchange,提问作者Duddy67

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:17:50