From 4263997c3e419ef1cf7447d447c5582a322acf74 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Fri, 20 Jul 2018 18:14:18 +0200 Subject: Began basic login screen feature (mvp architecture) --- lib/auth.dart | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 lib/auth.dart (limited to 'lib/auth.dart') diff --git a/lib/auth.dart b/lib/auth.dart new file mode 100644 index 0000000..6ee8a0b --- /dev/null +++ b/lib/auth.dart @@ -0,0 +1,43 @@ +import 'package:beam_messenger/data/database_helper.dart'; + +enum AuthState { LOGGED_IN, LOGGED_OUT } + +abstract class AuthStateListener { + void onAuthStateChanged(AuthState state); +} + +// A naive implementation of Observer/Subscriber Pattern. Will do for now. +class AuthStateProvider { + static final AuthStateProvider _instance = new AuthStateProvider.internal(); + + List _subscribers; + + factory AuthStateProvider() => _instance; + AuthStateProvider.internal() { + _subscribers = new List(); + initState(); + } + + void initState() async { + var db = new DatabaseHelper(); + var isLoggedIn = await db.isLoggedIn(); + if (isLoggedIn) + notify(AuthState.LOGGED_IN); + else + notify(AuthState.LOGGED_OUT); + } + + void subscribe(AuthStateListener listener) { + _subscribers.add(listener); + } + + void dispose(AuthStateListener listener) { + for (var l in _subscribers) { + if (l == listener) _subscribers.remove(l); + } + } + + void notify(AuthState state) { + _subscribers.forEach((AuthStateListener s) => s.onAuthStateChanged(state)); + } +} -- cgit v1.2.3