
Chào các bạn. Lại là mình đây! Bài viết hôm nay mình viết theo phong cách khác với các bài viết trước. Các bạn thích phong cách viết nào hơn? Comment cho mình biết với nhé!
Các ứng dụng hiện nay hầu hết đều có phần xử lý login hoặc logout. Sau khi login xong thì xử lí logic app theo flow định sẵn thì không có gì để bàn cả. Nhưng khi logout các bạn phải quay trở lại màn hình login và clear toàn bộ các page trong stack củng như là các dữ liệu đã lưu trước đó. Mục tiêu là restart lại ứng dụng của các bạn làm cho nó trông như là mới được khởi động là không lưu lại gì cả.
Khi làm project có liên quan tới chức năng nói trên, mình đã tìm ra được một cách để làm. Trong bài viết này, mình sẽ không giải thích nhiều chỉ tập trung vào giới thiệu giải pháp cho các bạn. Các bạn có thể comment chỗ các bạn không hiểu nhé.
Let’s go!
Thông thường, chúng ta hay dùng

để không phải quay lại màn hình đó nữa. Nhưng các task vẫn còn đó và sẽ xảy ra một số vấn đề như hiển thị nút back và lỗi flow đã định.
Có nhiều cách giải quyết khác nhau cho vấn đề này. Nhưng mình mạo muội xin phép giới thiệu với các bạn widget RestartApp.

import 'package:flutter/material.dart'; class RestarApp extends StatefulWidget { RestarApp({this.child}); final Widget child; static void restartApp(BuildContext context) { context.findAncestorStateOfType<_RestarAppState>().restartApp(); } @override _RestarAppState createState() => _RestarAppState(); } class _RestarAppState extends State<RestarApp>{ Key key = UniqueKey(); void restartApp() { setState(() { key = UniqueKey(); }); } @override Widget build(BuildContext context) { return KeyedSubtree( key: key, child: widget.child, ); } }
Sau khi tạo xong widget, các bạn cần wrap nó với MyApp trong main.dart

Trong event xử lý logout các bạn gọi

Sau lệnh này, ứng dụng của các bạn sẽ tự động restart và vào lại màn hình đầu tiên để tiếp tục vào login.
Kết luận
Các bạn hãy comment về kết quả áp dụng cho mình biết với nhé!
One Comment
#10. Flutter: Login one time! - CodePSoft
[…] đều chỉ đăng nhập một lần cho tới khi nào thực hiện logout. Ở bài số #5 Xử lý LOGIN và LOGOUT như thế nào cho LIKE A BOSS ? và bài số #6: Xử lí Dark Mode real-time, mình có đề cập tới vấn đề này. Và […]