补充generatePath的cubit层
This commit is contained in:
@@ -116,7 +116,7 @@ Future<void> init() async {
|
|||||||
sl.registerLazySingleton(() => AppUserCubit()); // AuthCubit 依赖它,必须先注册
|
sl.registerLazySingleton(() => AppUserCubit()); // AuthCubit 依赖它,必须先注册
|
||||||
sl.registerLazySingleton(() => GetDeviceLocationUseCase(sl()));
|
sl.registerLazySingleton(() => GetDeviceLocationUseCase(sl()));
|
||||||
sl.registerLazySingleton(
|
sl.registerLazySingleton(
|
||||||
() => DevicesCubit(sl(), sl(), sl(), sl(), sl(), sl(), sl(), sl(), sl()),
|
() => DevicesCubit(sl(), sl(), sl(), sl(), sl(), sl(), sl(), sl(), sl(),sl()),
|
||||||
);
|
);
|
||||||
sl.registerFactory(() => RemoteControlCubit(sl()));
|
sl.registerFactory(() => RemoteControlCubit(sl()));
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
class GenerPathFailure {
|
||||||
|
final String message;
|
||||||
|
|
||||||
|
GenerPathFailure(this.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ServerFailure extends GenerPathFailure {
|
||||||
|
ServerFailure(String message) : super(message);
|
||||||
|
}
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
|
import 'package:fpdart/fpdart.dart';
|
||||||
|
|
||||||
|
import '../../../../core/error/failure.dart';
|
||||||
|
import '../../../auth/domain/errors/auth_failure.dart';
|
||||||
import '../../data/models/device_add_path_point_model.dart';
|
import '../../data/models/device_add_path_point_model.dart';
|
||||||
import '../../data/models/device_work_area_param_model.dart';
|
import '../../data/models/device_work_area_param_model.dart';
|
||||||
import '../repositories/path_repository.dart';
|
import '../repositories/path_repository.dart';
|
||||||
|
|
||||||
abstract class GeneratePathUseCase {
|
abstract class GeneratePathUseCase {
|
||||||
Future<List<DeviceAddPathPointModel>> execute({
|
Future<Either<Failure, List<DeviceAddPathPointModel>>> execute({
|
||||||
required ReferencePoint reference,
|
required ReferencePoint reference,
|
||||||
required int heading,
|
required int heading,
|
||||||
required OuterBoundary outer,
|
required OuterBoundary outer,
|
||||||
@@ -11,27 +15,32 @@ abstract class GeneratePathUseCase {
|
|||||||
required int workType,
|
required int workType,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class GeneratePathUseCaseImpl implements GeneratePathUseCase {
|
class GeneratePathUseCaseImpl implements GeneratePathUseCase {
|
||||||
final PathRepository _repository;
|
final PathRepository _repository;
|
||||||
|
|
||||||
GeneratePathUseCaseImpl(this._repository);
|
GeneratePathUseCaseImpl(this._repository);
|
||||||
//完成路径的生成
|
|
||||||
@override
|
@override
|
||||||
Future<List<DeviceAddPathPointModel>> execute({
|
Future<Either<Failure, List<DeviceAddPathPointModel>>> execute({
|
||||||
required ReferencePoint reference,
|
required ReferencePoint reference,
|
||||||
required int heading,
|
required int heading,
|
||||||
required OuterBoundary outer,
|
required OuterBoundary outer,
|
||||||
required List<HoleBoundary> holes,
|
required List<HoleBoundary> holes,
|
||||||
required int workType,
|
required int workType,
|
||||||
}) async {
|
}) async {
|
||||||
return await _repository.generatePath(
|
try {
|
||||||
reference: reference,
|
final result = await _repository.generatePath(
|
||||||
heading: heading,
|
reference: reference,
|
||||||
outer: outer,
|
heading: heading,
|
||||||
holes: holes,
|
outer: outer,
|
||||||
workType: workType,
|
holes: holes,
|
||||||
);
|
workType: workType,
|
||||||
|
);
|
||||||
|
return Right(result); // 成功时返回 Right
|
||||||
|
} catch (e) {
|
||||||
|
return Left(ServerFailure(e.toString(),1)); // 失败时返回 Left
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,14 @@ import 'package:flutter/rendering.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:maibu_satabot_v2/features/devices/domain/entities/device_entity.dart';
|
import 'package:maibu_satabot_v2/features/devices/domain/entities/device_entity.dart';
|
||||||
import 'package:maibu_satabot_v2/features/devices/domain/repositories/device_repository.dart';
|
import 'package:maibu_satabot_v2/features/devices/domain/repositories/device_repository.dart';
|
||||||
|
import 'package:maibu_satabot_v2/features/devices/domain/usecases/generate_path_usecase.dart';
|
||||||
import 'package:maibu_satabot_v2/features/devices/domain/usecases/get_user_device_usecase.dart';
|
import 'package:maibu_satabot_v2/features/devices/domain/usecases/get_user_device_usecase.dart';
|
||||||
import 'package:maibu_satabot_v2/features/devices/domain/usecases/save_work_record_usecase.dart';
|
import 'package:maibu_satabot_v2/features/devices/domain/usecases/save_work_record_usecase.dart';
|
||||||
import 'package:maibu_satabot_v2/features/devices/domain/usecases/select_work_record_usecase.dart';
|
import 'package:maibu_satabot_v2/features/devices/domain/usecases/select_work_record_usecase.dart';
|
||||||
import 'package:maibu_satabot_v2/features/devices/domain/usecases/unbind_device_usecase.dart';
|
import 'package:maibu_satabot_v2/features/devices/domain/usecases/unbind_device_usecase.dart';
|
||||||
import 'package:maibu_satabot_v2/features/devices/domain/usecases/update_devicename_usecase.dart';
|
import 'package:maibu_satabot_v2/features/devices/domain/usecases/update_devicename_usecase.dart';
|
||||||
|
|
||||||
|
import '../../data/models/device_work_area_param_model.dart';
|
||||||
import '../../domain/usecases/delete_work_record_usecase.dart';
|
import '../../domain/usecases/delete_work_record_usecase.dart';
|
||||||
import '../../domain/usecases/get_device_location_usecase.dart';
|
import '../../domain/usecases/get_device_location_usecase.dart';
|
||||||
import '../../domain/usecases/get_work_record_usecase.dart';
|
import '../../domain/usecases/get_work_record_usecase.dart';
|
||||||
@@ -23,6 +25,7 @@ class DevicesCubit extends Cubit<DevicesState> {
|
|||||||
final UpdateDevicenameUsecase _updateDevicename;
|
final UpdateDevicenameUsecase _updateDevicename;
|
||||||
final SelectWorkRecordUseCase _selectWorkRecordUseCase;
|
final SelectWorkRecordUseCase _selectWorkRecordUseCase;
|
||||||
final SaveWorkRecordUseCase _saveWorkRecordUseCase;
|
final SaveWorkRecordUseCase _saveWorkRecordUseCase;
|
||||||
|
final GeneratePathUseCase _generatePathUseCase;
|
||||||
|
|
||||||
DevicesCubit(
|
DevicesCubit(
|
||||||
this.repository,
|
this.repository,
|
||||||
@@ -34,6 +37,7 @@ class DevicesCubit extends Cubit<DevicesState> {
|
|||||||
this._updateDevicename,
|
this._updateDevicename,
|
||||||
this._selectWorkRecordUseCase,
|
this._selectWorkRecordUseCase,
|
||||||
this._saveWorkRecordUseCase,
|
this._saveWorkRecordUseCase,
|
||||||
|
this._generatePathUseCase
|
||||||
) : super(const DevicesState());
|
) : super(const DevicesState());
|
||||||
|
|
||||||
Future<void> unbindDevice(String deviceId, String deviceName) async {
|
Future<void> unbindDevice(String deviceId, String deviceName) async {
|
||||||
@@ -298,6 +302,30 @@ class DevicesCubit extends Cubit<DevicesState> {
|
|||||||
(data) => emit(state.copyWith(isLoading: false)),
|
(data) => emit(state.copyWith(isLoading: false)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
/// generatePath
|
||||||
|
Future<void> generatePath({
|
||||||
|
required ReferencePoint reference,
|
||||||
|
required int heading,
|
||||||
|
required OuterBoundary outer,
|
||||||
|
required List<HoleBoundary> holes,
|
||||||
|
required int workType,
|
||||||
|
}) async {
|
||||||
|
emit(state.copyWith(isLoading: true));
|
||||||
|
final result = await _generatePathUseCase.execute(
|
||||||
|
reference: reference,
|
||||||
|
heading: heading,
|
||||||
|
outer: outer,
|
||||||
|
holes: holes,
|
||||||
|
workType: workType,
|
||||||
|
);
|
||||||
|
|
||||||
|
result.fold(
|
||||||
|
(failure) => emit(state.copyWith(errorMessage: failure.message)),
|
||||||
|
(pathData) => emit(state.copyWith(generatedPath: pathData)),
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:maibu_satabot_v2/features/devices/domain/entities/device_entity.dart';
|
import 'package:maibu_satabot_v2/features/devices/domain/entities/device_entity.dart';
|
||||||
|
|
||||||
|
import '../../data/models/device_add_path_point_model.dart';
|
||||||
enum DeviceOperationType {
|
enum DeviceOperationType {
|
||||||
none, // 无操作
|
none, // 无操作
|
||||||
unbind, // 解绑设备
|
unbind, // 解绑设备
|
||||||
@@ -17,6 +19,8 @@ class DevicesState extends Equatable {
|
|||||||
final List<Map<String, dynamic>>? workRecords;
|
final List<Map<String, dynamic>>? workRecords;
|
||||||
final DeviceOperationType operationType; // 标记当前操作类型
|
final DeviceOperationType operationType; // 标记当前操作类型
|
||||||
final List<Map<String, dynamic>>? pathData;
|
final List<Map<String, dynamic>>? pathData;
|
||||||
|
final List<DeviceAddPathPointModel>? generatedPath; // 新增字段
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const DevicesState({
|
const DevicesState({
|
||||||
@@ -29,6 +33,7 @@ class DevicesState extends Equatable {
|
|||||||
this.workRecords,
|
this.workRecords,
|
||||||
this.operationType = DeviceOperationType.none, // 默认无操作
|
this.operationType = DeviceOperationType.none, // 默认无操作
|
||||||
this.pathData,
|
this.pathData,
|
||||||
|
this.generatedPath,
|
||||||
});
|
});
|
||||||
|
|
||||||
// 使用 copyWith 方便局部更新状态
|
// 使用 copyWith 方便局部更新状态
|
||||||
@@ -42,6 +47,7 @@ class DevicesState extends Equatable {
|
|||||||
List<Map<String, dynamic>>? workRecords,
|
List<Map<String, dynamic>>? workRecords,
|
||||||
DeviceOperationType? operationType,
|
DeviceOperationType? operationType,
|
||||||
List<Map<String, dynamic>>? pathData,
|
List<Map<String, dynamic>>? pathData,
|
||||||
|
List<DeviceAddPathPointModel>? generatedPath,
|
||||||
}) {
|
}) {
|
||||||
return DevicesState(
|
return DevicesState(
|
||||||
devices: devices ?? this.devices,
|
devices: devices ?? this.devices,
|
||||||
|
|||||||
Reference in New Issue
Block a user