Как передать данные другому окну и запретить возвращаться назад?
У меня есть 2 окна.Первое это, например, loginScreen().В нём я хочу перейти на второе окно mainScreen() и передать туда данные:
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MainScreen(token: "qwerty"),
)
);
Но из-за Navigator.push сверху слева появляется кнопка назад
Почитал,что эту кнопку можно убрать при помощи
AppBar(
automaticallyImplyLeading: false
)
Но тогда при нажатии аппаратной кнопки назад, он всё равно возвращается на первое окно loginScreen().Как мне тогда менять окно?
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
Используйте WillPopScope, если он возвращает false, то переход назад по нажатию системной кнопкой будет проигнорировано.
import 'dart:async';
import 'package:flutter/material.dart';
class MainScreen extends StatefulWidget {
MainScreen({Key key, this.title}) :super(key: key);
final String title;
@override
State<StatefulWidget> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
Future<bool> _onWillPop() async {
return false;
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
return false;
},
child: Scaffold(
appBar: AppBar(
title: Text("Main Screen"),
automaticallyImplyLeading: false,
),
body: Center(
child: Text("Main Screen"),
),
),
);
}
}
А вам точно нужен Navigator.push? Просто для вашего случая больше подходит Navigator.pushAndRemoveUntil, который удалит предыдущую историю навигации. Вот пример:
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => MainScreen(token: "qwerty"),
),
(Route<dynamic> route) => false,
);