Study Record

[Flutter] 뒤로 가기(back press) 버튼 컨트롤 (WillPopScope) 본문

Flutter

[Flutter] 뒤로 가기(back press) 버튼 컨트롤 (WillPopScope)

초코초코초코 2023. 4. 24. 14:18
728x90

🎁 WillPopScope Widget

안드로이드에서 뒤로 가기 버튼을 누르거나 system back button 이 실행되면 현재 화면이 종료되거나(Route Stack Pop) 앱이 종료된다. 이러한 액션이 실행되기 전에 콜백 이벤트를 받아 액션을 실행할지 말지 정할 수 있게 해주는 위젯이 WillPopScope 이다.

onWillPop 인자로 콜백 이벤트 인자를 받아 리턴값이 true 이면 액션을 그대로 실행하고 false 이면 액션을 실행하지 않는다.

WillPopScope(
  onWillPop: () async {
    return true;
  },
  child: Scaffold(
    body: Center(child: Text("back press test")),
  ),
);

 

 

😶 간단한 예시) 

뒤로 가기 버튼을 눌렀을 때 다이얼로그를 띄워 종료할지 안 할지 결정

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
  home: MyApp(),
  debugShowCheckedModeBanner: false,
));

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {
        return await showDialog<bool>(
          context: context,
          builder: (context) => AlertDialog(
            title: Text('종료하시겠습니까?'),
            actions: <Widget>[
              TextButton(
                onPressed: () => Navigator.of(context).pop(false),
                child: Text('아니요'),
              ),
              TextButton(
                onPressed: () => Navigator.of(context).pop(true),
                child: Text('네'),
              ),
            ],
          ),
        ) ?? false;
      },
      child: Scaffold(
        body: Center(child: Text("back press test")),
      ),
    );
  }
}

 

 

 

WillPopScope class - widgets library - Dart API

Registers a callback to veto attempts by the user to dismiss the enclosing ModalRoute. Whenever the back button is pressed, you will get a callback at onWillPop, which returns a Future. If the Future returns true, the screen is popped. link To create a loc

api.flutter.dev

 

 

728x90