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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:37:17