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

Flutter返回按钮异常:按下后关闭应用而非回退页面

Flutter路由回退异常:按下返回键直接关闭应用而非回退上一页

我通过Navigator.of(context).push跳转多个路由,按下返回按钮时,预期Flutter执行pop()回退上一页,但实际直接关闭了应用。

路由流程如下:
Test1Page -> Test2Page -> Test3Page -> 按下返回按钮

  • 预期行为:回退到Test2Page
  • 实际行为:关闭应用

相关代码

Test1Page

import 'package:flutter/material.dart';
import 'package:simple_chat_grpc_flutter/src/pages/test2_page.dart';

class Test1Page extends StatelessWidget {
  const Test1Page({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return TextButton(
        onPressed: () => Navigator.of(context).push(MaterialPageRoute(
              builder: (context) => const Test2Page(),
            )),
        child: const Text('goto 2'));
  }
}

Test2Page

import 'package:flutter/material.dart';
import 'package:simple_chat_grpc_flutter/src/pages/test3_page.dart';

class Test2Page extends StatelessWidget {
  const Test2Page({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return TextButton(
        onPressed: () => Navigator.of(context).push(MaterialPageRoute(
              builder: (context) => const Test3Page(),
            )),
        child: const Text('goto 3'));
  }
}

Test3Page

import 'package:flutter/material.dart';

import 'test1_page.dart';

class Test3Page extends StatelessWidget {
  const Test3Page({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return TextButton(
        onPressed: () => Navigator.of(context).push(MaterialPageRoute(
              builder: (context) => const Test1Page(),
            )),
        child: const Text('goto 1'));
  }
}

MyApp

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:simple_chat_grpc_flutter/src/pages/test1_page.dart';

class MyApp extends StatelessWidget {
  const MyApp({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      restorationScopeId: 'app',
      localizationsDelegates: const [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: const [
        Locale('en', ''), // English, no country code
      ],
      onGenerateTitle: (BuildContext context) => AppLocalizations.of(context)!.appTitle,

      home: const Test1Page(),
    );
  }
}

main.dart

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart';

import 'src/app.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Disable the 'debug' banner
  WidgetsApp.debugAllowBannerOverride = false;

  HydratedBloc.storage = await HydratedStorage.build(
    storageDirectory: kIsWeb
        ? HydratedStorage.webStorageDirectory
        : await getTemporaryDirectory(),
  );
  runApp(const MyApp());
}

Flutter Doctor信息

[√] Flutter (Channel stable, 3.3.9, on Microsoft Windows [Version 10.0.19045.2251], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Build Tools 2019 16.11.5)
[!] Android Studio (version 2022.1)
    X Unable to find bundled Java version.
[!] Android Studio (version 2022.2)
    X Unable to find bundled Java version.
[√] IntelliJ IDEA Ultimate Edition (version 2022.2)
[√] VS Code (version 1.73.1)
[√] Connected device (4 available)
[√] HTTP Host Availability

更新说明

我花了一天排查,确定项目存在异常(此前该逻辑运行正常),没有简单解决方案。
临时解决方法:新建项目并复制所有代码后,功能恢复正常。
补充:执行flutter create --platforms android .命令无效,希望了解该问题的出现原因。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:50:23