Flutter路由生成器错误排查及按钮布局问题咨询
Flutter导航错误与布局疑问解答
一、导航错误修复(Could not find a generator for route...)
核心问题
你的blackops3.dart中重复创建了MaterialApp,Flutter的路由配置是绑定在根MaterialApp(main.dart里的实例)上的。当你在blackops3页面调用Navigator.pushReplacementNamed时,使用的是子MaterialApp的上下文,而这个子MaterialApp没有配置/bo3morgmap路由,因此抛出找不到路由的错误。
修改方案
删除blackops3.dart中的MaterialApp,直接返回Scaffold即可,修改后的代码:
import 'package:flutter/material.dart'; // 遵循Flutter命名规范,类名改为大驼峰 class BlackOps3 extends StatelessWidget { const BlackOps3({super.key}); @override Widget build(BuildContext context) { // 移除外层多余的MaterialApp return Scaffold( appBar: AppBar( leading: IconButton( icon: const Icon(Icons.arrow_back), onPressed: () => Navigator.of(context).pop(), ), title: const Text("Black Ops 3"), backgroundColor: const Color.fromARGB(255, 107, 21, 204), centerTitle: true, ), body: Column( children: [ Padding( padding: const EdgeInsets.all(8.0), child: Center( child: ElevatedButton( onPressed: () => Navigator.pushReplacementNamed(context, '/bo3morgmap'), child: const Text("Morg City Map"), ), ), ), Center( child: ElevatedButton( onPressed: () => Navigator.pushReplacementNamed(context, '/bo3morgmap'), child: const Text("Train Signs Helper"), ), ), ], ), ); } }
同时更新main.dart里的路由配置,同步类名的修改:
routes: { '/blackops3': (context) => const BlackOps3(), '/main': (context) => const MainApp(), '/bo3morgmap': (context) => const MorgMap(), // 建议把morgmap类名也改成MorgMap },
二、布局疑问解答
不需要把两个ElevatedButton放在同一个child里,你当前用Column包裹两个按钮的写法是正确的。如果想要优化布局体验,可以做以下调整:
- 给
Column添加mainAxisAlignment: MainAxisAlignment.center让按钮垂直居中 - 给
Column添加mainAxisSize: MainAxisSize.min避免占满整个垂直空间 - 给按钮统一添加垂直内边距,优化间距
示例优化代码:
body: Center( child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), child: ElevatedButton( onPressed: () => Navigator.pushReplacementNamed(context, '/bo3morgmap'), child: const Text("Morg City Map"), ), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), child: ElevatedButton( onPressed: () => Navigator.pushReplacementNamed(context, '/bo3morgmap'), child: const Text("Train Signs Helper"), ), ), ], ), ),
内容的提问来源于stack exchange,提问作者morybuzz
相关产品推荐
相关产品推荐

