Флаттер: различные маршруты для кнопок приложения и телефона назад - PullRequest
1 голос
/ 13 апреля 2020

Как настроить разные маршруты для кнопок панели приложения и телефона?

Для кнопки возврата панели приложений она будет перенаправлена ​​на предыдущий экран. Для кнопки возврата телефона она закроется и выйдет из приложения.

В настоящее время в приведенном ниже коде закройте и закройте приложение

class _TestState extends State<Test> {
  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () => exitApp(context),
      child: Scaffold(
        appBar: AppBar(
          title: Text('If appbar arrow pressed, go Back Previous Page'),
          //automaticallyImplyLeading: false,
        ),
        body: Container()
      ),
    );
  }
}

Из exitApp.dart

Future<bool> exitApp(BuildContext context) async {
  return (await showDialog(
    context: context,
    builder: (context) => new AlertDialog(
      title: new Text('Are you sure?'),
      content: new Text('Do you want to exit an App'),
      actions: <Widget>[
        new FlatButton(
          onPressed: () => Navigator.of(context).pop(false),
          child: new Text('No'),
        ),
        new FlatButton(
          onPressed:  () => SystemNavigator.pop(), // () => exit(0), //() => Navigator.of(context).pop(true),
          child: new Text('Yes'),
        ),
      ],
    ),
  )) ??
      false;
}

Заранее спасибо.

1 Ответ

1 голос
/ 13 апреля 2020

Укажите AppBar свойство leading и назначьте его, например, для IconButton:

AppBar(
    leading: IconButton(icon: Icon(Icons.arrow_back),
        onPressed: routeToPreviousScreen(),
    )
)

А для виджета WillPopScope укажите функцию выхода:

WillPopScope(onWillPop: () async => exitApp(context),)

Теперь вы назначили кнопке AppBar назад и кнопке возврата телефона две разные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...