refactor(legacy): extract shared device state into legacy_device_state package

- New package legacy_device_state hosts shared device/position state
  consumed by both control_panel and location screens. ControlPanel*
  classes renamed to LegacyDevice* in 8 moved files.
- Move PositionEntity + AddressEntity + NetworkEntity +
  LatestPositionsResponseModel + BatteryUtils + DateFormatUtils from
  control_panel to legacy_shared (shared domain entities).
- Remove anti-pattern re-export of sf_infrastructure/dio_error_mapper
  from legacy_shared barrel. Update consumers to import
  sf_infrastructure directly.
- Clean 14 unused legacy_shared imports across view models in
  account, device_management, legacy_auth and settings modules.

Eliminates cross-module dependency location -> control_panel.
0 errors, 0 warnings in flutter analyze across 11 packages/modules.
This commit is contained in:
2026-04-19 01:55:11 +02:00
parent 919ee55c45
commit c461519597
85 changed files with 213 additions and 209 deletions

View File

@@ -1,6 +1,5 @@
import 'package:account/src/core/data/models/change_password_request_model.dart';
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import '../../../features/change_password/domain/models/entities/change_password_request_entity.dart';

View File

@@ -1,7 +1,6 @@
import 'package:account/src/core/data/models/update_device_request_model.dart';
import 'package:account/src/features/linked_devices/domain/entities/update_device_request_entity.dart';
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'devices_remote_datasource.dart';

View File

@@ -3,7 +3,6 @@ import 'package:account/src/core/data/models/get_app_users_response_model.dart';
import 'package:account/src/core/data/models/update_user_request_model.dart';
import 'package:account/src/features/personal_data/domain/entities/update_user_request_entity.dart';
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:sf_shared/sf_shared.dart';

View File

@@ -3,7 +3,6 @@ import 'dart:async';
import 'package:account/src/features/account_settings/presentation/state/account_settings_view_state.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_auth/legacy_auth.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -5,7 +5,6 @@ import 'package:account/src/core/providers/users_repository_provider.dart';
import 'package:account/src/features/delete_account/presentation/state/delete_account_view_state.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -4,7 +4,6 @@ import 'package:account/src/features/linked_devices/domain/entities/update_devic
import 'package:account/src/features/linked_devices/presentation/state/linked_devices_view_state.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -1,10 +1,3 @@
export 'src/core/data/models/latest_positions_response_model.dart';
export 'src/core/domain/entities/address_entity.dart';
export 'src/core/domain/entities/network_entity.dart';
export 'src/core/domain/entities/position_entity.dart';
export 'src/core/utils/battery_utils.dart';
export 'src/core/utils/date_format_utils.dart';
export 'src/features/alerts/alerts_builder.dart' show DeviceAlertsBuilder;
export 'src/features/control_panel/control_panel_builder.dart';
export 'src/features/control_panel/presentation/state/control_panel_view_model.dart';
export 'src/shared/widgets/device_map.dart';

View File

