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

