This commit is contained in:
J. A. Messias 2024-12-06 11:16:32 -03:00
parent 9797d8d811
commit b28ca12482
8 changed files with 97 additions and 41 deletions

View File

@ -1,3 +1,4 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:
- provider: true

View File

@ -4,6 +4,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hub/backend/notifications/firebase_messaging_service.dart';
import 'package:hub/features/home/index.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
@ -12,6 +13,9 @@ import 'package:hub/shared/components/molecules/drawer/index.dart';
import 'package:hub/shared/components/molecules/locals/index.dart';
import 'package:hub/shared/components/molecules/menu/index.dart';
import 'package:hub/shared/components/molecules/modules/index.dart';
import 'package:hub/shared/helpers/storage/base_storage.dart';
import 'package:hub/shared/extensions/string_extensions.dart';
import 'package:hub/shared/helpers/storage/storage_helper.dart';
class HomePageWidget extends StatefulWidget {
const HomePageWidget({
@ -24,12 +28,13 @@ class HomePageWidget extends StatefulWidget {
State<HomePageWidget> createState() => _HomePageWidgetState();
}
class _HomePageWidgetState extends State<HomePageWidget> {
class _HomePageWidgetState extends State<HomePageWidget> with WidgetsBindingObserver {
final scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (widget.update != null) {
await widget.update!(context);
@ -37,6 +42,41 @@ class _HomePageWidgetState extends State<HomePageWidget> {
});
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
Future<void> execute() async {
final isLogged = await StorageHelper().get(SecureStorageKey.isLogged.value);
log('isLogged: $isLogged');
if (isLogged.toBoolean()) {
WidgetsBinding.instance.addPostFrameCallback((_) async {
await LocalsRepositoryImpl().update(context);
await FirebaseMessagingService().updateDeviceToken();
});
}
}
if (state == AppLifecycleState.detached) {
print('AppLifecycleState.detached');
}
if (state == AppLifecycleState.resumed) {
print('AppLifecycleState.resumed');
}
if (state == AppLifecycleState.inactive) {
print('AppLifecycleState.inactive');
}
if (state == AppLifecycleState.paused) {
print('AppLifecycleState.paused');
}
if (state == AppLifecycleState.hidden) {
print('AppLifecycleState.hidden');
}
}
@override
Widget build(BuildContext context) {

View File

@ -60,7 +60,7 @@ class App extends StatefulWidget {
static _AppState of(BuildContext context) => context.findAncestorStateOfType<_AppState>()!;
}
class _AppState extends State<App> with WidgetsBindingObserver {
class _AppState extends State<App> {
Locale? _locale = FFLocalizations.getStoredLocale();
ThemeMode _themeMode = FlutterFlowTheme.themeMode;
late AppStateNotifier _appStateNotifier;
@ -169,7 +169,7 @@ class _AppState extends State<App> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
_appStateNotifier = AppStateNotifier.instance;
@ -185,23 +185,9 @@ class _AppState extends State<App> with WidgetsBindingObserver {
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
if (state == AppLifecycleState.detached) {
final isLogged = await StorageHelper().get(SecureStorageKey.isLogged.value);
log('isLogged: $isLogged');
if (isLogged.toBoolean()) {
LocalsRepositoryImpl.license.add(false);
final response = await LocalsRepositoryImpl().update(context);
LocalsRepositoryImpl.license.add(response);
await FirebaseMessagingService().updateDeviceToken();
}
}
}
@override
Widget build(BuildContext context) {

View File

@ -1,3 +1,18 @@
abstract class LocalsLocalDataSource {}
import 'package:hub/shared/helpers/storage/base_storage.dart';
import 'package:hub/shared/helpers/storage/storage_helper.dart';
class LocalsLocalDataSourceImpl {}
abstract class LocalsLocalDataSource {
Future<void> unlinkLocal();
}
class LocalsLocalDataSourceImpl {
Future<void> unlinkLocal() async {
await StorageHelper().set(KeychainStorageKey.clientUUID.value, '');
await StorageHelper().set(KeychainStorageKey.ownerName.value, '');
await StorageHelper().set(KeychainStorageKey.ownerUUID.value, '');
await StorageHelper().set(KeychainStorageKey.clientName.value, '');
await StorageHelper().set(KeychainStorageKey.ownerName.value, '');
}
}

View File

@ -12,6 +12,7 @@ import 'package:rxdart/rxdart.dart';
class LocalsRepositoryImpl implements LocalsRepository {
final LocalsRemoteDataSource remoteDataSource = LocalsRemoteDataSourceImpl();
final LocalsLocalDataSourceImpl localDataSource = LocalsLocalDataSourceImpl();
static final license = BehaviorSubject<LicenseStatus>();
static get stream => license.stream;
@ -23,19 +24,30 @@ class LocalsRepositoryImpl implements LocalsRepository {
@override
Future<bool> update(BuildContext context) async {
LocalsRepositoryImpl.license.add(false);
final bool response = await _handleReponse(context);
LocalsRepositoryImpl.license.add(response);
return response;
}
Future<void> select(BuildContext context) async {
await localDataSource.unlinkLocal();
await update(context);
}
Future<bool> _handleReponse(BuildContext context) async {
bool response = false;
try {
while (!response) {
while (!response) {
try {
response = await remoteDataSource.processLocals(context);
if (!response) {
await _handleUpdateError(context);
}
}
await _notifyBlocs(context);
} catch (e) {
log('Error updating locals: $e');
await _handleUpdateError(context);
}
} catch (e , s) {
log('Error updating locals: $e', stackTrace: s);
await _handleUpdateError(context);
}
}
return response;
}
@ -46,10 +58,10 @@ class LocalsRepositoryImpl implements LocalsRepository {
}
Future<void> _notifyBlocs(BuildContext context) async {
LocalsRepositoryImpl.license.add(false);
context.read<LocalProfileBloc>().add(LocalProfileEvent());
context.read<MenuBloc>().add(MenuEvent());
LocalsRepositoryImpl.license.add(true);
}
@override

View File

@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:developer';
import 'package:flutter_bloc/flutter_bloc.dart';
@ -31,8 +32,13 @@ class LocalProfileState {
}
class LocalProfileBloc extends Bloc<LocalProfileEvent, LocalProfileState> {
late StreamSubscription<bool> _completer;
LocalProfileBloc() : super(LocalProfileState()) {
on<LocalProfileEvent>(_onLocalProfileEvent);
_completer = LocalsRepositoryImpl.license.stream.listen((v) {
add(LocalProfileEvent());
});
}
Future<void> _onLocalProfileEvent(LocalProfileEvent event, Emitter<LocalProfileState> emit) async {

View File

@ -26,13 +26,8 @@ class _LocalProfileComponentWidgetState extends State<LocalProfileComponentWidge
Future retrieveProfileInfo() async {
setState(() {_isLoading = true;});
await StorageHelper().set(KeychainStorageKey.clientUUID.value, '');
LocalsRepositoryImpl.license.add(false);
final response = await LocalsRepositoryImpl().update(context);
LocalsRepositoryImpl.license.add(response);
setState(() {_isLoading = false;});
await LocalsRepositoryImpl().select(context);
setState(() {_isLoading = false;});
}
@override

View File

@ -76,7 +76,11 @@ class LicenseRemoteDataSourceImpl implements LicenseRemoteDataSource {
final response = await PhpGroup.getLicense();
final dynamic responseBody = response.jsonBody;
if (response.jsonBody is! List<dynamic>) {
if (responseBody == []) {
return true;
}
else if (response.jsonBody is! List<dynamic>) {
late final String error;
if (response.jsonBody is Map<String, dynamic>)
error = response.jsonBody['error_msg'];
@ -86,10 +90,7 @@ class LicenseRemoteDataSourceImpl implements LicenseRemoteDataSource {
throw Exception('Erro ao consultar licenças: $error');
}
if (responseBody == []) {
// return await setupLicense(DatabaseStorage.database, isNewVersion);
return true;
}
List<Future<void>> saveOperations = [];
for (var element in responseBody) {