This commit is contained in:
2026-03-05 15:42:34 +01:00
parent e8d8e4a022
commit 74309006b1
120 changed files with 431 additions and 399 deletions

4
.idea/modules.xml generated
View File

@@ -5,15 +5,15 @@
<module fileurl="file://$PROJECT_DIR$/modules/legacy/modules/account/melos_account.iml" filepath="$PROJECT_DIR$/modules/legacy/modules/account/melos_account.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/activity/melos_activity.iml" filepath="$PROJECT_DIR$/modules/activity/melos_activity.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/auth/melos_auth.iml" filepath="$PROJECT_DIR$/modules/auth/melos_auth.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/legacy/modules/control_panel/melos_control_panel.iml" filepath="$PROJECT_DIR$/modules/legacy/modules/control_panel/melos_control_panel.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/legacy/modules/customer_service/melos_customer_service.iml" filepath="$PROJECT_DIR$/modules/legacy/modules/customer_service/melos_customer_service.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/dashboard_shell/melos_dashboard_shell.iml" filepath="$PROJECT_DIR$/modules/dashboard_shell/melos_dashboard_shell.iml" />
<module fileurl="file://$PROJECT_DIR$/packages/design_system/melos_design_system.iml" filepath="$PROJECT_DIR$/packages/design_system/melos_design_system.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/legacy/modules/device_management/melos_device_management.iml" filepath="$PROJECT_DIR$/modules/legacy/modules/device_management/melos_device_management.iml" />
<module fileurl="file://$PROJECT_DIR$/packages/flutter_treezor_entrust_sdk_bridge/melos_flutter_treezor_entrust_sdk_bridge.iml" filepath="$PROJECT_DIR$/packages/flutter_treezor_entrust_sdk_bridge/melos_flutter_treezor_entrust_sdk_bridge.iml" />
<module fileurl="file://$PROJECT_DIR$/packages/flutter_treezor_entrust_sdk_bridge/example/melos_flutter_treezor_entrust_sdk_bridge_example.iml" filepath="$PROJECT_DIR$/packages/flutter_treezor_entrust_sdk_bridge/example/melos_flutter_treezor_entrust_sdk_bridge_example.iml" />
<module fileurl="file://$PROJECT_DIR$/packages/fonts/melos_fonts.iml" filepath="$PROJECT_DIR$/packages/fonts/melos_fonts.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/legacy/modules/functions/melos_functions.iml" filepath="$PROJECT_DIR$/modules/legacy/modules/functions/melos_functions.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/home/melos_home.iml" filepath="$PROJECT_DIR$/modules/home/melos_home.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/legacy/modules/hub/melos_hub.iml" filepath="$PROJECT_DIR$/modules/legacy/modules/hub/melos_hub.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/legacy/melos_legacy.iml" filepath="$PROJECT_DIR$/modules/legacy/melos_legacy.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/legacy/modules/legacy_dashboard_shell/melos_legacy_dashboard_shell.iml" filepath="$PROJECT_DIR$/modules/legacy/modules/legacy_dashboard_shell/melos_legacy_dashboard_shell.iml" />
<module fileurl="file://$PROJECT_DIR$/modules/legacy/packages/legacy_shared/melos_legacy_shared.iml" filepath="$PROJECT_DIR$/modules/legacy/packages/legacy_shared/melos_legacy_shared.iml" />

View File

