Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How To Override the “Back” button in Flutter? [duplicate]

Tags:

flutter

People also ask

How do you override the Back button in Flutter?

Here's how you do it: Step 1: Wrap your Scaffold widget inside the WillPopScope widget. Step 2: Inside the WillPopScope, add the onWillPop parameter and then create a new method and assign it to handle the callback. Step 3: Inside the callback, return AlertDialog with options such as Yes and No using the TextButton .

What does @override do in Flutter?

The @override annotation applies to instance methods, instance getters, instance setters and instance variables (fields). When applied to an instance variable, it means that the variable's implicit getter and setter (if any) are marked as overriding. It has no effect on the variable itself.


You can use WillPopScope to achieve this.

Example:

import 'dart:async';

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  HomePage({Key key, this.title}) :super(key: key);

  final String title;

  @override
  State<StatefulWidget> createState() => new _HomePageState();
}

class _HomePageState extends State<HomePage> {

  Future<bool> _onWillPop() 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>[
          TextButton(
            onPressed: () => Navigator.of(context).pop(false),
            child: new Text('No'),
          ),
          TextButton(
            onPressed: () => Navigator.of(context).pop(true),
            child: new Text('Yes'),
          ),
        ],
      ),
    )) ?? false;
  }

  @override
  Widget build(BuildContext context) {
    return new WillPopScope(
      onWillPop: _onWillPop,
      child: new Scaffold(
        appBar: new AppBar(
          title: new Text("Home Page"),
        ),
        body: new Center(
          child: new Text("Home Page"),
        ),
      ),
    );
  }
}

The ??-operator checks for null, see here. This is important because if you click outside the dialog, showDialog returns null and in this case false is returned.

Hope it helped!