fix: bloc provider in homePage

This commit is contained in:
J. A. Messias 2024-12-04 16:54:07 -03:00
parent eb093299d2
commit b8c2aab73c
9 changed files with 76 additions and 69 deletions

View File

@ -21,41 +21,31 @@ class HomePageWidget extends StatefulWidget {
class _HomePageWidgetState extends State<HomePageWidget> { class _HomePageWidgetState extends State<HomePageWidget> {
final scaffoldKey = GlobalKey<ScaffoldState>(); final scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
await LocalsRepositoryImpl().update(context);
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MultiBlocProvider( return Builder(
providers: [ builder: (context) {
BlocProvider( LocalsRepositoryImpl.license.add(true);
create: (context) => MenuBloc( // context.read<LocalProfileBloc>().updateProfile(context);
style: MenuView.list_grid, return Scaffold(
item: EnumMenuItem.button, key: scaffoldKey,
entries: MenuEntry.getEntriesByType(MenuEntryType.Home), backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
)..add(MenuEvent()), drawerEnableOpenDragGesture: true,
), drawerDragStartBehavior: DragStartBehavior.start,
BlocProvider<HomeBloc>( drawer: CustomDrawer(),
create: (context) => HomeBloc()..add(HomeEvent()), appBar: buildAppBar(context),
), body: buildPage(context),
BlocProvider( );
create: (context) => LocalProfileBloc()..add(LocalProfileEvent()), },
),
],
child: Builder(
builder: (context) {
LocalsRepositoryImpl.license.add(true);
// context.read<LocalProfileBloc>().updateProfile(context);
return Scaffold(
key: scaffoldKey,
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
drawerEnableOpenDragGesture: true,
drawerDragStartBehavior: DragStartBehavior.start,
drawer: CustomDrawer(),
appBar: buildAppBar(context),
body: buildPage(context),
);
},
),
); );
} }

View File

@ -5,6 +5,7 @@ import 'dart:io';
import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:hub/backend/notifications/notification_service.dart'; import 'package:hub/backend/notifications/notification_service.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart';
@ -19,7 +20,9 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hub/shared/extensions/string_extensions.dart'; import 'package:hub/shared/extensions/string_extensions.dart';
import 'backend/notifications/firebase_messaging_service.dart'; import 'backend/notifications/firebase_messaging_service.dart';
import 'features/home/index.dart';
import 'initialization.dart'; import 'initialization.dart';
import 'shared/components/molecules/menu/index.dart';
import 'shared/components/molecules/modules/index.dart'; import 'shared/components/molecules/modules/index.dart';
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>(); final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
@ -189,24 +192,43 @@ class _AppState extends State<App> with WidgetsBindingObserver {
@override @override
void didChangeAppLifecycleState(AppLifecycleState state) async { void didChangeAppLifecycleState(AppLifecycleState state) async {
if (state == AppLifecycleState.detached) { if (state == AppLifecycleState.detached) {
await LocalsRepositoryImpl().update(context); LocalsRepositoryImpl.license.add(false);
final response = await LocalsRepositoryImpl().update(context);
LocalsRepositoryImpl.license.add(response);
await FirebaseMessagingService().updateDeviceToken(); await FirebaseMessagingService().updateDeviceToken();
} }
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp.router( return MultiBlocProvider(
key: navigatorKey, providers: [
title: 'FRE ACCESS HUB', BlocProvider(
builder: builder, create: (context) => MenuBloc(
localizationsDelegates: localizationsDelegates, style: MenuView.list_grid,
locale: _locale, item: EnumMenuItem.button,
supportedLocales: supportedLocales, entries: MenuEntry.getEntriesByType(MenuEntryType.Home),
theme: _theme, )..add(MenuEvent()),
darkTheme: _darkTheme, ),
themeMode: _themeMode, BlocProvider<HomeBloc>(
routerConfig: _router, create: (context) => HomeBloc()..add(HomeEvent()),
),
BlocProvider(
create: (context) => LocalProfileBloc()..add(LocalProfileEvent()),
),
],
child: MaterialApp.router(
key: navigatorKey,
title: 'FRE ACCESS HUB',
builder: builder,
localizationsDelegates: localizationsDelegates,
locale: _locale,
supportedLocales: supportedLocales,
theme: _theme,
darkTheme: _darkTheme,
themeMode: _themeMode,
routerConfig: _router,
),
); );
} }
} }

