|
- 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);
- var currentTime = DateTime.now().millisecondsSinceEpoch;
- var isNotExpired = (currentTime - (int.tryParse(expiredTime) ?? 0)) < 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) async {
- final client = RestClient(dio);
- try {
- var url = 'https://tpf.aztrace.vn/api/authenticate';
- var res = await dio.post(url, data: UserRequest(username: username, password: password));
- var user = User.fromJson(res.data);
- return user;
- // return ResponseUser.fromJson(res.data);
- } catch (e) {
- rethrow;
- }
- // var result = client.login(UserRequest(username: username, password: password));
- // return result;
- }
-
- void logOut() {
- _controller.add(AuthenticationStatus.unauthenticated);
- }
-
- void dispose() => _controller.close();
- }
|