@@ -1,5 +1,4 @@
import '../../domain/entities/alert_entity.dart';
import '../models/alerts_response_model.dart';
abstract class AlertsRemoteDatasource {
Future<(List<AlertEntity>, int totalPages)> getAlerts({

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:utils/utils.dart';

View File

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

View File

@@ -1,16 +0,0 @@
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/core/domain/entities/position_entity.dart';
class ControlPanelRepositoryImpl implements ControlPanelRepository {
const ControlPanelRepositoryImpl(this._remote);
final ControlPanelRemoteDatasource _remote;
@override
Future<List<PositionEntity>> getLatestPositions({
required String deviceId,
}) async {
return _remote.getLatestPositions(deviceId: deviceId);
}
}

View File

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

View File

@@ -1,10 +0,0 @@
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 saveFamilyRepository = getIt<SaveFamilyRepository>();
return ControlPanelRemoteDatasourceImpl(saveFamilyRepository);
});

View File

@@ -1,9 +0,0 @@
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,11 +1,11 @@
import 'package:flutter_svg/svg.dart';
import 'package:control_panel/src/features/control_panel/presentation/state/control_panel_view_model.dart';
import 'package:control_panel/src/features/control_panel/presentation/state/control_panel_view_state.dart';
import 'package:legacy_device_state/legacy_device_state.dart';
import 'package:control_panel/src/shared/widgets/device_map.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:sf_shared/sf_shared.dart';
@@ -19,10 +19,10 @@ class ControlPanelScreen extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final theme = ref.watch(themePortProvider);
final asyncState = ref.watch(controlPanelViewModelProvider);
final asyncState = ref.watch(legacyDeviceViewModelProvider);
ref.listen(
controlPanelViewModelProvider.select(
legacyDeviceViewModelProvider.select(
(async) => async.value?.positionsError ?? false,
),
(_, hasError) {
@@ -44,8 +44,8 @@ class ControlPanelScreen extends ConsumerWidget {
error: (error, _) => RefreshableErrorState(
message: formatErrorMessage(error),
onRefresh: () async {
ref.invalidate(controlPanelViewModelProvider);
await ref.read(controlPanelViewModelProvider.future);
ref.invalidate(legacyDeviceViewModelProvider);
await ref.read(legacyDeviceViewModelProvider.future);
},
),
data: (state) => SafeArea(
@@ -64,7 +64,7 @@ class ControlPanelScreen extends ConsumerWidget {
color: theme.getColorFor(ThemeCode.legacyPrimary),
onRefresh: () async {
ref.invalidate(legacyDevicesProvider);
await ref.read(controlPanelViewModelProvider.future);
await ref.read(legacyDeviceViewModelProvider.future);
},
child: SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(),
@@ -97,14 +97,14 @@ class ControlPanelScreen extends ConsumerWidget {
}
class _Header extends ConsumerWidget {
final ControlPanelViewState state;
final LegacyDeviceViewState state;
final NavigationContract navigationContract;
const _Header({required this.state, required this.navigationContract});
@override
Widget build(BuildContext context, WidgetRef ref) {
final vm = ref.read(controlPanelViewModelProvider.notifier);
final vm = ref.read(legacyDeviceViewModelProvider.notifier);
return Stack(
alignment: Alignment.center,
@@ -254,7 +254,7 @@ class _SectionButton extends ConsumerWidget {
}
class _MapSection extends ConsumerWidget {
final ControlPanelViewState state;
final LegacyDeviceViewState state;
final NavigationContract navigationContract;
const _MapSection({
@@ -265,7 +265,7 @@ class _MapSection extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final theme = ref.read(themePortProvider);
final vm = ref.read(controlPanelViewModelProvider.notifier);
final vm = ref.read(legacyDeviceViewModelProvider.notifier);
return GestureDetector(
onTap: () => navigationContract.goTo(AppRoutes.legacyLocation),

View File

@@ -1,6 +1,3 @@
import 'package:control_panel/src/core/domain/entities/position_entity.dart';
import 'package:control_panel/src/core/utils/battery_utils.dart';
import 'package:control_panel/src/core/utils/date_format_utils.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';

View File

@@ -50,6 +50,8 @@ dependencies:
path: ../../../../packages/utils
legacy_shared:
path: ../../packages/legacy_shared
legacy_device_state:
path: ../../packages/legacy_device_state
sf_shared:
path: ../../../../packages/sf_shared
#dependencies go here

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import '../models/get_app_usage_times_response_model.dart';

View File

@@ -1,7 +1,6 @@
import 'package:dio/dio.dart';
import 'package:get_it/get_it.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/configure_dependencies.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import '../models/get_background_image_response_model.dart';
import 'background_image_remote_datasource.dart';

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import '../models/create_contact_request_model.dart';

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import '../models/get_heartbeats_response_model.dart';

View File

@@ -2,7 +2,6 @@ import 'package:device_management/src/core/data/datasources/pictures_remote_data
import 'package:device_management/src/core/data/models/get_pictures_response_model.dart';
import 'package:device_management/src/features/remote_connection/domain/entities/picture_entity.dart';
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
class PicturesRemoteDatasourceImpl implements PicturesRemoteDatasource {

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import '../models/create_scheduled_activity_request_model.dart';

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import '../models/get_steps_response_model.dart';

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -2,7 +2,6 @@ import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:image_picker/image_picker.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'call_history_entity.dart';

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -1,5 +1,4 @@
import 'package:legacy_auth/src/core/data/models/two_fa_secret_response_model.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'auth_remote_datasource.dart';

View File

@@ -1,7 +1,6 @@
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:legacy_auth/src/core/data/datasource/login_remote_datasource.dart';
import 'package:legacy_auth/src/core/data/models/login_response_model.dart';
import 'package:legacy_shared/legacy_shared.dart';
class LegacyLoginRemoteDatasourceImpl implements LegacyLoginRemoteDatasource {
const LegacyLoginRemoteDatasourceImpl(this._repository);

View File

@@ -1,6 +1,5 @@
import 'package:legacy_auth/src/core/data/models/sign_up_request_model.dart';
import 'package:legacy_auth/src/core/data/models/sign_up_response_model.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'sign_up_remote_datasource.dart';

View File

@@ -9,7 +9,6 @@ import 'package:legacy_auth/src/features/device_setup/presentation/state/device_
import 'package:legacy_auth/src/features/device_setup/presentation/enums/add_kid_step.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -7,7 +7,7 @@ import 'package:legacy_auth/src/features/login/presentation/mixins/login_form_va
import 'package:legacy_auth/src/features/login/presentation/state/login_view_state.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -10,7 +10,7 @@ import 'package:legacy_auth/src/features/sign_up/domain/entities/legacy_signup_e
import 'package:legacy_auth/src/features/sign_up/domain/entities/sign_up_request_entity.dart';
import 'package:legacy_auth/src/features/sign_up/presentation/mixins/sign_up_form_validation.dart';
import 'package:legacy_auth/src/features/sign_up/presentation/state/sign_up_view_state.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:location/src/core/data/models/create_frequent_place_request_model.dart';
import 'package:location/src/core/data/models/create_geofence_request_model.dart';
import 'package:location/src/core/data/models/update_frequent_place_request_model.dart';

View File

@@ -1,7 +1,6 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:utils/utils.dart';
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:location/src/core/data/datasource/location_remote_datasource.dart';
import 'package:location/src/core/data/models/create_frequent_place_request_model.dart';
import 'package:location/src/core/data/models/create_frequent_place_response_model.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'position_history_response_model.freezed.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:location/src/core/data/datasource/location_remote_datasource.dart';
import 'package:location/src/core/data/models/create_frequent_place_request_model.dart';
import 'package:location/src/core/data/models/create_geofence_request_model.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:location/src/core/data/models/create_frequent_place_request_model.dart';
import 'package:location/src/core/data/models/create_geofence_request_model.dart';
import 'package:location/src/core/data/models/update_frequent_place_request_model.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_device_state/legacy_device_state.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@@ -14,7 +14,7 @@ class LocationScreen extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final theme = ref.watch(themePortProvider);
final asyncControlPanelState = ref.watch(controlPanelViewModelProvider);
final asyncDeviceState = ref.watch(legacyDeviceViewModelProvider);
final asyncLocationState = ref.watch(locationViewModelProvider);
ref.listen(
@@ -85,7 +85,7 @@ class LocationScreen extends ConsumerWidget {
},
);
ref.listen(controlPanelViewModelProvider, (previous, next) {
ref.listen(legacyDeviceViewModelProvider, (previous, next) {
if (next.hasError && previous != null && !previous.hasError) {
showTopSnackbar(
context,
@@ -105,10 +105,10 @@ class LocationScreen extends ConsumerWidget {
}
});
final controlPanelState = asyncControlPanelState.value;
final deviceState = asyncDeviceState.value;
final locationState = asyncLocationState.value;
final isLoading = asyncControlPanelState.isLoading &&
controlPanelState == null;
final isLoading = asyncDeviceState.isLoading &&
deviceState == null;
return LegacyPageLayout(
theme: theme,
@@ -116,19 +116,19 @@ class LocationScreen extends ConsumerWidget {
showBack: false,
body: isLoading
? const Center(child: CircularProgressIndicator())
: controlPanelState == null
: deviceState == null
? RefreshableErrorState(
onRefresh: () async {
ref.invalidate(controlPanelViewModelProvider);
ref.invalidate(legacyDeviceViewModelProvider);
ref.invalidate(locationViewModelProvider);
await ref.read(controlPanelViewModelProvider.future);
await ref.read(legacyDeviceViewModelProvider.future);
},
)
: LocationMap(
selectedPosition: controlPanelState.selectedPosition,
selectedDevice: controlPanelState.selectedDevice,
devices: controlPanelState.devices,
positions: controlPanelState.positions,
selectedPosition: deviceState.selectedPosition,
selectedDevice: deviceState.selectedDevice,
devices: deviceState.devices,
positions: deviceState.positions,
geofences: locationState?.geofences ?? const [],
frequentPlaces: locationState?.frequentPlaces ?? const [],
positionHistory: locationState?.positionHistory ?? const [],
@@ -136,12 +136,12 @@ class LocationScreen extends ConsumerWidget {
isLoadingHistory: locationState?.isLoadingHistory ?? false,
onDeviceChanged: (device) {
ref
.read(controlPanelViewModelProvider.notifier)
.read(legacyDeviceViewModelProvider.notifier)
.setSelectedDevice(device);
},
onRefreshPosition: () {
ref
.read(controlPanelViewModelProvider.notifier)
.read(legacyDeviceViewModelProvider.notifier)
.refreshPositions();
},
),

View File

@@ -1,6 +1,6 @@
import 'dart:async';
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:latlong2/latlong.dart';
import 'package:location/src/core/domain/entities/geofence_entity.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:latlong2/latlong.dart';
import 'package:location/src/core/domain/entities/geofence_entity.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:location/src/core/domain/entities/geofence_entity.dart';
import 'package:location/src/core/domain/entities/frequent_place_entity.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

View File

@@ -1,6 +1,6 @@
import 'dart:async';
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:location/src/core/domain/entities/geofence_entity.dart';

View File

@@ -1,6 +1,5 @@
import 'dart:async';
import 'package:control_panel/control_panel.dart';
import 'package:share_plus/share_plus.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';

View File

@@ -1,4 +1,4 @@
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:flutter/material.dart';
import 'package:sf_localizations/sf_localizations.dart';

View File

@@ -1,6 +1,6 @@
import 'dart:math' as math;
import 'package:control_panel/control_panel.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:intl/intl.dart';

View File

@@ -11,8 +11,8 @@ environment:
dependencies:
flutter:
sdk: flutter
control_panel:
path: ../control_panel
legacy_device_state:
path: ../../packages/legacy_device_state
design_system:
path: ../../../../packages/design_system
sf_localizations:

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:settings/src/core/data/datasources/alarm_remote_datasource.dart';
import 'package:settings/src/core/data/models/get_alarms_response_model.dart';
import 'package:settings/src/features/alarm/domain/entities/alarm_entity.dart';

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:settings/src/core/data/models/get_contact_lists_response_model.dart';

View File

@@ -1,5 +1,4 @@
import 'package:dio/dio.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import '../../../features/wifi_settings/domain/entities/wifi_network_entity.dart';

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:settings/src/core/domain/repositories/alarm_repository.dart';
import 'package:settings/src/core/providers/alarm_repository_provider.dart';

View File

@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:settings/src/core/domain/entities/contact_list_contact_entity.dart';
import 'package:settings/src/core/domain/repositories/block_phone_repository.dart';

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:settings/src/core/domain/repositories/language_repository.dart';
import 'package:settings/src/core/providers/language_repository_provider.dart';

View File

@@ -2,7 +2,6 @@ import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
import 'package:utils/utils.dart';

View File

@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:settings/src/core/domain/entities/contact_list_contact_entity.dart';
import 'package:settings/src/core/domain/repositories/sos_contacts_repository.dart';

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';

View File

@@ -0,0 +1,8 @@
export 'src/legacy_device_repository.dart';
export 'src/legacy_device_repository_impl.dart';
export 'src/legacy_device_remote_datasource.dart';
export 'src/legacy_device_remote_datasource_impl.dart';
export 'src/legacy_device_repository_provider.dart';
export 'src/legacy_device_remote_datasource_provider.dart';
export 'src/legacy_device_view_model.dart';
export 'src/legacy_device_view_state.dart';

View File

@@ -0,0 +1,5 @@
import 'package:legacy_shared/legacy_shared.dart';
abstract class LegacyDeviceRemoteDatasource {
Future<List<PositionEntity>> getLatestPositions({required String deviceId});
}

View File

@@ -1,12 +1,10 @@
import 'package:control_panel/src/core/data/datasource/control_panel_remote_datasource.dart';
import 'legacy_device_remote_datasource.dart';
import 'package:dio/dio.dart';
import 'package:control_panel/src/core/data/models/latest_positions_response_model.dart';
import 'package:control_panel/src/core/domain/entities/position_entity.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
class ControlPanelRemoteDatasourceImpl implements ControlPanelRemoteDatasource {
ControlPanelRemoteDatasourceImpl(this._repository);
class LegacyDeviceRemoteDatasourceImpl implements LegacyDeviceRemoteDatasource {
LegacyDeviceRemoteDatasourceImpl(this._repository);
final SaveFamilyRepository _repository;

View File

@@ -0,0 +1,10 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'legacy_device_remote_datasource.dart';
import 'legacy_device_remote_datasource_impl.dart';
import 'package:sf_infrastructure/sf_infrastructure.dart';
final legacyDeviceRemoteDatasourceProvider =
Provider<LegacyDeviceRemoteDatasource>((ref) {
final saveFamilyRepository = getIt<SaveFamilyRepository>();
return LegacyDeviceRemoteDatasourceImpl(saveFamilyRepository);
});

View File

@@ -0,0 +1,5 @@
import 'package:legacy_shared/legacy_shared.dart';
abstract class LegacyDeviceRepository {
Future<List<PositionEntity>> getLatestPositions({required String deviceId});
}

View File

@@ -0,0 +1,16 @@
import 'legacy_device_remote_datasource.dart';
import 'legacy_device_repository.dart';
import 'package:legacy_shared/legacy_shared.dart';
class LegacyDeviceRepositoryImpl implements LegacyDeviceRepository {
const LegacyDeviceRepositoryImpl(this._remote);
final LegacyDeviceRemoteDatasource _remote;
@override
Future<List<PositionEntity>> getLatestPositions({
required String deviceId,
}) async {
return _remote.getLatestPositions(deviceId: deviceId);
}
}

View File

@@ -0,0 +1,9 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'legacy_device_repository_impl.dart';
import 'legacy_device_repository.dart';
import 'legacy_device_remote_datasource_provider.dart';
final legacyDeviceRepositoryProvider = Provider<LegacyDeviceRepository>((ref) {
final remote = ref.read(legacyDeviceRemoteDatasourceProvider);
return LegacyDeviceRepositoryImpl(remote);
});

View File

@@ -1,29 +1,28 @@
import 'dart:async';
import 'package:control_panel/src/core/domain/entities/position_entity.dart';
import 'package:control_panel/src/core/domain/repositories/control_panel_repository.dart';
import 'package:control_panel/src/core/providers/control_panel_repository_provider.dart';
import 'package:control_panel/src/features/control_panel/presentation/state/control_panel_view_state.dart';
import 'legacy_device_repository.dart';
import 'legacy_device_repository_provider.dart';
import 'legacy_device_view_state.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:sf_shared/sf_shared.dart';
import 'package:sf_tracking/sf_tracking.dart';
final controlPanelViewModelProvider = AsyncNotifierProvider.autoDispose<
ControlPanelViewModel,
ControlPanelViewState>(ControlPanelViewModel.new);
final legacyDeviceViewModelProvider = AsyncNotifierProvider.autoDispose<
LegacyDeviceViewModel,
LegacyDeviceViewState>(LegacyDeviceViewModel.new);
class ControlPanelViewModel extends AsyncNotifier<ControlPanelViewState> {
late ControlPanelRepository _controlPanelRepository;
class LegacyDeviceViewModel extends AsyncNotifier<LegacyDeviceViewState> {
late LegacyDeviceRepository _legacyDeviceRepository;
late SfTrackingRepository _tracking;
@override
Future<ControlPanelViewState> build() async {
_controlPanelRepository = ref.read(controlPanelRepositoryProvider);
Future<LegacyDeviceViewState> build() async {
_legacyDeviceRepository = ref.read(legacyDeviceRepositoryProvider);
_tracking = ref.read(sfTrackingProvider);
final devices = await ref.watch(legacyDevicesProvider.future);
if (devices.isEmpty) return const ControlPanelViewState();
if (devices.isEmpty) return const LegacyDeviceViewState();
final selected = await ref.watch(selectedDeviceProvider.future);
@@ -34,7 +33,7 @@ class ControlPanelViewModel extends AsyncNotifier<ControlPanelViewState> {
.firstOrNull
: null;
return ControlPanelViewState(
return LegacyDeviceViewState(
devices: devices,
selectedDevice: selected,
positions: latestPositions,
@@ -77,7 +76,7 @@ class ControlPanelViewModel extends AsyncNotifier<ControlPanelViewState> {
var hadError = false;
final positionLists = await Future.wait<List<PositionEntity>>(
devices.map(
(device) => _controlPanelRepository
(device) => _legacyDeviceRepository
.getLatestPositions(deviceId: device.identificator)
.catchError((_) {
hadError = true;

View File

@@ -1,16 +1,16 @@
import 'package:control_panel/src/core/domain/entities/position_entity.dart';
import 'package:legacy_shared/legacy_shared.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:sf_shared/sf_shared.dart';
part 'control_panel_view_state.freezed.dart';
part 'legacy_device_view_state.freezed.dart';
@freezed
abstract class ControlPanelViewState with _$ControlPanelViewState {
const factory ControlPanelViewState({
abstract class LegacyDeviceViewState with _$LegacyDeviceViewState {
const factory LegacyDeviceViewState({
@Default([]) List<DeviceEntity> devices,
DeviceEntity? selectedDevice,
@Default([]) List<PositionEntity> positions,
PositionEntity? selectedPosition,
@Default(false) bool positionsError,
}) = _ControlPanelViewState;
}) = _LegacyDeviceViewState;
}

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 'control_panel_view_state.dart';
part of 'legacy_device_view_state.dart';
// **************************************************************************
// FreezedGenerator
@@ -12,20 +12,20 @@ part of 'control_panel_view_state.dart';
// dart format off
T _$identity<T>(T value) => value;
/// @nodoc
mixin _$ControlPanelViewState {
mixin _$LegacyDeviceViewState {
List<DeviceEntity> get devices; DeviceEntity? get selectedDevice; List<PositionEntity> get positions; PositionEntity? get selectedPosition; bool get positionsError;
/// Create a copy of ControlPanelViewState
/// Create a copy of LegacyDeviceViewState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
$ControlPanelViewStateCopyWith<ControlPanelViewState> get copyWith => _$ControlPanelViewStateCopyWithImpl<ControlPanelViewState>(this as ControlPanelViewState, _$identity);
$LegacyDeviceViewStateCopyWith<LegacyDeviceViewState> get copyWith => _$LegacyDeviceViewStateCopyWithImpl<LegacyDeviceViewState>(this as LegacyDeviceViewState, _$identity);
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is ControlPanelViewState&&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)&&(identical(other.positionsError, positionsError) || other.positionsError == positionsError));
return identical(this, other) || (other.runtimeType == runtimeType&&other is LegacyDeviceViewState&&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)&&(identical(other.positionsError, positionsError) || other.positionsError == positionsError));
}
@@ -34,15 +34,15 @@ int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(
@override
String toString() {
return 'ControlPanelViewState(devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition, positionsError: $positionsError)';
return 'LegacyDeviceViewState(devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition, positionsError: $positionsError)';
}
}
/// @nodoc
abstract mixin class $ControlPanelViewStateCopyWith<$Res> {
factory $ControlPanelViewStateCopyWith(ControlPanelViewState value, $Res Function(ControlPanelViewState) _then) = _$ControlPanelViewStateCopyWithImpl;
abstract mixin class $LegacyDeviceViewStateCopyWith<$Res> {
factory $LegacyDeviceViewStateCopyWith(LegacyDeviceViewState value, $Res Function(LegacyDeviceViewState) _then) = _$LegacyDeviceViewStateCopyWithImpl;
@useResult
$Res call({
List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition, bool positionsError
@@ -53,14 +53,14 @@ $DeviceEntityCopyWith<$Res>? get selectedDevice;$PositionEntityCopyWith<$Res>? g
}
/// @nodoc
class _$ControlPanelViewStateCopyWithImpl<$Res>
implements $ControlPanelViewStateCopyWith<$Res> {
_$ControlPanelViewStateCopyWithImpl(this._self, this._then);
class _$LegacyDeviceViewStateCopyWithImpl<$Res>
implements $LegacyDeviceViewStateCopyWith<$Res> {
_$LegacyDeviceViewStateCopyWithImpl(this._self, this._then);
final ControlPanelViewState _self;
final $Res Function(ControlPanelViewState) _then;
final LegacyDeviceViewState _self;
final $Res Function(LegacyDeviceViewState) _then;
/// Create a copy of ControlPanelViewState
/// Create a copy of LegacyDeviceViewState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline') @override $Res call({Object? devices = null,Object? selectedDevice = freezed,Object? positions = null,Object? selectedPosition = freezed,Object? positionsError = null,}) {
return _then(_self.copyWith(
@@ -72,7 +72,7 @@ as PositionEntity?,positionsError: null == positionsError ? _self.positionsError
as bool,
));
}
/// Create a copy of ControlPanelViewState
/// Create a copy of LegacyDeviceViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
@@ -84,7 +84,7 @@ $DeviceEntityCopyWith<$Res>? get selectedDevice {
return $DeviceEntityCopyWith<$Res>(_self.selectedDevice!, (value) {
return _then(_self.copyWith(selectedDevice: value));
});
}/// Create a copy of ControlPanelViewState
}/// Create a copy of LegacyDeviceViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
@@ -100,8 +100,8 @@ $PositionEntityCopyWith<$Res>? get selectedPosition {
}
/// Adds pattern-matching-related methods to [ControlPanelViewState].
extension ControlPanelViewStatePatterns on ControlPanelViewState {
/// Adds pattern-matching-related methods to [LegacyDeviceViewState].
extension LegacyDeviceViewStatePatterns on LegacyDeviceViewState {
/// A variant of `map` that fallback to returning `orElse`.
///
/// It is equivalent to doing:
@@ -114,10 +114,10 @@ extension ControlPanelViewStatePatterns on ControlPanelViewState {
/// }
/// ```
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _ControlPanelViewState value)? $default,{required TResult orElse(),}){
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _LegacyDeviceViewState value)? $default,{required TResult orElse(),}){
final _that = this;
switch (_that) {
case _ControlPanelViewState() when $default != null:
case _LegacyDeviceViewState() when $default != null:
return $default(_that);case _:
return orElse();
@@ -136,10 +136,10 @@ return $default(_that);case _:
/// }
/// ```
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _ControlPanelViewState value) $default,){
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _LegacyDeviceViewState value) $default,){
final _that = this;
switch (_that) {
case _ControlPanelViewState():
case _LegacyDeviceViewState():
return $default(_that);case _:
throw StateError('Unexpected subclass');
@@ -157,10 +157,10 @@ return $default(_that);case _:
/// }
/// ```
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _ControlPanelViewState value)? $default,){
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _LegacyDeviceViewState value)? $default,){
final _that = this;
switch (_that) {
case _ControlPanelViewState() when $default != null:
case _LegacyDeviceViewState() when $default != null:
return $default(_that);case _:
return null;
@@ -180,7 +180,7 @@ return $default(_that);case _:
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition, bool positionsError)? $default,{required TResult orElse(),}) {final _that = this;
switch (_that) {
case _ControlPanelViewState() when $default != null:
case _LegacyDeviceViewState() when $default != null:
return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition,_that.positionsError);case _:
return orElse();
@@ -201,7 +201,7 @@ return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selecte
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition, bool positionsError) $default,) {final _that = this;
switch (_that) {
case _ControlPanelViewState():
case _LegacyDeviceViewState():
return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition,_that.positionsError);case _:
throw StateError('Unexpected subclass');
@@ -221,7 +221,7 @@ return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selecte
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition, bool positionsError)? $default,) {final _that = this;
switch (_that) {
case _ControlPanelViewState() when $default != null:
case _LegacyDeviceViewState() when $default != null:
return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition,_that.positionsError);case _:
return null;
@@ -233,8 +233,8 @@ return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selecte
/// @nodoc
class _ControlPanelViewState implements ControlPanelViewState {
const _ControlPanelViewState({final List<DeviceEntity> devices = const [], this.selectedDevice, final List<PositionEntity> positions = const [], this.selectedPosition, this.positionsError = false}): _devices = devices,_positions = positions;
class _LegacyDeviceViewState implements LegacyDeviceViewState {
const _LegacyDeviceViewState({final List<DeviceEntity> devices = const [], this.selectedDevice, final List<PositionEntity> positions = const [], this.selectedPosition, this.positionsError = false}): _devices = devices,_positions = positions;
final List<DeviceEntity> _devices;
@@ -255,17 +255,17 @@ class _ControlPanelViewState implements ControlPanelViewState {
@override final PositionEntity? selectedPosition;
@override@JsonKey() final bool positionsError;
/// Create a copy of ControlPanelViewState
/// Create a copy of LegacyDeviceViewState
/// with the given fields replaced by the non-null parameter values.
@override @JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
_$ControlPanelViewStateCopyWith<_ControlPanelViewState> get copyWith => __$ControlPanelViewStateCopyWithImpl<_ControlPanelViewState>(this, _$identity);
_$LegacyDeviceViewStateCopyWith<_LegacyDeviceViewState> get copyWith => __$LegacyDeviceViewStateCopyWithImpl<_LegacyDeviceViewState>(this, _$identity);
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is _ControlPanelViewState&&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)&&(identical(other.positionsError, positionsError) || other.positionsError == positionsError));
return identical(this, other) || (other.runtimeType == runtimeType&&other is _LegacyDeviceViewState&&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)&&(identical(other.positionsError, positionsError) || other.positionsError == positionsError));
}
@@ -274,15 +274,15 @@ int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(
@override
String toString() {
return 'ControlPanelViewState(devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition, positionsError: $positionsError)';
return 'LegacyDeviceViewState(devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition, positionsError: $positionsError)';
}
}
/// @nodoc
abstract mixin class _$ControlPanelViewStateCopyWith<$Res> implements $ControlPanelViewStateCopyWith<$Res> {
factory _$ControlPanelViewStateCopyWith(_ControlPanelViewState value, $Res Function(_ControlPanelViewState) _then) = __$ControlPanelViewStateCopyWithImpl;
abstract mixin class _$LegacyDeviceViewStateCopyWith<$Res> implements $LegacyDeviceViewStateCopyWith<$Res> {
factory _$LegacyDeviceViewStateCopyWith(_LegacyDeviceViewState value, $Res Function(_LegacyDeviceViewState) _then) = __$LegacyDeviceViewStateCopyWithImpl;
@override @useResult
$Res call({
List<DeviceEntity> devices, DeviceEntity? selectedDevice, List<PositionEntity> positions, PositionEntity? selectedPosition, bool positionsError
@@ -293,17 +293,17 @@ $Res call({
}
/// @nodoc
class __$ControlPanelViewStateCopyWithImpl<$Res>
implements _$ControlPanelViewStateCopyWith<$Res> {
__$ControlPanelViewStateCopyWithImpl(this._self, this._then);
class __$LegacyDeviceViewStateCopyWithImpl<$Res>
implements _$LegacyDeviceViewStateCopyWith<$Res> {
__$LegacyDeviceViewStateCopyWithImpl(this._self, this._then);
final _ControlPanelViewState _self;
final $Res Function(_ControlPanelViewState) _then;
final _LegacyDeviceViewState _self;
final $Res Function(_LegacyDeviceViewState) _then;
/// Create a copy of ControlPanelViewState
/// Create a copy of LegacyDeviceViewState
/// with the given fields replaced by the non-null parameter values.
@override @pragma('vm:prefer-inline') $Res call({Object? devices = null,Object? selectedDevice = freezed,Object? positions = null,Object? selectedPosition = freezed,Object? positionsError = null,}) {
return _then(_ControlPanelViewState(
return _then(_LegacyDeviceViewState(
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
as DeviceEntity?,positions: null == positions ? _self._positions : positions // ignore: cast_nullable_to_non_nullable
@@ -313,7 +313,7 @@ as bool,
));
}
/// Create a copy of ControlPanelViewState
/// Create a copy of LegacyDeviceViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
@@ -325,7 +325,7 @@ $DeviceEntityCopyWith<$Res>? get selectedDevice {
return $DeviceEntityCopyWith<$Res>(_self.selectedDevice!, (value) {
return _then(_self.copyWith(selectedDevice: value));
});
}/// Create a copy of ControlPanelViewState
}/// Create a copy of LegacyDeviceViewState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')

View File

@@ -0,0 +1,36 @@
name: legacy_device_state
description: "Shared device state (selected device + latest positions) consumed by legacy modules (control_panel, location)."
publish_to: 'none'
resolution: workspace
version: 1.0.0+1
environment:
sdk: ^3.9.2
flutter: ">=1.17.0"
dependencies:
flutter:
sdk: flutter
legacy_shared:
path: ../legacy_shared
sf_infrastructure:
path: ../../../../packages/sf_infrastructure
sf_shared:
path: ../../../../packages/sf_shared
sf_tracking:
path: ../../../../packages/sf_tracking
flutter_riverpod: ^3.0.3
freezed_annotation: ^3.1.0
json_annotation: ^4.9.0
dio: ^5.9.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0
build_runner: ^2.7.1
freezed: ^3.2.3
json_serializable: ^6.11.2
flutter:
uses-material-design: true

View File

@@ -7,8 +7,13 @@ export 'src/widgets/week_day_chips.dart';
export 'src/components/menu_button.dart';
export 'src/data/models/device_response_model.dart';
export 'src/data/models/send_command_request_model.dart';
export 'package:sf_infrastructure/src/network/dio_error_mapper.dart';
export 'src/data/models/entities/position_entity.dart';
export 'src/data/models/entities/address_entity.dart';
export 'src/data/models/entities/network_entity.dart';
export 'src/data/models/latest_positions_response_model.dart';
export 'src/utils/device_csv_builder.dart';
export 'src/utils/battery_utils.dart';
export 'src/utils/date_format_utils.dart';
export 'src/domain/repositories/command_repository.dart';
export 'src/providers/commands_repository_provider.dart';
export 'src/data/datasources/device_settings_update_datasource.dart';

View File

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

View File

@@ -1,9 +1,9 @@
// ignore_for_file: non_constant_identifier_names
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:control_panel/src/core/domain/entities/address_entity.dart';
import 'package:control_panel/src/core/domain/entities/network_entity.dart';
import 'package:control_panel/src/core/domain/entities/position_entity.dart';
import 'entities/address_entity.dart';
import 'entities/network_entity.dart';
import 'entities/position_entity.dart';
part 'latest_positions_response_model.freezed.dart';
part 'latest_positions_response_model.g.dart';

View File

@@ -24,6 +24,7 @@ workspace:
- modules/legacy/modules/location
- modules/legacy/modules/settings
- modules/legacy/packages/legacy_shared
- modules/legacy/packages/legacy_device_state
- packages/design_system
- packages/flutter_treezor_entrust_sdk_bridge
- packages/flutter_treezor_entrust_sdk_bridge/example