View File

@ -19,11 +19,10 @@ class LocalsRepositoryImpl implements LocalsRepository {
@override @override
Future<bool> update(BuildContext context) async { Future<bool> update(BuildContext context) async {
log('update'); // LocalsRepositoryImpl.license.add(false);
LocalsRepositoryImpl.license.add(false);
final bool response = await remoteDataSource.processLocals(context); final bool response = await remoteDataSource.processLocals(context);
context.read<LocalProfileBloc>().add(LocalProfileEvent()); context.read<LocalProfileBloc>().add(LocalProfileEvent());
LocalsRepositoryImpl.license.add(response); // LocalsRepositoryImpl.license.add(response);
return response; return response;
} }

View File

@ -40,12 +40,12 @@ class LocalProfileBloc extends Bloc<LocalProfileEvent, LocalProfileState> {
emit(state.copyWith(cliName: cliName, cliUUID: cliUUID)); emit(state.copyWith(cliName: cliName, cliUUID: cliUUID));
} }
void updateProfile(BuildContext context) { // void updateProfile(BuildContext context) {
LocalsRepositoryImpl.license.add(false); // LocalsRepositoryImpl.license.add(false);
context.read<MenuBloc>().add(MenuEvent()); // context.read<MenuBloc>().add(MenuEvent());
add(LocalProfileEvent()); // add(LocalProfileEvent());
LocalsRepositoryImpl.license.add(true); // LocalsRepositoryImpl.license.add(true);
} // }
} }
class LocalProfileComponentModel extends FlutterFlowModel<LocalProfileComponentWidget> { class LocalProfileComponentModel extends FlutterFlowModel<LocalProfileComponentWidget> {

View File

@ -25,7 +25,9 @@ class _LocalProfileComponentWidgetState extends State<LocalProfileComponentWidge
Future callback() async { Future callback() async {
await StorageHelper().set(KeychainStorageKey.clientUUID.value, ''); await StorageHelper().set(KeychainStorageKey.clientUUID.value, '');
await LocalsRepositoryImpl().update(context); LocalsRepositoryImpl.license.add(false);
final response = await LocalsRepositoryImpl().update(context);
LocalsRepositoryImpl.license.add(response);
} }
@override @override
@ -39,13 +41,6 @@ class _LocalProfileComponentWidgetState extends State<LocalProfileComponentWidge
final double baseFontSize = 14.0; final double baseFontSize = 14.0;
final double scaledFontSize = baseFontSize * textScaler.scale(1); final double scaledFontSize = baseFontSize * textScaler.scale(1);
final double limitedFontSize = scaledFontSize > 20 ? 12 : scaledFontSize; final double limitedFontSize = scaledFontSize > 20 ? 12 : scaledFontSize;
log('LocalProfileComponentWidget: build');
log('snapshot.connectionState: ${snapshot.connectionState}');
log('snapshot.hasError: ${snapshot.hasError}');
log('snapshot.hasData: ${snapshot.hasData}');
log('snapshot.data: ${snapshot.data}');
if (snapshot.connectionState == ConnectionState.waiting) { if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) { } else if (snapshot.hasError) {
@ -103,7 +98,9 @@ class _LocalProfileComponentWidgetState extends State<LocalProfileComponentWidge
highlightColor: Colors.transparent, highlightColor: Colors.transparent,
onTap: () async { onTap: () async {
await StorageHelper().set(KeychainStorageKey.clientUUID.value, ''); await StorageHelper().set(KeychainStorageKey.clientUUID.value, '');
await LocalsRepositoryImpl().update(context); LocalsRepositoryImpl.license.add(false);
final response = await LocalsRepositoryImpl().update(context);
LocalsRepositoryImpl.license.add(response);
}, },
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.circular(200.0), borderRadius: BorderRadius.circular(200.0),

View File

@ -19,7 +19,7 @@ class MenuRepositoryImpl implements MenuRepository {
List<MenuItem?> entries = []; List<MenuItem?> entries = [];
try { try {
for (var entry in menuEntries) { for (var entry in menuEntries) {
log('Processing entry: ${entry.key}'); // log('Processing entry: ${entry.key}');
final bool isDefault = await menuDataSource.processDisplayDefault(item, entry, entries); final bool isDefault = await menuDataSource.processDisplayDefault(item, entry, entries);
if (isDefault) continue; if (isDefault) continue;
final licenseValue = await LicenseRepositoryImpl().getLicense(entry.key); final licenseValue = await LicenseRepositoryImpl().getLicense(entry.key);

View File

@ -3,6 +3,8 @@ import 'dart:async';
import 'dart:developer'; import 'dart:developer';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/shared/components/molecules/locals/index.dart';
import 'package:hub/shared/components/molecules/menu/data/repositories/menu_repository_impl.dart'; import 'package:hub/shared/components/molecules/menu/data/repositories/menu_repository_impl.dart';
import 'package:hub/shared/components/molecules/menu/index.dart'; import 'package:hub/shared/components/molecules/menu/index.dart';
@ -43,10 +45,9 @@ class MenuBloc extends Bloc<MenuEvent, MenuState> {
} }
Future<void> _onMenuEvent(MenuEvent event, Emitter<MenuState> emit) async { Future<void> _onMenuEvent(MenuEvent event, Emitter<MenuState> emit) async {
log('MenuBloc: waitForSaveCompletion');
await LicenseRemoteDataSourceImpl().waitForSaveCompletion(); await LicenseRemoteDataSourceImpl().waitForSaveCompletion();
log('MenuBloc: _onMenuEvent');
final List<MenuItem?> NewEntries = await MenuRepositoryImpl().generateMenuEntries(entries, item); final List<MenuItem?> NewEntries = await MenuRepositoryImpl().generateMenuEntries(entries, item);
emit(state.copyWith(menuEntries: NewEntries)); emit(state.copyWith(menuEntries: NewEntries));
} }

View File

@ -22,7 +22,6 @@ class LicenseRepositoryImpl implements LicenseRepository {
log('updateLicense'); log('updateLicense');
bool result = false; bool result = false;
final bool isNewVersion = await localDataSource.isNewVersion(); final bool isNewVersion = await localDataSource.isNewVersion();
log('isNewVersion: $isNewVersion');
result = await remoteDataSource.setupLicense(database, isNewVersion); result = await remoteDataSource.setupLicense(database, isNewVersion);
if (isNewVersion) { if (isNewVersion) {
result = await remoteDataSource.fetchLicenses(isNewVersion); result = await remoteDataSource.fetchLicenses(isNewVersion);
@ -41,7 +40,6 @@ class LicenseRepositoryImpl implements LicenseRepository {
@override @override
Future<String?> getLicense(String key) async { Future<String?> getLicense(String key) async {
final response = await localDataSource.get(key); final response = await localDataSource.get(key);
log('getLicense: $key: $response');
return response; return response;
} }

View File

@ -28,7 +28,7 @@ class KeychainHelper implements BaseStorage {
if (response.isEmpty) { if (response.isEmpty) {
return null; return null;
} }
log('() => get keychain: $key : ${response.first['value']}'); // log('() => get keychain: $key : ${response.first['value']}');
return response.first['value'].toString(); return response.first['value'].toString();
} }
@ -47,7 +47,7 @@ class KeychainHelper implements BaseStorage {
'createdAt': date, 'createdAt': date,
}, },
conflictAlgorithm: ConflictAlgorithm.replace); conflictAlgorithm: ConflictAlgorithm.replace);
log('() => set keychain: $key : $value'); // log('() => set keychain: $key : $value');
} }
@override @override