Implement realtime online/offline status with flutter and firebase

5,174

Solution 1

You can extend your statefulWidget State class with WidgetsBindingObserver like

class _HomePageState extends State<HomePage>
    with WidgetsBindingObserver

and initState method add WidgetsBinding.instance.addObserver(this);.

@override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

Later overide didChangeAppLifecycleState method

@override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed)
      //TODO: set status to online here in firestore
    else
      //TODO: set status to offline here in firestore
  }

Solution 2

IT CAN DONE BY WidgetsBindingObserver();

class _HomeState extends State<Home> with WidgetsBindingObserver {...}

initialize it first

@override
void initState() {
super.initState();
WidgetsBinding.instance!.addObserver(this);
}

After add this function to listen for app state didChangeAppLifecycleState()

String? changes;

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);

final isBg = state == AppLifecycleState.paused;
final isClosed = state == AppLifecycleState.detached;
final isScreen = state == AppLifecycleState.resumed;

isBg || isScreen == true || isClosed == false
    ? setState(() {
      // SET ONLINE
    })
    : setState(() {
      //SET  OFFLINE

    });
print('CHANGES IS : $changes ');

}

String? changes Contains Your app State! Be Happy You Can what you want , This can notify Online status like Whatsapp Messenger!

MyCode :

    isBg || isScreen == true || isClosed == false
    ? setState(() {
      changes = "User is online"
    })
    : setState(() {
      changes = "User is Offline"
    });
    print('CHANGES IS : $changes ');
Share:
5,174
dune98
Author by

dune98

Updated on November 19, 2022

Comments

  • dune98
    dune98 over 1 year

    Hy, what is the best way to show in an app if the user is online or offline?

    Frontend -> Flutter

    Backend -> Firestore Cloud and Firebase Auth.

    I have a collection of users in firestore that contains documents. Each document is a user and contain "status" field. In flutter i can update this field every time that user sign in or log out but if you close the app it is not updated.