Existe uma maneira de desativar o botão Voltar do Android quando estiver em uma página específica?
class WakeUpApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: "Time To Wake Up ?",
home: new WakeUpHome(),
routes: <String, WidgetBuilder>{
'/pageOne': (BuildContext context) => new pageOne(),
'/pageTwo': (BuildContext context) => new pageTwo(),
},
);
}
}
Na página Um, tenho um botão para ir para a página Dois:
new FloatingActionButton(
onPressed: () {
Navigator.of(context).pushNamed('/pageTwo');
},
)
Meu problema é que, se pressiono a seta Voltar na parte inferior da tela do Android, volto para a página Um. Eu gostaria que este botão não aparecesse. Idealmente, não gostaria de ter uma saída possível desta tela a menos que o usuário, por exemplo, mantenha o dedo pressionado na tela por 5 segundos. (Estou tentando escrever um aplicativo para crianças pequenas e gostaria que apenas os pais pudessem navegar para fora da tela específica).
onWillPop
propriedade do Form . Ele tem acesso ao estado do formulário e pode primeiro verificar se há algum estado que o usuário não queira perder.onWillPop: () async { onBack(); // "DO YOUR FUNCTION IS HERE WHEN POP" return false; }
Como Rémi Rousselet apontou,
WillPopScope
geralmente é o caminho a percorrer. No entanto, se você estiver desenvolvendo um widget com estado que deve reagir diretamente ao botão Voltar, você pode usar isto:https://pub.dartlang.org/packages/back_button_interceptor
fonte
Embora a resposta de Remi esteja certa, geralmente você não deseja simplesmente bloquear o botão Voltar, mas deseja que um usuário confirme a saída.
Você pode fazer isso de maneira semelhante, obtendo uma resposta na caixa de diálogo de confirmação, porque
onWillPop
é um futuro.fonte
Estou postando isso aqui, caso alguém aí encontre e deseje encontrar um exemplo simples https://gist.github.com/b-cancel/0ca372017a25f0c120b14dfca3591aa5
fonte
Você pode usar
Future.value(bool)
para controlar o botão Voltar.fonte
onWillPop: () async => _allow
.Future.value()
ligação.Eu usei o mixin e o widget WillPopScope simplesmente não consegui fazer o trabalho para mim. Esta é a melhor abordagem que encontrei, muito melhor do que WillPopScope na minha opinião.
final bool canPop = ModalRoute.of(context)?.canPop ?? false;
Usei assim dentro do appbar:
fonte
A resposta talvez você saiba que é usar WillPopScope , mas infelizmente no IOS você não pode deslizar para voltar à página anterior, então vamos personalizar seu MaterialPageRoute:
Agora você pode usar o WillPopScope e deslizar para trás para funcionar no IOS. A resposta com os detalhes está aqui: https://github.com/flutter/flutter/issues/14203#issuecomment-540663717
fonte
Basta adicionar um contêiner no início do Appbar que esconde o botão Voltar.
fonte