Flutter: кнопка «Назад» в системе Android завершает приложение вместо открытия страницыAndroid

Форум для тех, кто программирует под Android
Anonymous
Flutter: кнопка «Назад» в системе Android завершает приложение вместо открытия страницы

Сообщение Anonymous »

Я разрабатываю приложение Flutter и столкнулся с проблемой с кнопкой «Назад» в системе Android. Когда я пытаюсь вернуться назад с помощью кнопки возврата системы Android, вместо открытия текущей страницы и возврата к предыдущей приложение закрывается. Я ожидаю, что когда я буду использовать системную навигацию на Android, экран настроек оплаты вернется к экрану настроек, а не просто выйдет из всего приложения.
Моя версия Flutter для проекта : 3.19.6
Версия Dart: Dart 3.3.4
settings.dart

Код: Выделить всё

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:example/theme/theme.dart';
import 'package:example/widgets/app_drawer.dart';

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

@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
backgroundColor: AppTheme.lightTheme.hintColor,
title: Text(
'Settings',
style: AppTheme.lightTheme.textTheme.displayMedium!
.copyWith(color: Colors.white),
textAlign: TextAlign.center,
),
centerTitle: true,
),
drawer: const AppDrawer(),
body: SafeArea(
child: SingleChildScrollView(
child: Container(
height: size.height,
width: size.width,
decoration: BoxDecoration(
color: AppTheme.lightTheme.hintColor,
),
child: Container(
height: size.height,
width: size.width,
decoration: BoxDecoration(
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(15),
topRight: Radius.circular(15),
),
color: AppTheme.lightTheme.dialogBackgroundColor,
),
child: Align(
alignment: Alignment.topLeft,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(left: 30, top: 30),
child: Text(
'Preference',
style: AppTheme.lightTheme.textTheme.headlineLarge!
.copyWith(fontSize: 18),
textAlign: TextAlign.left,
),
),
const SizedBox(
height: 10,
),
Padding(
padding: const EdgeInsets.only(left: 30),
child: OptionListItem(context, 'Appearance', '/home'),
),
Divider(
thickness: 0.5,
color: AppTheme.lightTheme.dividerColor,
),
Padding(
padding: const EdgeInsets.only(left: 30),
child: OptionListItem(context, 'Notifications', '/home'),
),
Divider(
thickness: 0.5,
color: AppTheme.lightTheme.dividerColor,
),
Padding(
padding: const EdgeInsets.only(left: 30),
child: OptionListItem(context, 'Accessibility', '/home'),
),
Divider(
thickness: 0.5,
color: AppTheme.lightTheme.dividerColor,
),
Padding(
padding: const EdgeInsets.only(left: 30),
child: OptionListItem(context, 'Language', '/home'),
),
Divider(
thickness: 0.5,
color: AppTheme.lightTheme.dividerColor,
),
const SizedBox(
height: 20,
),
Padding(
padding: const EdgeInsets.only(left: 30),
child: Text(
'Payments',
style: AppTheme.lightTheme.textTheme.headlineLarge!
.copyWith(fontSize: 18),
textAlign: TextAlign.left,
),
),
const SizedBox(
height: 10,
),
Padding(
padding: const EdgeInsets.only(left: 30),
child:  OptionListItem(
context, 'Payment Settings', '/payment_settings'),
),
Divider(
thickness: 0.5,
color: AppTheme.lightTheme.dividerColor,
),
],
),
),
),
),
),
),
);
}

Widget OptionListItem(BuildContext context, String label, String path) {
return GestureDetector(
onTap: () => GoRouter.of(context).push(path),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Container(
width: double.infinity,
height: 20,
child: Text(
label,
style: AppTheme.lightTheme.textTheme.displaySmall!
.copyWith(color: Colors.black, fontSize: 16),
),
),
));
}
}

pay_settings.dart

Код: Выделить всё

import 'package:flutter/material.dart';
import 'package:example/widgets/app_appbar.dart';

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

@override
Widget build(BuildContext context) {
return const Scaffold(
appBar: AppAppbar(
title: 'Payment Settings',
),
body: Center(
child: Text('This is the payment settings page.'),
),
);
}
}

routes.dart

Код: Выделить всё

import 'package:go_router/go_router.dart';
import 'package:example/page/home_screen.dart';
import 'package:example/page/payment_settings_page.dart';
import 'package:example/page/settings_screen.dart';

class AppRoute {
GoRouter route = GoRouter(
initialLocation: '/home',
routes: [
GoRoute(
path: '/',
builder: (context, state) => const Home(),
),
GoRoute(
path: '/home',
builder: (context, state) => const Home(),
),

GoRoute(
path: '/settings',
builder: (context, state) => const Settings(),
),

GoRoute(
path: '/payment_settings',
builder: (context, state) => const PaymentSettings(),
),

],
);
}

Я пробовал искать решения в Интернете и заметил, что некоторые люди говорят, что это проблема GoRouter. Но мне действительно нужен GoRouter для моего проекта, есть ли какое-нибудь решение, которое может помочь мне решить эту проблему?
Это сообщение, с которым я столкнулся
(https://github. com/flutter/flutter/issues/140869)

Подробнее здесь: https://stackoverflow.com/questions/785 ... pping-page

Вернуться в «Android»