|
- import 'dart:async';
-
- import 'package:farm_tpf/custom_model/user.dart';
- import 'package:farm_tpf/custom_model/user_request.dart';
- import 'package:farm_tpf/data/api/dio_provider.dart';
- import 'package:farm_tpf/data/api/rest_client.dart';
- import 'package:farm_tpf/utils/const_common.dart';
- import 'package:farm_tpf/utils/pref.dart';
-
- enum AuthenticationStatus { unknown, authenticated, unauthenticated }
-
- class AuthenticationRepository {
- final _controller = StreamController<AuthenticationStatus>();
- final dio = DioProvider.instance();
- final pref = LocalPref();
-
- Stream<AuthenticationStatus> get status async* {
- try {
- var token = await pref.getString(DATA_CONST.TOKEN_KEY);
- var expiredTime = await pref.getString(DATA_CONST.EXPIRED_TIME);
- int currentTime = DateTime.now().millisecondsSinceEpoch;
- bool isNotExpired =
- (currentTime - int.tryParse(expiredTime)) < ConstCommon.kExpiredTime;
-
- if (token.isNotEmpty && isNotExpired) {
- yield AuthenticationStatus.authenticated;
- } else {
- yield AuthenticationStatus.unauthenticated;
- }
- } catch (_) {
- yield AuthenticationStatus.unauthenticated;
- }
- yield* _controller.stream;
- }
-
- Future<User> signInWithCredentials(String username, String password) {
- final client = RestClient(dio);
- var result =
- client.login(UserRequest(username: username, password: password));
- return result;
- }
-
- void logOut() {
- pref.saveString(DATA_CONST.TOKEN_KEY, "");
- _controller.add(AuthenticationStatus.unauthenticated);
- }
-
- void dispose() => _controller.close();
- }
|