WIP
This commit is contained in:
parent
9797d8d811
commit
b28ca12482
|
@ -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
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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, '');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue