On my Home widget, when user taps system back button, I want to show a confirmation dialog asking "Do you want to exit the App?"
I don't understand how I should override or handle the system back button.
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.
leading that the AppBar takes. You can specify an IconButton with what every icon you want or any other widgets too.varvalue ?? false instruction tells the compiler to return false if the varvalue is null