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
相关产品推荐
相关产品推荐