@@ -3,8 +3,8 @@ import 'package:activity/activity.dart';
import 'package:auth/auth.dart';
import 'package:customer_service/customer_service.dart';
import 'package:dashboard_shell/dashboard_builder.dart';
import 'package:functions/functions.dart';
import 'package:hub/hub.dart';
import 'package:device_management/device_management.dart';
import 'package:control_panel/control_panel.dart';
import 'package:legacy_dashboard_shell/legacy_dashboard_builder.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
@@ -39,74 +39,79 @@ void configureAppRouter() {
StatefulShellBranch(
routes: [
GoRoute(
path: AppRoutes.dashboardHub,
name: 'hub',
pageBuilder: const HubBuilder().buildPage,
path: AppRoutes.controlPanel,
name: 'control_panel',
pageBuilder: const ControlPanelBuilder().buildPage,
routes: [
GoRoute(
path: 'customer_service',
name: 'customer_service',
pageBuilder: CustomerServiceBuilder().buildPage,
),
GoRoute(
path: 'account_settings',
name: 'account_settings',
pageBuilder: AccountSettingsBuilder().buildPage,
routes: [
GoRoute(
path: 'personal_data',
name: 'personal_data',
pageBuilder: PersonalDataBuilder().buildPage,
),
GoRoute(
path: 'change_password',
name: 'change_password',
pageBuilder: ChangePasswordBuilder().buildPage,
),
GoRoute(
path: 'linked_devices',
name: 'linked_devices',
pageBuilder: LinkedDevicesBuilder().buildPage,
),
GoRoute(
path: 'app_users',
name: 'app_users',
pageBuilder: AppUsersBuilder().buildPage,
),
GoRoute(
path: 'delete_account',
name: 'delete_account',
pageBuilder: DeleteAccountBuilder().buildPage,
),
],
),
],
),
],
),
StatefulShellBranch(
routes: [
GoRoute(
path: AppRoutes.dashboardFunctions,
name: 'functions',
pageBuilder: FunctionsBuilder().buildPage,
path: AppRoutes.deviceManagement,
name: 'device_management',
pageBuilder: DeviceManagementBuilder().buildPage,
routes: [
GoRoute(
path: 'contacts',
name: 'contacts',
pageBuilder: ContactsBuilder().buildPage,
),
GoRoute(
path: 'remote_connection',
name: 'remote_connection',
pageBuilder: RemoteConnectionBuilder().buildPage,
),
GoRoute(
path: 'locate_device',
name: 'locate_device',
pageBuilder: LocateDeviceBuilder().buildPage,
),
],
),
],
),
],
),
GoRoute(
path: AppRoutes.contacts,
name: 'contacts',
pageBuilder: ContactsBuilder().buildPage,
),
GoRoute(
path: AppRoutes.remoteConnection,
name: 'remote_connection',
pageBuilder: RemoteConnectionBuilder().buildPage,
),
GoRoute(
path: AppRoutes.locateDevice,
name: 'locate_device',
pageBuilder: LocateDeviceBuilder().buildPage,
),
GoRoute(
path: AppRoutes.accountSettings,
name: 'account_settings',
pageBuilder: AccountSettingsBuilder().buildPage,
),
GoRoute(
path: AppRoutes.personalData,
name: 'personal_data',
pageBuilder: PersonalDataBuilder().buildPage,
),
GoRoute(
path: AppRoutes.changePassword,
name: 'change_password',
pageBuilder: ChangePasswordBuilder().buildPage,
),
GoRoute(
path: AppRoutes.linkedDevices,
name: 'linked_devices',
pageBuilder: LinkedDevicesBuilder().buildPage,
),
GoRoute(
path: AppRoutes.appUsers,
name: 'app_users',
pageBuilder: AppUsersBuilder().buildPage,
),
GoRoute(
path: AppRoutes.deleteAccount,
name: 'delete_account',
pageBuilder: DeleteAccountBuilder().buildPage,
),
GoRoute(
path: AppRoutes.customerService,
name: 'customer_service',
pageBuilder: CustomerServiceBuilder().buildPage,
),
GoRoute(
path: AppRoutes.login,
name: 'login',

View File

@@ -206,6 +206,13 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.7.0"
control_panel:
dependency: "direct main"
description:
path: "../../modules/legacy/modules/control_panel"
relative: true
source: path
version: "1.0.0+1"
convert:
dependency: transitive
description:
@@ -307,6 +314,13 @@ packages:
relative: true
source: path
version: "0.0.1"
device_management:
dependency: "direct main"
description:
path: "../../modules/legacy/modules/device_management"
relative: true
source: path
version: "1.0.0+1"
diacritic:
dependency: transitive
description:
@@ -493,13 +507,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.0"
functions:
dependency: "direct main"
description:
path: "../../modules/legacy/modules/functions"
relative: true
source: path
version: "1.0.0+1"
get_it:
dependency: "direct main"
description:
@@ -579,13 +586,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.2"
hub:
dependency: "direct main"
description:
path: "../../modules/legacy/modules/hub"
relative: true
source: path
version: "1.0.0+1"
image:
dependency: transitive
description:

View File

@@ -51,16 +51,16 @@ dependencies:
path: ../../modules/dashboard_shell
legacy_dashboard_shell:
path: ../../modules/legacy/modules/legacy_dashboard_shell
hub:
path: ../../modules/legacy/modules/hub
control_panel:
path: ../../modules/legacy/modules/control_panel
customer_service:
path: ../../modules/legacy/modules/customer_service
splash:
path: ../../modules/splash
account:
path: ../../modules/legacy/modules/account
functions:
path: ../../modules/legacy/modules/functions
device_management:
path: ../../modules/legacy/modules/device_management
#packages dependencies go here
navigation:
path: ../../packages/navigation

View File

@@ -1,4 +1,4 @@
# melos_managed_dependency_overrides: account,activity,auth,customer_service,dashboard_shell,design_system,flutter_treezor_entrust_sdk_bridge,fonts,functions,home,hub,legacy_dashboard_shell,legacy_shared,navigation,notifications,payments,profile,sca_treezor,sf_infrastructure,sf_localizations,sf_shared,splash,utils
# melos_managed_dependency_overrides: account,activity,auth,customer_service,dashboard_shell,design_system,flutter_treezor_entrust_sdk_bridge,fonts,home,legacy_dashboard_shell,legacy_shared,navigation,notifications,payments,profile,sca_treezor,sf_infrastructure,sf_localizations,sf_shared,splash,utils,control_panel,device_management
dependency_overrides:
account:
path: ../../modules/legacy/modules/account
@@ -6,22 +6,22 @@ dependency_overrides:
path: ../../modules/activity
auth:
path: ../../modules/auth
control_panel:
path: ../../modules/legacy/modules/control_panel
customer_service:
path: ../../modules/legacy/modules/customer_service
dashboard_shell:
path: ../../modules/dashboard_shell
design_system:
path: ../../packages/design_system
device_management:
path: ../../modules/legacy/modules/device_management
flutter_treezor_entrust_sdk_bridge:
path: ../../packages/flutter_treezor_entrust_sdk_bridge
fonts:
path: ../../packages/fonts
functions:
path: ../../modules/legacy/modules/functions
home:
path: ../../modules/home
hub:
path: ../../modules/legacy/modules/hub
legacy_dashboard_shell:
path: ../../modules/legacy/modules/legacy_dashboard_shell
legacy_shared:

View File

@@ -65,7 +65,7 @@ theme: theme,
onPressed: () async {
final bool res = await vm.changePassword();
if (res){
Navigator.pop(context);
navigationContract.goBack();
}
},
text: context.translate('OK'),

View File

@@ -0,0 +1 @@
export 'src/features/control_panel/control_panel_builder.dart';

View File

@@ -1,7 +1,7 @@
import 'package:hub/src/features/hub/domain/entities/position_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
import 'package:legacy_shared/legacy_shared.dart';
abstract class HomeRemoteDatasource {
abstract class ControlPanelRemoteDatasource {
Future<List<DeviceEntity>> getDevices({required String userId});
Future<List<PositionEntity>> getLatestPositions({required String deviceId});

View File

@@ -1,15 +1,15 @@
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:hub/src/core/data/datasource/hub_remote_datasource.dart';
import 'package:hub/src/core/data/models/get_devices_response_model.dart';
import 'package:hub/src/core/data/models/latest_positions_response_model.dart';
import 'package:hub/src/features/hub/domain/entities/position_entity.dart';
import 'package:control_panel/src/core/data/datasource/control_panel_remote_datasource.dart';
import 'package:control_panel/src/core/data/models/get_devices_response_model.dart';
import 'package:control_panel/src/core/data/models/latest_positions_response_model.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
class HomeRemoteDatasourceImpl implements HomeRemoteDatasource {
HomeRemoteDatasourceImpl(this._repository);
class ControlPanelRemoteDatasourceImpl implements ControlPanelRemoteDatasource {
ControlPanelRemoteDatasourceImpl(this._repository);
final QuestiaRepository _repository;

View File

@@ -1,7 +1,7 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hub/src/features/hub/domain/entities/address_entity.dart';
import 'package:hub/src/features/hub/domain/entities/network_entity.dart';
import 'package:hub/src/features/hub/domain/entities/position_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/address_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/network_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
part 'latest_positions_response_model.freezed.dart';
part 'latest_positions_response_model.g.dart';

View File

@@ -0,0 +1,20 @@
import 'package:control_panel/src/core/data/datasource/control_panel_remote_datasource.dart';
import 'package:control_panel/src/core/domain/repositories/control_panel_repository.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
import 'package:legacy_shared/legacy_shared.dart';
class ControlPanelRepositoryImpl implements ControlPanelRepository {
const ControlPanelRepositoryImpl(this._remote);
final ControlPanelRemoteDatasource _remote;
@override
Future<List<DeviceEntity>> getDevices({required String userId}) async {
return _remote.getDevices(userId: userId);
}
@override
Future<List<PositionEntity>> getLatestPositions({required String deviceId}) async {
return _remote.getLatestPositions(deviceId: deviceId);
}
}

View File

@@ -1,7 +1,7 @@
import 'package:hub/src/features/hub/domain/entities/position_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
import 'package:legacy_shared/legacy_shared.dart';
abstract class HomeRepository {
abstract class ControlPanelRepository {
Future<List<DeviceEntity>> getDevices({required String userId});
Future<List<PositionEntity>> getLatestPositions({required String deviceId});

View File

@@ -0,0 +1,9 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:control_panel/src/core/data/datasource/control_panel_remote_datasource.dart';
import 'package:control_panel/src/core/data/datasource/control_panel_remote_datasource_impl.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
final controlPanelRemoteDatasourceProvider = Provider<ControlPanelRemoteDatasource>((ref) {
final questiaRepository = getIt<QuestiaRepository>();
return ControlPanelRemoteDatasourceImpl(questiaRepository);
});

View File

@@ -0,0 +1,9 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:control_panel/src/core/data/repositories/control_panel_repository_impl.dart';
import 'package:control_panel/src/core/domain/repositories/control_panel_repository.dart';
import 'package:control_panel/src/core/providers/control_panel_remote_datasource_provider.dart';
final controlPanelRepositoryProvider = Provider<ControlPanelRepository>((ref) {
final remote = ref.read(controlPanelRemoteDatasourceProvider);
return ControlPanelRepositoryImpl(remote);
});

View File

@@ -1,18 +1,18 @@
import 'package:hub/src/features/hub/presentation/hub_screen.dart';
import 'package:control_panel/src/features/control_panel/presentation/control_panel_screen.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:get_it/get_it.dart';
import 'package:navigation/navigation.dart';
class HubBuilder {
const HubBuilder();
class ControlPanelBuilder {
const ControlPanelBuilder();
Page<void> buildPage(BuildContext context, GoRouterState state) {
final NavigationContract navigationContract = GetIt.I<NavigationContract>();
return MaterialPage<void>(
key: state.pageKey,
child: HubScreen(navigationContract: navigationContract, routerState: state),
child: ControlPanelScreen(navigationContract: navigationContract, routerState: state),
);
}
}

View File

@@ -1,6 +1,6 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hub/src/features/hub/domain/entities/address_entity.dart';
import 'package:hub/src/features/hub/domain/entities/network_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/address_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/network_entity.dart';
part 'position_entity.freezed.dart';

View File

@@ -1,11 +1,11 @@
import 'package:hub/src/core/domain/repositories/hub_repository.dart';
import 'package:hub/src/features/hub/domain/get_devices_use_case.dart';
import 'package:control_panel/src/core/domain/repositories/control_panel_repository.dart';
import 'package:control_panel/src/features/control_panel/domain/get_devices_use_case.dart';
import 'package:legacy_shared/legacy_shared.dart';
class GetDevicesUseCaseImpl implements GetDevicesUseCase {
GetDevicesUseCaseImpl(this._repository);
final HomeRepository _repository;
final ControlPanelRepository _repository;
@override
Future<List<DeviceEntity>> getDevices({required String userId}) async {
return _repository.getDevices(userId: userId);

View File

@@ -1,4 +1,4 @@
import 'package:hub/src/features/hub/domain/entities/position_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
abstract class GetLatestPositionsUseCase {
Future<List<PositionEntity>> getLatestPositions({required String deviceId});

View File

@@ -1,11 +1,11 @@
import 'package:hub/src/core/domain/repositories/hub_repository.dart';
import 'package:hub/src/features/hub/domain/entities/position_entity.dart';
import 'package:hub/src/features/hub/domain/get_latest_positions_use_case.dart';
import 'package:control_panel/src/core/domain/repositories/control_panel_repository.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/get_latest_positions_use_case.dart';
class GetLatestPositionsUseCaseImpl implements GetLatestPositionsUseCase {
GetLatestPositionsUseCaseImpl(this._repository);
final HomeRepository _repository;
final ControlPanelRepository _repository;
@override
Future<List<PositionEntity>> getLatestPositions({required String deviceId}) async {
await Future<void>.delayed(const Duration(milliseconds: 2000));

View File

@@ -1,6 +1,6 @@
import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:hub/src/features/hub/presentation/state/hub_view_model.dart';
import 'package:control_panel/src/features/control_panel/presentation/state/control_panel_view_model.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@@ -11,11 +11,11 @@ import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';
class HubScreen extends ConsumerWidget {
class ControlPanelScreen extends ConsumerWidget {
final NavigationContract navigationContract;
final GoRouterState routerState;
const HubScreen({
const ControlPanelScreen({
super.key,
required this.navigationContract,
required this.routerState,
@@ -65,8 +65,8 @@ class _Header extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final state = ref.watch(hubViewModelProvider);
final vm = ref.read(hubViewModelProvider.notifier);
final state = ref.watch(controlPanelViewModelProvider);
final vm = ref.read(controlPanelViewModelProvider.notifier);
return Stack(
children: [
@@ -143,7 +143,7 @@ class _MenuSection extends ConsumerWidget {
SizedBox(height: SizeUtils.getByScreen(small: 8, big: 7)),
_SectionButton(
onPressed: () {
navigationContract.pushTo(AppRoutes.dashboardFunctions);
navigationContract.pushTo(AppRoutes.deviceManagement);
},
icon: SFIcons.functions,
text: I18n.functions,
@@ -235,8 +235,8 @@ class _Minimap extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final theme = ref.watch(themePortProvider);
final viewState = ref.watch(hubViewModelProvider);
final viewModel = ref.read(hubViewModelProvider.notifier);
final viewState = ref.watch(controlPanelViewModelProvider);
final viewModel = ref.read(controlPanelViewModelProvider.notifier);
return FlutterMap(
mapController: viewModel.mapController,
@@ -295,7 +295,7 @@ class _LocationBanner extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final theme = ref.read(themePortProvider);
final viewState = ref.watch(hubViewModelProvider);
final viewState = ref.watch(controlPanelViewModelProvider);
final battery = viewState.selectedPosition?.ncell ?? 0;
final IconData batteryIcon = toBatteryIcon(battery);

View File

@@ -0,0 +1,10 @@
import 'package:control_panel/src/core/providers/control_panel_repository_provider.dart';
import 'package:control_panel/src/features/control_panel/domain/get_devices_use_case.dart';
import 'package:control_panel/src/features/control_panel/domain/get_devices_use_case_impl.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
final getDevicesUseCaseProvider =
Provider.autoDispose<GetDevicesUseCase>((ref) {
final authRepository = ref.read(controlPanelRepositoryProvider);
return GetDevicesUseCaseImpl(authRepository);
});

View File

@@ -0,0 +1,10 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:control_panel/src/core/providers/control_panel_repository_provider.dart';
import 'package:control_panel/src/features/control_panel/domain/get_latest_positions_use_case.dart';
import 'package:control_panel/src/features/control_panel/domain/get_latest_positions_use_case_impl.dart';
final getLatestPositionsUseCaseProvider =
Provider.autoDispose<GetLatestPositionsUseCase>((ref) {
final authRepository = ref.read(controlPanelRepositoryProvider);
return GetLatestPositionsUseCaseImpl(authRepository);
});

View File

@@ -1,22 +1,22 @@
import 'dart:async';
import 'package:flutter_map/flutter_map.dart';
import 'package:hub/src/features/hub/domain/entities/position_entity.dart';
import 'package:hub/src/features/hub/domain/get_devices_use_case.dart';
import 'package:hub/src/features/hub/domain/get_latest_positions_use_case.dart';
import 'package:hub/src/features/hub/presentation/providers/get_devices_use_case_provider.dart';
import 'package:hub/src/features/hub/presentation/providers/get_latest_positions_use_case_provider.dart';
import 'package:hub/src/features/hub/presentation/state/hub_view_state.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/get_devices_use_case.dart';
import 'package:control_panel/src/features/control_panel/domain/get_latest_positions_use_case.dart';
import 'package:control_panel/src/features/control_panel/presentation/providers/get_devices_use_case_provider.dart';
import 'package:control_panel/src/features/control_panel/presentation/providers/get_latest_positions_use_case_provider.dart';
import 'package:control_panel/src/features/control_panel/presentation/state/control_panel_view_state.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:latlong2/latlong.dart';
final hubViewModelProvider =
NotifierProvider.autoDispose<HubViewModel, HubViewState>(
HubViewModel.new,
final controlPanelViewModelProvider =
NotifierProvider.autoDispose<ControlPanelViewModel, ControlPanelViewState>(
ControlPanelViewModel.new,
);
class HubViewModel extends Notifier<HubViewState> {
class ControlPanelViewModel extends Notifier<ControlPanelViewState> {
late final GetDevicesUseCase _getDevicesUseCase;
late final GetLatestPositionsUseCase _getLatestPositionsUseCase;
@@ -25,7 +25,7 @@ class HubViewModel extends Notifier<HubViewState> {
late final MapController mapController;
@override
HubViewState build() {
ControlPanelViewState build() {
_getDevicesUseCase = ref.read(getDevicesUseCaseProvider);
_getLatestPositionsUseCase = ref.read(getLatestPositionsUseCaseProvider);
@@ -57,7 +57,7 @@ class HubViewModel extends Notifier<HubViewState> {
ref.onDispose(disposeControllers);
return HubViewState();
return ControlPanelViewState();
}
void setPositions(List<List<PositionEntity>> positions) {

View File

@@ -1,16 +1,16 @@
import 'package:hub/src/features/hub/domain/entities/position_entity.dart';
import 'package:control_panel/src/features/control_panel/domain/entities/position_entity.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:legacy_shared/legacy_shared.dart';
part 'hub_view_state.freezed.dart';
part 'control_panel_view_state.freezed.dart';
@freezed
abstract class HubViewState with _$HubViewState {
const factory HubViewState({
abstract class ControlPanelViewState with _$ControlPanelViewState {
const factory ControlPanelViewState({
UserEntity? loggedUser,
@Default([]) List<DeviceEntity> devices,
DeviceEntity? selectedDevice,
@Default([]) List<PositionEntity> positions,
PositionEntity? selectedPosition
}) = _HubViewState;
}) = _ControlPanelViewState;
}

View File

@@ -3,7 +3,7 @@
// ignore_for_file: type=lint
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
part of 'hub_view_state.dart';
part of 'control_panel_view_state.dart';
// **************************************************************************
// FreezedGenerator
@@ -12,20 +12,20 @@ part of 'hub_view_state.dart';
// dart format off
T _$identity<T>(T value) => value;
/// @nodoc
mixin _$HubViewState {
mixin _$ControlPanelViewState {
UserEntity? get loggedUser; List<DeviceEntity> get devices; DeviceEntity? get selectedDevice; List<PositionEntity> get positions; PositionEntity? get selectedPosition;
/// Create a copy of HubViewState
/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
$HubViewStateCopyWith<HubViewState> get copyWith => _$HubViewStateCopyWithImpl<HubViewState>(this as HubViewState, _$identity);
$ControlPanelViewStateCopyWith<ControlPanelViewState> get copyWith => _$ControlPanelViewStateCopyWithImpl<ControlPanelViewState>(this as ControlPanelViewState, _$identity);
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is HubViewState&&(identical(other.loggedUser, loggedUser) || other.loggedUser == loggedUser)&&const DeepCollectionEquality().equals(other.devices, devices)&&(identical(other.selectedDevice, selectedDevice) || other.selectedDevice == selectedDevice)&&const DeepCollectionEquality().equals(other.positions, positions)&&(identical(other.selectedPosition, selectedPosition) || other.selectedPosition == selectedPosition));
return identical(this, other) || (other.runtimeType == runtimeType&&other is ControlPanelViewState&&(identical(other.loggedUser, loggedUser) || other.loggedUser == loggedUser)&&const DeepCollectionEquality().equals(other.devices, devices)&&(identical(other.selectedDevice, selectedDevice) || other.selectedDevice == selectedDevice)&&const DeepCollectionEquality().equals(other.positions, positions)&&(identical(other.selectedPosition, selectedPosition) || other.selectedPosition == selectedPosition));
}
@@ -34,15 +34,15 @@ int get hashCode => Object.hash(runtimeType,loggedUser,const DeepCollectionEqual
@override
String toString() {
return 'HubViewState(loggedUser: $loggedUser, devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition)';
return 'ControlPanelViewState(loggedUser: $loggedUser, devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition)';
}
}
/// @nodoc
abstract mixin class $HubViewStateCopyWith<$Res> {
factory $HubViewStateCopyWith(HubViewState value, $Res Function(HubViewState) _then) = _$HubViewStateCopyWithImpl;
abstract mixin class $ControlPanelViewStateCopyWith<$Res> {
factory $ControlPanelViewStateCopyWith(ControlPanelViewState value, $Res Function(ControlPanelViewState) _then) = _$ControlPanelViewStateCopyWithImpl;
@useResult
$Res call({
UserEntity? loggedUser, List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition
@@ -53,14 +53,14 @@ $UserEntityCopyWith<$Res>? get loggedUser;$DeviceEntityCopyWith<$Res>? get selec
}
/// @nodoc
class _$HubViewStateCopyWithImpl<$Res>
implements $HubViewStateCopyWith<$Res> {
_$HubViewStateCopyWithImpl(this._self, this._then);
class _$ControlPanelViewStateCopyWithImpl<$Res>
implements $ControlPanelViewStateCopyWith<$Res> {
_$ControlPanelViewStateCopyWithImpl(this._self, this._then);
final HubViewState _self;
final $Res Function(HubViewState) _then;
final ControlPanelViewState _self;
final $Res Function(ControlPanelViewState) _then;
/// Create a copy of HubViewState
/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline') @override $Res call({Object? loggedUser = freezed,Object? devices = null,Object? selectedDevice = freezed,Object? positions = null,Object? selectedPosition = freezed,}) {
return _then(_self.copyWith(
@@ -72,7 +72,7 @@ as List<PositionEntity>,selectedPosition: freezed == selectedPosition ? _self.se
as PositionEntity?,
));
}
/// Create a copy of HubViewState
/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
@@ -84,7 +84,7 @@ $UserEntityCopyWith<$Res>? get loggedUser {
return $UserEntityCopyWith<$Res>(_self.loggedUser!, (value) {
return _then(_self.copyWith(loggedUser: value));
});
}/// Create a copy of HubViewState
}/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
@@ -96,7 +96,7 @@ $DeviceEntityCopyWith<$Res>? get selectedDevice {
return $DeviceEntityCopyWith<$Res>(_self.selectedDevice!, (value) {
return _then(_self.copyWith(selectedDevice: value));
});
}/// Create a copy of HubViewState
}/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
@@ -112,8 +112,8 @@ $PositionEntityCopyWith<$Res>? get selectedPosition {
}
/// Adds pattern-matching-related methods to [HubViewState].
extension HubViewStatePatterns on HubViewState {
/// Adds pattern-matching-related methods to [ControlPanelViewState].
extension ControlPanelViewStatePatterns on ControlPanelViewState {
/// A variant of `map` that fallback to returning `orElse`.
///
/// It is equivalent to doing:
@@ -126,10 +126,10 @@ extension HubViewStatePatterns on HubViewState {
/// }
/// ```
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _HubViewState value)? $default,{required TResult orElse(),}){
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _ControlPanelViewState value)? $default,{required TResult orElse(),}){
final _that = this;
switch (_that) {
case _HubViewState() when $default != null:
case _ControlPanelViewState() when $default != null:
return $default(_that);case _:
return orElse();
@@ -148,10 +148,10 @@ return $default(_that);case _:
/// }
/// ```
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _HubViewState value) $default,){
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _ControlPanelViewState value) $default,){
final _that = this;
switch (_that) {
case _HubViewState():
case _ControlPanelViewState():
return $default(_that);case _:
throw StateError('Unexpected subclass');
@@ -169,10 +169,10 @@ return $default(_that);case _:
/// }
/// ```
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _HubViewState value)? $default,){
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _ControlPanelViewState value)? $default,){
final _that = this;
switch (_that) {
case _HubViewState() when $default != null:
case _ControlPanelViewState() when $default != null:
return $default(_that);case _:
return null;
@@ -192,7 +192,7 @@ return $default(_that);case _:
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( UserEntity? loggedUser, List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition)? $default,{required TResult orElse(),}) {final _that = this;
switch (_that) {
case _HubViewState() when $default != null:
case _ControlPanelViewState() when $default != null:
return $default(_that.loggedUser,_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition);case _:
return orElse();
@@ -213,7 +213,7 @@ return $default(_that.loggedUser,_that.devices,_that.selectedDevice,_that.positi
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( UserEntity? loggedUser, List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition) $default,) {final _that = this;
switch (_that) {
case _HubViewState():
case _ControlPanelViewState():
return $default(_that.loggedUser,_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition);case _:
throw StateError('Unexpected subclass');
@@ -233,7 +233,7 @@ return $default(_that.loggedUser,_that.devices,_that.selectedDevice,_that.positi
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( UserEntity? loggedUser, List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition)? $default,) {final _that = this;
switch (_that) {
case _HubViewState() when $default != null:
case _ControlPanelViewState() when $default != null:
return $default(_that.loggedUser,_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition);case _:
return null;
@@ -245,8 +245,8 @@ return $default(_that.loggedUser,_that.devices,_that.selectedDevice,_that.positi
/// @nodoc
class _HubViewState implements HubViewState {
const _HubViewState({this.loggedUser, final List<DeviceEntity> devices = const [], this.selectedDevice, final List<PositionEntity> positions = const [], this.selectedPosition}): _devices = devices,_positions = positions;
class _ControlPanelViewState implements ControlPanelViewState {
const _ControlPanelViewState({this.loggedUser, final List<DeviceEntity> devices = const [], this.selectedDevice, final List<PositionEntity> positions = const [], this.selectedPosition}): _devices = devices,_positions = positions;
@override final UserEntity? loggedUser;
@@ -267,17 +267,17 @@ class _HubViewState implements HubViewState {
@override final PositionEntity? selectedPosition;
/// Create a copy of HubViewState
/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@override @JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
_$HubViewStateCopyWith<_HubViewState> get copyWith => __$HubViewStateCopyWithImpl<_HubViewState>(this, _$identity);
_$ControlPanelViewStateCopyWith<_ControlPanelViewState> get copyWith => __$ControlPanelViewStateCopyWithImpl<_ControlPanelViewState>(this, _$identity);
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is _HubViewState&&(identical(other.loggedUser, loggedUser) || other.loggedUser == loggedUser)&&const DeepCollectionEquality().equals(other._devices, _devices)&&(identical(other.selectedDevice, selectedDevice) || other.selectedDevice == selectedDevice)&&const DeepCollectionEquality().equals(other._positions, _positions)&&(identical(other.selectedPosition, selectedPosition) || other.selectedPosition == selectedPosition));
return identical(this, other) || (other.runtimeType == runtimeType&&other is _ControlPanelViewState&&(identical(other.loggedUser, loggedUser) || other.loggedUser == loggedUser)&&const DeepCollectionEquality().equals(other._devices, _devices)&&(identical(other.selectedDevice, selectedDevice) || other.selectedDevice == selectedDevice)&&const DeepCollectionEquality().equals(other._positions, _positions)&&(identical(other.selectedPosition, selectedPosition) || other.selectedPosition == selectedPosition));
}
@@ -286,15 +286,15 @@ int get hashCode => Object.hash(runtimeType,loggedUser,const DeepCollectionEqual
@override
String toString() {
return 'HubViewState(loggedUser: $loggedUser, devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition)';
return 'ControlPanelViewState(loggedUser: $loggedUser, devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition)';
}
}
/// @nodoc
abstract mixin class _$HubViewStateCopyWith<$Res> implements $HubViewStateCopyWith<$Res> {
factory _$HubViewStateCopyWith(_HubViewState value, $Res Function(_HubViewState) _then) = __$HubViewStateCopyWithImpl;
abstract mixin class _$ControlPanelViewStateCopyWith<$Res> implements $ControlPanelViewStateCopyWith<$Res> {
factory _$ControlPanelViewStateCopyWith(_ControlPanelViewState value, $Res Function(_ControlPanelViewState) _then) = __$ControlPanelViewStateCopyWithImpl;
@override @useResult
$Res call({
UserEntity? loggedUser, List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition
@@ -305,17 +305,17 @@ $Res call({
}
/// @nodoc
class __$HubViewStateCopyWithImpl<$Res>
implements _$HubViewStateCopyWith<$Res> {
__$HubViewStateCopyWithImpl(this._self, this._then);
class __$ControlPanelViewStateCopyWithImpl<$Res>
implements _$ControlPanelViewStateCopyWith<$Res> {
__$ControlPanelViewStateCopyWithImpl(this._self, this._then);
final _HubViewState _self;
final $Res Function(_HubViewState) _then;
final _ControlPanelViewState _self;
final $Res Function(_ControlPanelViewState) _then;
/// Create a copy of HubViewState
/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@override @pragma('vm:prefer-inline') $Res call({Object? loggedUser = freezed,Object? devices = null,Object? selectedDevice = freezed,Object? positions = null,Object? selectedPosition = freezed,}) {
return _then(_HubViewState(
return _then(_ControlPanelViewState(
loggedUser: freezed == loggedUser ? _self.loggedUser : loggedUser // ignore: cast_nullable_to_non_nullable
as UserEntity?,devices: null == devices ? _self._devices : devices // ignore: cast_nullable_to_non_nullable
as List<DeviceEntity>,selectedDevice: freezed == selectedDevice ? _self.selectedDevice : selectedDevice // ignore: cast_nullable_to_non_nullable
@@ -325,7 +325,7 @@ as PositionEntity?,
));
}
/// Create a copy of HubViewState
/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
@@ -337,7 +337,7 @@ $UserEntityCopyWith<$Res>? get loggedUser {
return $UserEntityCopyWith<$Res>(_self.loggedUser!, (value) {
return _then(_self.copyWith(loggedUser: value));
});
}/// Create a copy of HubViewState
}/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
@@ -349,7 +349,7 @@ $DeviceEntityCopyWith<$Res>? get selectedDevice {
return $DeviceEntityCopyWith<$Res>(_self.selectedDevice!, (value) {
return _then(_self.copyWith(selectedDevice: value));
});
}/// Create a copy of HubViewState
}/// Create a copy of ControlPanelViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')

View File

@@ -1,4 +1,4 @@
name: hub
name: control_panel
description: "A new Flutter project."
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.

View File

@@ -1,6 +1,6 @@
library functions;
export 'src/features/functions/functions_builder.dart';
export 'src/features/device_management/device_management_builder.dart';
export 'src/features/contacts/contacts_builder.dart';
export 'src/features/remote_connection/remote_connection_builder.dart';
export 'src/features/locate_device/locate_device_builder.dart';

View File

@@ -1,6 +1,6 @@
import 'package:functions/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
abstract class FunctionsRemoteDatasource {
Future<List<ContactEntity>> getContacts({required String userId});

View File

@@ -2,11 +2,11 @@ import 'dart:convert';
import 'package:dio/dio.dart';
// import 'package:flutter/material.dart';
import 'package:functions/src/core/data/datasources/functions_remote_datasource.dart';
import 'package:functions/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:functions/src/core/data/models/send_command_request_model.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/core/data/datasources/functions_remote_datasource.dart';
import 'package:device_management/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:device_management/src/core/data/models/send_command_request_model.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
class FunctionsRemoteDatasourceImpl implements FunctionsRemoteDatasource {

View File

@@ -1,5 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:functions/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:device_management/src/core/data/models/entities/locate_device_request_entity.dart';
part 'send_command_request_model.freezed.dart';
part 'send_command_request_model.g.dart';

View File

@@ -1,8 +1,8 @@
import 'package:functions/src/core/data/datasources/functions_remote_datasource.dart';
import 'package:functions/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:functions/src/core/domain/repositories/functions_repository.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/core/data/datasources/functions_remote_datasource.dart';
import 'package:device_management/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:device_management/src/core/domain/repositories/functions_repository.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
class FunctionsRepositoryImpl implements FunctionsRepository {
const FunctionsRepositoryImpl(this._remote);

View File

@@ -1,6 +1,6 @@
import 'package:functions/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
abstract class FunctionsRepository {
Future<List<ContactEntity>> getContacts({required String userId});

View File

@@ -1,6 +1,6 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/core/data/datasources/functions_remote_datasource.dart';
import 'package:functions/src/core/data/datasources/functions_remote_datasource_impl.dart';
import 'package:device_management/src/core/data/datasources/functions_remote_datasource.dart';
import 'package:device_management/src/core/data/datasources/functions_remote_datasource_impl.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
final functionsRemoteDatasourceProvider = Provider<FunctionsRemoteDatasource>((ref) {

View File

@@ -0,0 +1,9 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:device_management/src/core/providers/functions_remote_datasource_provider.dart';
import 'package:device_management/src/core/data/repositories/functions_repository_impl.dart';
import 'package:device_management/src/core/domain/repositories/functions_repository.dart';
final functionsRepositoryProvider = Provider<FunctionsRepository>((ref) {
final remote = ref.read(functionsRemoteDatasourceProvider);
return FunctionsRepositoryImpl(remote);
});

View File

@@ -1,4 +1,4 @@
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
abstract class GetContactsUseCase {
Future<List<ContactEntity>> getContacts({required String userId});

View File

@@ -1,6 +1,6 @@
import 'package:functions/src/core/domain/repositories/functions_repository.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:functions/src/features/contacts/domain/get_contacts_use_case.dart';
import 'package:device_management/src/core/domain/repositories/functions_repository.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/contacts/domain/get_contacts_use_case.dart';
class GetContactsUseCaseImpl implements GetContactsUseCase {
GetContactsUseCaseImpl(this._repository);

View File

@@ -1,9 +1,9 @@
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:functions/src/features/contacts/presentation/edit_contact_screen.dart';
import 'package:functions/src/features/contacts/presentation/state/contacts_view_model.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/contacts/presentation/edit_contact_screen.dart';
import 'package:device_management/src/features/contacts/presentation/state/contacts_view_model.dart';
import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';
@@ -35,7 +35,7 @@ class ContactsScreen extends ConsumerWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(onPressed: () {Navigator.pop(context);},
IconButton(onPressed: () {navigationContract.goBack();},
icon: Icon(Icons.arrow_back)),
if (!state.isEditing) ...[
DecoratedBox(

View File

@@ -2,8 +2,8 @@ import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:functions/src/features/contacts/presentation/state/contacts_view_model.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/contacts/presentation/state/contacts_view_model.dart';
// import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';

View File

@@ -0,0 +1,9 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:device_management/src/core/providers/functions_repository_provider.dart';
import 'package:device_management/src/features/contacts/domain/get_contacts_use_case.dart';
import 'package:device_management/src/features/contacts/domain/get_contacts_use_case_impl.dart';
final getContactsUseCaseProvider = Provider.autoDispose<GetContactsUseCase>((ref) {
final functionsRepository = ref.read(functionsRepositoryProvider);
return GetContactsUseCaseImpl(functionsRepository);
});

View File

@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:functions/src/features/contacts/domain/get_contacts_use_case.dart';
import 'package:functions/src/features/contacts/presentation/providers/get_contacts_use_case_provider.dart';
import 'package:functions/src/features/contacts/presentation/state/contacts_view_state.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/contacts/domain/get_contacts_use_case.dart';
import 'package:device_management/src/features/contacts/presentation/providers/get_contacts_use_case_provider.dart';
import 'package:device_management/src/features/contacts/presentation/state/contacts_view_state.dart';
// import 'package:legacy_shared/src/providers/logged_user_provider.dart';
// import 'package:legacy_shared/src/data/models/entities/user_entity.dart';
// import 'package:sf_localizations/sf_localizations.dart';

View File

@@ -1,5 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:functions/src/features/contacts/domain/entities/contact_entity.dart';
import 'package:device_management/src/features/contacts/domain/entities/contact_entity.dart';
part 'contacts_view_state.freezed.dart';

View File

@@ -1,18 +1,18 @@
import 'package:flutter/material.dart';
import 'package:functions/src/features/functions/functions_screen.dart';
import 'package:device_management/src/features/device_management/device_management_screen.dart';
import 'package:go_router/go_router.dart';
import 'package:get_it/get_it.dart';
import 'package:navigation/navigation.dart';
class FunctionsBuilder {
const FunctionsBuilder();
class DeviceManagementBuilder {
const DeviceManagementBuilder();
Page<void> buildPage(BuildContext context, GoRouterState state) {
final NavigationContract navigationContract = GetIt.I<NavigationContract>();
return MaterialPage<void>(
key: state.pageKey,
child: FunctionsScreen(navigationContract: navigationContract),
child: DeviceManagementScreen(navigationContract: navigationContract),
);
}
}

View File

@@ -1,16 +1,16 @@
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/functions/widgets/call_watch_dialog.dart';
import 'package:device_management/src/features/device_management/widgets/call_watch_dialog.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';
class FunctionsScreen extends ConsumerWidget {
class DeviceManagementScreen extends ConsumerWidget {
final NavigationContract navigationContract;
const FunctionsScreen({super.key, required this.navigationContract});
const DeviceManagementScreen({super.key, required this.navigationContract});
@override
Widget build(BuildContext context, WidgetRef ref) {

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/functions/state/call_watch_view_state.dart';
import 'package:device_management/src/features/device_management/state/call_watch_view_state.dart';
import 'package:url_launcher/url_launcher.dart';
final callWatchViewModelProvider =

View File

@@ -1,7 +1,7 @@
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/functions/state/call_watch_view_model.dart';
import 'package:device_management/src/features/device_management/state/call_watch_view_model.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';

View File

@@ -1,4 +1,4 @@
import 'package:functions/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:device_management/src/core/data/models/entities/locate_device_request_entity.dart';
abstract class LocateDeviceUseCase {
Future<void> locateDevice({required LocateDeviceRequestEntity request});

View File

@@ -1,6 +1,6 @@
import 'package:functions/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:functions/src/core/domain/repositories/functions_repository.dart';
import 'package:functions/src/features/locate_device/domain/locate_device_use_case.dart';
import 'package:device_management/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:device_management/src/core/domain/repositories/functions_repository.dart';
import 'package:device_management/src/features/locate_device/domain/locate_device_use_case.dart';
class LocateDeviceUseCaseImpl implements LocateDeviceUseCase {
LocateDeviceUseCaseImpl(this._repository);

View File

@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:functions/src/features/locate_device/presentation/locate_device_screen.dart';
import 'package:device_management/src/features/locate_device/presentation/locate_device_screen.dart';
import 'package:go_router/go_router.dart';
import 'package:get_it/get_it.dart';
import 'package:navigation/navigation.dart';

View File

@@ -1,7 +1,7 @@
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/locate_device/presentation/widgets/locate_device_dialog.dart';
import 'package:device_management/src/features/locate_device/presentation/widgets/locate_device_dialog.dart';
import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';

View File

@@ -0,0 +1,9 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:device_management/src/core/providers/functions_repository_provider.dart';
import 'package:device_management/src/features/locate_device/domain/locate_device_use_case.dart';
import 'package:device_management/src/features/locate_device/domain/locate_device_use_case_impl.dart';
final locateDeviceUseCaseProvider = Provider.autoDispose<LocateDeviceUseCase>((ref) {
final functionsRepository = ref.read(functionsRepositoryProvider);
return LocateDeviceUseCaseImpl(functionsRepository);
});

View File

@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:functions/src/features/locate_device/domain/locate_device_use_case.dart';
import 'package:functions/src/features/locate_device/presentation/providers/locate_device_use_case_provider.dart';
import 'package:functions/src/features/locate_device/presentation/state/locate_device_view_state.dart';
import 'package:device_management/src/core/data/models/entities/locate_device_request_entity.dart';
import 'package:device_management/src/features/locate_device/domain/locate_device_use_case.dart';
import 'package:device_management/src/features/locate_device/presentation/providers/locate_device_use_case_provider.dart';
import 'package:device_management/src/features/locate_device/presentation/state/locate_device_view_state.dart';
// import 'package:legacy_shared/src/providers/logged_user_provider.dart';
// import 'package:sf_localizations/sf_localizations.dart';

View File

@@ -1,7 +1,7 @@
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/locate_device/presentation/state/locate_device_view_model.dart';
import 'package:device_management/src/features/locate_device/presentation/state/locate_device_view_model.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';

View File

@@ -1,4 +1,4 @@
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
abstract class GetPicturesUseCase {
Future<List<PictureEntity>> getPictures({required String userId});

View File

@@ -1,6 +1,6 @@
import 'package:functions/src/core/domain/repositories/functions_repository.dart';
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:functions/src/features/remote_connection/domain/get_pictures_use_case.dart';
import 'package:device_management/src/core/domain/repositories/functions_repository.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/get_pictures_use_case.dart';
class GetPicturesUseCaseImpl implements GetPicturesUseCase {
GetPicturesUseCaseImpl(this._repository);

View File

@@ -0,0 +1,5 @@
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
abstract class TakePictureUseCase {
Future<PictureEntity> takePicture({required String userId});
}

View File

@@ -0,0 +1,14 @@
import 'package:device_management/src/core/domain/repositories/functions_repository.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/take_picture_use_case.dart';
class TakePictureUseCaseImpl implements TakePictureUseCase {
TakePictureUseCaseImpl(this._repository);
final FunctionsRepository _repository;
@override
Future<PictureEntity> takePicture({required String userId}) {
return _repository.takePicture(userId: userId);
}
}

View File

@@ -0,0 +1,9 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:device_management/src/core/providers/functions_repository_provider.dart';
import 'package:device_management/src/features/remote_connection/domain/get_pictures_use_case.dart';
import 'package:device_management/src/features/remote_connection/domain/get_pictures_use_case_impl.dart';
final getPicturesUseCaseProvider = Provider.autoDispose<GetPicturesUseCase>((ref) {
final functionsRepository = ref.read(functionsRepositoryProvider);
return GetPicturesUseCaseImpl(functionsRepository);
});

View File

@@ -0,0 +1,9 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:device_management/src/core/providers/functions_repository_provider.dart';
import 'package:device_management/src/features/remote_connection/domain/take_picture_use_case.dart';
import 'package:device_management/src/features/remote_connection/domain/take_picture_use_case_impl.dart';
final takePictureUseCaseProvider = Provider.autoDispose<TakePictureUseCase>((ref) {
final functionsRepository = ref.read(functionsRepositoryProvider);
return TakePictureUseCaseImpl(functionsRepository);
});

View File

@@ -1,8 +1,8 @@
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/remote_connection/presentation/state/remote_connection_view_model.dart';
import 'package:functions/src/features/remote_connection/presentation/widgets/show_picture_dialog.dart';
import 'package:device_management/src/features/remote_connection/presentation/state/remote_connection_view_model.dart';
import 'package:device_management/src/features/remote_connection/presentation/widgets/show_picture_dialog.dart';
import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';

View File

@@ -1,8 +1,8 @@
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/remote_connection/presentation/remote_camera_screen.dart';
import 'package:functions/src/features/remote_connection/presentation/widgets/spy_call_dialog.dart';
import 'package:device_management/src/features/remote_connection/presentation/remote_camera_screen.dart';
import 'package:device_management/src/features/remote_connection/presentation/widgets/spy_call_dialog.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';

View File

@@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:functions/src/features/remote_connection/domain/get_pictures_use_case.dart';
import 'package:functions/src/features/remote_connection/domain/take_picture_use_case.dart';
import 'package:functions/src/features/remote_connection/presentation/providers/get_pictures_use_case_provider.dart';
import 'package:functions/src/features/remote_connection/presentation/providers/take_picture_use_case_provider.dart';
import 'package:functions/src/features/remote_connection/presentation/state/remote_connection_view_state.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/get_pictures_use_case.dart';
import 'package:device_management/src/features/remote_connection/domain/take_picture_use_case.dart';
import 'package:device_management/src/features/remote_connection/presentation/providers/get_pictures_use_case_provider.dart';
import 'package:device_management/src/features/remote_connection/presentation/providers/take_picture_use_case_provider.dart';
import 'package:device_management/src/features/remote_connection/presentation/state/remote_connection_view_state.dart';
import 'package:legacy_shared/legacy_shared.dart';
final remoteConnectionViewModelProvider =

View File

@@ -1,5 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
part 'remote_connection_view_state.freezed.dart';

View File

@@ -2,8 +2,8 @@ import 'package:design_system/design_system.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:functions/src/features/remote_connection/presentation/state/remote_connection_view_model.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:device_management/src/features/remote_connection/presentation/state/remote_connection_view_model.dart';
import 'package:utils/utils.dart';
class ShowPictureDialog extends ConsumerWidget {

View File

@@ -1,7 +1,7 @@
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:functions/src/features/remote_connection/presentation/state/remote_connection_view_model.dart';
import 'package:device_management/src/features/remote_connection/presentation/state/remote_connection_view_model.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';

View File

@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:functions/src/features/remote_connection/presentation/remote_connection_screen.dart';
import 'package:device_management/src/features/remote_connection/presentation/remote_connection_screen.dart';
import 'package:go_router/go_router.dart';
import 'package:get_it/get_it.dart';
import 'package:navigation/navigation.dart';

Some files were not shown because too many files have changed in this diff Show More