From b16427f2081f31a9b150f72c88d444dd498d15a7 Mon Sep 17 00:00:00 2001 From: liyuqi Date: Tue, 15 Apr 2025 12:36:12 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=202.=20=E8=A7=A3=E5=86=B3=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=B1=BB=E5=9E=8B=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/app/enum/wms_api_response_code.dart | 11 ++++ lib/core/di/providers.dart | 58 ++++++++++--------- .../notifiers/page_repository_notifier.dart | 18 +++--- .../repositories/page_repository_impl.dart | 7 +-- .../domain/models/base_wms_api_response.dart | 14 ++--- .../domain/repositories/page_repository.dart | 4 +- lib/features/page/presentation/home.dart | 38 ++++++++---- .../notifiers/stock_in_empty_notifier.dart | 22 +++---- .../notifiers/stock_in_manual_notifier.dart | 22 +++---- .../notifiers/stock_out_empty_notifier.dart | 11 ++-- .../repositories/stock_repository_impl.dart | 12 ++-- .../domain/models/base_wms_api_response.dart | 12 ++-- .../domain/repositories/stock_repository.dart | 6 +- .../screens/stock_in_empty_screen.dart | 36 ++++++++---- .../screens/stock_in_manual_screen.dart | 35 +++++++---- .../screens/stock_out_empty_screen.dart | 37 +++++++----- 16 files changed, 205 insertions(+), 138 deletions(-) create mode 100644 lib/app/enum/wms_api_response_code.dart diff --git a/lib/app/enum/wms_api_response_code.dart b/lib/app/enum/wms_api_response_code.dart new file mode 100644 index 0000000..3e49afd --- /dev/null +++ b/lib/app/enum/wms_api_response_code.dart @@ -0,0 +1,11 @@ +enum WmsApiResponseCode { + success(code: 0, message: "成功"), + warning(code: 400, message: "警告"), + fail(code: 500, message: "失败"), + error(code: 999, message: "错误"); + + final int code; + final String message; + + const WmsApiResponseCode({required this.code, required this.message}); +} diff --git a/lib/core/di/providers.dart b/lib/core/di/providers.dart index abd40eb..f468141 100644 --- a/lib/core/di/providers.dart +++ b/lib/core/di/providers.dart @@ -1,5 +1,6 @@ import 'package:flutter/services.dart' show rootBundle; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../../features/page/domain/models/base_wms_api_response.dart'; import '/features/page/business_logic/notifiers/page_repository_notifier.dart'; import '/features/page/data/repositories/page_repository_impl.dart'; import '/features/page/domain/repositories/page_repository.dart'; @@ -12,6 +13,7 @@ import '../api/config/api_config.dart'; import '../../features/stock/data/repositories/stock_repository_impl.dart'; import '../../features/stock/domain/repositories/stock_repository.dart'; import '../../features/stock/business_logic/notifiers/stock_in_empty_notifier.dart'; +import '../../features/stock/domain/models/base_wms_api_response.dart'; final _defaultApiConfig = ApiConfig.fromYaml(''' wms: @@ -48,34 +50,34 @@ final pageRepositoryProvider = Provider((ref) { return PageRepositoryImpl(wmsApiClient: apiClient); }); -final stockInEmptyNotifierProvider = - StateNotifierProvider.autoDispose>(( - ref, - ) { - final repository = ref.watch(stockRepositoryProvider); - return StockInEmptyNotifier(repository); - }); +final stockInEmptyNotifierProvider = StateNotifierProvider.autoDispose< + StockInEmptyNotifier, + AsyncValue +>((ref) { + final repository = ref.watch(stockRepositoryProvider); + return StockInEmptyNotifier(repository); +}); -final stockInNotifierProvider = - StateNotifierProvider.autoDispose>(( - ref, - ) { - final repository = ref.watch(stockRepositoryProvider); - return StockInManualNotifier(repository); - }); +final stockInNotifierProvider = StateNotifierProvider.autoDispose< + StockInManualNotifier, + AsyncValue +>((ref) { + final repository = ref.watch(stockRepositoryProvider); + return StockInManualNotifier(repository); +}); -final pageNotifierProvider = - StateNotifierProvider.autoDispose>( - (ref) { - final repository = ref.watch(pageRepositoryProvider); - return PageRepositoryNotifier(repository); - }, - ); +final pageNotifierProvider = StateNotifierProvider.autoDispose< + PageRepositoryNotifier, + AsyncValue +>((ref) { + final repository = ref.watch(pageRepositoryProvider); + return PageRepositoryNotifier(repository); +}); -final stockOutEmptyNotifierProvider = - StateNotifierProvider.autoDispose>(( - ref, - ) { - final repository = ref.watch(stockRepositoryProvider); - return StockOutEmptyNotifier(repository); - }); +final stockOutEmptyNotifierProvider = StateNotifierProvider.autoDispose< + StockOutEmptyNotifier, + AsyncValue +>((ref) { + final repository = ref.watch(stockRepositoryProvider); + return StockOutEmptyNotifier(repository); +}); diff --git a/lib/features/page/business_logic/notifiers/page_repository_notifier.dart b/lib/features/page/business_logic/notifiers/page_repository_notifier.dart index 2720b52..bd81ceb 100644 --- a/lib/features/page/business_logic/notifiers/page_repository_notifier.dart +++ b/lib/features/page/business_logic/notifiers/page_repository_notifier.dart @@ -1,8 +1,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pda_template/features/page/domain/repositories/page_repository.dart'; +import '/features/page/domain/models/base_wms_api_response.dart'; +import '/features/page/domain/repositories/page_repository.dart'; import '../../../../core/di/providers.dart'; -class PageRepositoryNotifier extends StateNotifier> { +class PageRepositoryNotifier + extends StateNotifier> { final PageRepository _repository; PageRepositoryNotifier(this._repository) : super(const AsyncValue.data(null)); @@ -10,18 +12,18 @@ class PageRepositoryNotifier extends StateNotifier> { Future submit() async { state = const AsyncValue.loading(); try { - await _repository.testLink(); - state = const AsyncValue.data(null); + final response = await _repository.testLink(); + state = AsyncValue.data(response); } catch (e) { state = AsyncValue.error(e, StackTrace.current); } } } -final pageNotifierProvider = -StateNotifierProvider.autoDispose>(( - ref, - ) { +final pageNotifierProvider = StateNotifierProvider.autoDispose< + PageRepositoryNotifier, + AsyncValue +>((ref) { final repository = ref.watch(pageRepositoryProvider); return PageRepositoryNotifier(repository); }); diff --git a/lib/features/page/data/repositories/page_repository_impl.dart b/lib/features/page/data/repositories/page_repository_impl.dart index 2bf9ff8..85e7c72 100644 --- a/lib/features/page/data/repositories/page_repository_impl.dart +++ b/lib/features/page/data/repositories/page_repository_impl.dart @@ -1,7 +1,6 @@ import 'package:pda_template/core/api/clients/wms_api_client.dart'; import 'package:pda_template/features/page/domain/repositories/page_repository.dart'; -import '../../../stock/domain/models/base_wms_api_response.dart'; - +import '../../domain/models/base_wms_api_response.dart'; class PageRepositoryImpl extends PageRepository { final WmsApiClient wmsApiClient; @@ -9,7 +8,7 @@ class PageRepositoryImpl extends PageRepository { PageRepositoryImpl({required this.wmsApiClient}); @override - Future testLink() { - return wmsApiClient.testLink().then((value) => BaseWmsApiResponse.fromDto(value)); + Future testLink() { + return wmsApiClient.testLink().then((value) => PageBaseWmsApiResponse.fromDto(value)); } } \ No newline at end of file diff --git a/lib/features/page/domain/models/base_wms_api_response.dart b/lib/features/page/domain/models/base_wms_api_response.dart index 405eebb..b407a64 100644 --- a/lib/features/page/domain/models/base_wms_api_response.dart +++ b/lib/features/page/domain/models/base_wms_api_response.dart @@ -1,20 +1,20 @@ -import '../../../../core/api/models/responses/base_wms_api_response_dto.dart'; +import '/core/api/models/responses/base_wms_api_response_dto.dart'; -class BaseWmsApiResponse { +class PageBaseWmsApiResponse { final int code; final String message; - BaseWmsApiResponse({required this.code, required this.message}); + PageBaseWmsApiResponse({required this.code, required this.message}); - factory BaseWmsApiResponse.fromJson(Map json) { - return BaseWmsApiResponse( + factory PageBaseWmsApiResponse.fromJson(Map json) { + return PageBaseWmsApiResponse( code: int.parse(json['code'].toString()), message: json['message'].toString(), ); } - factory BaseWmsApiResponse.fromDto(BaseWmsApiResponseDto dto) { - return BaseWmsApiResponse( + factory PageBaseWmsApiResponse.fromDto(BaseWmsApiResponseDto dto) { + return PageBaseWmsApiResponse( code: dto.code, message: dto.message, ); diff --git a/lib/features/page/domain/repositories/page_repository.dart b/lib/features/page/domain/repositories/page_repository.dart index 98ab9cc..0169a16 100644 --- a/lib/features/page/domain/repositories/page_repository.dart +++ b/lib/features/page/domain/repositories/page_repository.dart @@ -1,5 +1,5 @@ -import '../../../stock/domain/models/base_wms_api_response.dart'; +import '../models/base_wms_api_response.dart'; abstract class PageRepository { - Future testLink(); + Future testLink(); } \ No newline at end of file diff --git a/lib/features/page/presentation/home.dart b/lib/features/page/presentation/home.dart index 6f164bd..a50766c 100644 --- a/lib/features/page/presentation/home.dart +++ b/lib/features/page/presentation/home.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:bruno/bruno.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:pda_template/app/enum/wms_api_response_code.dart'; +import '/features/page/domain/models/base_wms_api_response.dart'; import 'package:yaml/yaml.dart'; import '../../../app/enum/config_path_enum.dart'; import '../../../core/di/providers.dart'; @@ -21,7 +23,7 @@ class _HomePageState extends ConsumerState { List stockChartsData = []; late Color primaryColor; bool _isLoading = true; - AsyncValue? _previousState; + AsyncValue? _previousState; bool _hasSubmitted = false; @override @@ -213,24 +215,36 @@ class _HomePageState extends ConsumerState { ref.read(pageNotifierProvider.notifier).submit(); } - void _handleState(AsyncValue state) { + void _handleState(AsyncValue state) { state.whenOrNull( loading: () => BrnLoadingDialog.show(context, content: "正在请求"), error: (error, _) { BrnLoadingDialog.dismiss(context); DialogUtils.showErrorMessage(context, "请求发生错误", error.toString()); + _hasSubmitted = false; }, - data: (_) { + data: (response) { BrnLoadingDialog.dismiss(context); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text("请求成功"), - duration: const Duration(seconds: 2), - behavior: SnackBarBehavior.floating, - backgroundColor: Colors.green, - margin: const EdgeInsets.only(bottom: 100, left: 20, right: 20), - ), - ); + if (response != null && + response.code == WmsApiResponseCode.success.code) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text("请求成功"), + duration: const Duration(seconds: 2), + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.green, + margin: const EdgeInsets.only(bottom: 100, left: 20, right: 20), + ), + ); + _hasSubmitted = false; + } else if (response != null) { + DialogUtils.showWarningMessage( + context, + "操作未成功", + "${response.message} ${response.code.toString()}", + btnLabel: "返回", + ); + } }, ); } diff --git a/lib/features/stock/business_logic/notifiers/stock_in_empty_notifier.dart b/lib/features/stock/business_logic/notifiers/stock_in_empty_notifier.dart index 19c4687..76527f5 100644 --- a/lib/features/stock/business_logic/notifiers/stock_in_empty_notifier.dart +++ b/lib/features/stock/business_logic/notifiers/stock_in_empty_notifier.dart @@ -2,8 +2,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/di/providers.dart'; import '../../domain/models/stock_in_request.dart'; import '../../domain/repositories/stock_repository.dart'; +import '../../domain/models/base_wms_api_response.dart'; -class StockInEmptyNotifier extends StateNotifier> { +class StockInEmptyNotifier + extends StateNotifier> { final StockRepository _repository; StockInEmptyNotifier(this._repository) : super(const AsyncValue.data(null)); @@ -14,7 +16,7 @@ class StockInEmptyNotifier extends StateNotifier> { }) async { state = const AsyncValue.loading(); try { - await _repository.requireStockIn( + final response = await _repository.requireStockIn( StockInRequest( emptyTask: true, vehicleId: vehicleId, @@ -23,17 +25,17 @@ class StockInEmptyNotifier extends StateNotifier> { origin: standId, ), ); - state = const AsyncValue.data(null); + state = AsyncValue.data(response); } catch (e) { state = AsyncValue.error(e, StackTrace.current); } } } -final stockEmptyInNotifierProvider = - StateNotifierProvider.autoDispose>(( - ref, - ) { - final repository = ref.watch(stockRepositoryProvider); - return StockInEmptyNotifier(repository); - }); +final stockEmptyInNotifierProvider = StateNotifierProvider.autoDispose< + StockInEmptyNotifier, + AsyncValue +>((ref) { + final repository = ref.watch(stockRepositoryProvider); + return StockInEmptyNotifier(repository); +}); diff --git a/lib/features/stock/business_logic/notifiers/stock_in_manual_notifier.dart b/lib/features/stock/business_logic/notifiers/stock_in_manual_notifier.dart index 1f6a7e2..a484949 100644 --- a/lib/features/stock/business_logic/notifiers/stock_in_manual_notifier.dart +++ b/lib/features/stock/business_logic/notifiers/stock_in_manual_notifier.dart @@ -1,10 +1,12 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:pda_template/features/stock/domain/models/base_wms_api_response.dart'; import '../../../../core/di/providers.dart'; import '../../domain/models/goodsInfo_for_task.dart'; import '/features/stock/domain/repositories/stock_repository.dart'; import '../../domain/models/stock_in_request.dart'; -class StockInManualNotifier extends StateNotifier> { +class StockInManualNotifier + extends StateNotifier> { final StockRepository _repository; StockInManualNotifier(this._repository) : super(const AsyncValue.data(null)); @@ -16,7 +18,7 @@ class StockInManualNotifier extends StateNotifier> { }) async { state = const AsyncValue.loading(); try { - await _repository.requireStockIn( + final response = await _repository.requireStockIn( StockInRequest( emptyTask: false, vehicleId: vehicleId, @@ -25,17 +27,17 @@ class StockInManualNotifier extends StateNotifier> { origin: standId, ), ); - state = const AsyncValue.data(null); + state = AsyncValue.data(response); } catch (e) { state = AsyncValue.error(e, StackTrace.current); } } } -final stockInNotifierProvider = - StateNotifierProvider.autoDispose>(( - ref, - ) { - final repository = ref.watch(stockRepositoryProvider); - return StockInManualNotifier(repository); - }); +final stockInNotifierProvider = StateNotifierProvider.autoDispose< + StockInManualNotifier, + AsyncValue +>((ref) { + final repository = ref.watch(stockRepositoryProvider); + return StockInManualNotifier(repository); +}); diff --git a/lib/features/stock/business_logic/notifiers/stock_out_empty_notifier.dart b/lib/features/stock/business_logic/notifiers/stock_out_empty_notifier.dart index d624d2f..2d52d8b 100644 --- a/lib/features/stock/business_logic/notifiers/stock_out_empty_notifier.dart +++ b/lib/features/stock/business_logic/notifiers/stock_out_empty_notifier.dart @@ -1,8 +1,9 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pda_template/features/stock/domain/repositories/stock_repository.dart'; +import '/features/stock/domain/models/base_wms_api_response.dart'; +import '/features/stock/domain/repositories/stock_repository.dart'; import '/core/di/providers.dart'; -class StockOutEmptyNotifier extends StateNotifier> { +class StockOutEmptyNotifier extends StateNotifier> { final StockRepository repository; StockOutEmptyNotifier(this.repository) : super(const AsyncValue.data(null)); @@ -13,11 +14,11 @@ class StockOutEmptyNotifier extends StateNotifier> { }) async { state = const AsyncValue.loading(); try { - await repository.emptyStockOut( + final response = await repository.emptyStockOut( needNum: needNum, destination: destination, ); - state = const AsyncValue.data(null); + state = AsyncValue.data(response); } catch (e) { state = AsyncValue.error(e, StackTrace.current); } @@ -25,7 +26,7 @@ class StockOutEmptyNotifier extends StateNotifier> { } final stockEmptyOutNotifierProvider = - StateNotifierProvider.autoDispose>(( + StateNotifierProvider.autoDispose>(( ref, ) { final repository = ref.watch(stockRepositoryProvider); diff --git a/lib/features/stock/data/repositories/stock_repository_impl.dart b/lib/features/stock/data/repositories/stock_repository_impl.dart index 8a78329..e1357ed 100644 --- a/lib/features/stock/data/repositories/stock_repository_impl.dart +++ b/lib/features/stock/data/repositories/stock_repository_impl.dart @@ -11,14 +11,14 @@ class StockRepositoryImpl implements StockRepository { StockRepositoryImpl({required this.wmsApiClient}); @override - Future requireStockIn(StockInRequest request) { + Future requireStockIn(StockInRequest request) { return wmsApiClient .requireStockIn(request.toDto()) - .then((value) => BaseWmsApiResponse.fromDto(value)); + .then((value) => StockBaseWmsApiResponse.fromDto(value)); } @override - Future emptyStockIn({ + Future emptyStockIn({ required String vehicleId, required String standId, required String origin, @@ -32,11 +32,11 @@ class StockRepositoryImpl implements StockRepository { ); return wmsApiClient .requireStockIn(request.toDto()) - .then((value) => BaseWmsApiResponse.fromDto(value)); + .then((value) => StockBaseWmsApiResponse.fromDto(value)); } @override - Future emptyStockOut({ + Future emptyStockOut({ required int needNum, required String destination, }) { @@ -51,6 +51,6 @@ class StockRepositoryImpl implements StockRepository { ); return wmsApiClient .requireStockOut(request.toDto()) - .then((value) => BaseWmsApiResponse.fromDto(value)); + .then((value) => StockBaseWmsApiResponse.fromDto(value)); } } diff --git a/lib/features/stock/domain/models/base_wms_api_response.dart b/lib/features/stock/domain/models/base_wms_api_response.dart index 405eebb..4f3d1ba 100644 --- a/lib/features/stock/domain/models/base_wms_api_response.dart +++ b/lib/features/stock/domain/models/base_wms_api_response.dart @@ -1,20 +1,20 @@ import '../../../../core/api/models/responses/base_wms_api_response_dto.dart'; -class BaseWmsApiResponse { +class StockBaseWmsApiResponse { final int code; final String message; - BaseWmsApiResponse({required this.code, required this.message}); + StockBaseWmsApiResponse({required this.code, required this.message}); - factory BaseWmsApiResponse.fromJson(Map json) { - return BaseWmsApiResponse( + factory StockBaseWmsApiResponse.fromJson(Map json) { + return StockBaseWmsApiResponse( code: int.parse(json['code'].toString()), message: json['message'].toString(), ); } - factory BaseWmsApiResponse.fromDto(BaseWmsApiResponseDto dto) { - return BaseWmsApiResponse( + factory StockBaseWmsApiResponse.fromDto(BaseWmsApiResponseDto dto) { + return StockBaseWmsApiResponse( code: dto.code, message: dto.message, ); diff --git a/lib/features/stock/domain/repositories/stock_repository.dart b/lib/features/stock/domain/repositories/stock_repository.dart index 390ec12..04e3ff2 100644 --- a/lib/features/stock/domain/repositories/stock_repository.dart +++ b/lib/features/stock/domain/repositories/stock_repository.dart @@ -2,9 +2,9 @@ import '../models/stock_in_request.dart'; import '../models/base_wms_api_response.dart'; abstract class StockRepository { - Future emptyStockIn({required String vehicleId, required String standId, required String origin}); + Future emptyStockIn({required String vehicleId, required String standId, required String origin}); - Future requireStockIn(StockInRequest request); + Future requireStockIn(StockInRequest request); - Future emptyStockOut({required int needNum, required String destination}); + Future emptyStockOut({required int needNum, required String destination}); } diff --git a/lib/features/stock/presentation/screens/stock_in_empty_screen.dart b/lib/features/stock/presentation/screens/stock_in_empty_screen.dart index 865c533..7739bce 100644 --- a/lib/features/stock/presentation/screens/stock_in_empty_screen.dart +++ b/lib/features/stock/presentation/screens/stock_in_empty_screen.dart @@ -1,12 +1,15 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:bruno/bruno.dart'; +import 'package:pda_template/app/enum/wms_api_response_code.dart'; +import 'package:pda_template/app/enum/wms_out_type.dart'; import 'package:pda_template/core/di/providers.dart' as app_providers; import 'package:flutter/services.dart' show rootBundle; import 'package:yaml/yaml.dart'; import '../../../../app/enum/config_path_enum.dart'; import '../../../../app/enum/stand.dart'; import '../../../../core/utils/extensions/dialogUtils.dart'; +import '../../domain/models/base_wms_api_response.dart'; class StockInEmpty extends ConsumerStatefulWidget { const StockInEmpty({super.key}); @@ -20,7 +23,7 @@ class _StockInEmptyPageState extends ConsumerState { Stand? _selectedStand; late Color primaryColor; bool _isLoading = true; - AsyncValue? _previousState; + AsyncValue? _previousState; bool _hasSubmitted = false; @override @@ -33,16 +36,12 @@ class _StockInEmptyPageState extends ConsumerState { void didChangeDependencies() { super.didChangeDependencies(); - // 获取当前状态 final currentState = ref.read(app_providers.stockInEmptyNotifierProvider); - // 只有在状态变化且已提交过请求时才处理状态 if (_previousState != currentState && _hasSubmitted) { _previousState = currentState; - // 使用Future.microtask确保在build完成后处理状态 Future.microtask(() => _handleState(currentState)); } else { - // 仅保存初始状态,不处理 _previousState = currentState; } } @@ -64,11 +63,9 @@ class _StockInEmptyPageState extends ConsumerState { return Scaffold(body: Center(child: CircularProgressIndicator())); } - // 监听状态变化,但不在build中处理 ref.listen(app_providers.stockInEmptyNotifierProvider, (previous, next) { if (previous != next && _hasSubmitted) { _previousState = next; - // 使用Future.microtask确保在build完成后处理状态 Future.microtask(() => _handleState(next)); } }); @@ -192,18 +189,33 @@ class _StockInEmptyPageState extends ConsumerState { .submit(vehicleId: vehicleId, standId: standId!); } - void _handleState(AsyncValue state) { + void _handleState(AsyncValue state) { state.whenOrNull( loading: () => BrnLoadingDialog.show(context, content: "正在请求"), error: (error, _) { BrnLoadingDialog.dismiss(context); DialogUtils.showErrorMessage(context, "请求发生错误", error.toString()); }, - data: (_) { + data: (response) { BrnLoadingDialog.dismiss(context); - DialogUtils.showSuccessMessage(context, "成功", "入库成功", btnLabel: "我知道了"); - _vehicleTextController.clear(); - setState(() => _selectedStand = null); + if (response != null && + response.code == WmsApiResponseCode.success.code) { + DialogUtils.showSuccessMessage( + context, + "成功", + "入库成功", + btnLabel: "我知道了", + ); + _vehicleTextController.clear(); + setState(() => _selectedStand = null); + } else if (response != null) { + DialogUtils.showWarningMessage( + context, + "操作未成功", + "${response.message} ${response.code.toString()}", + btnLabel: "返回", + ); + } }, ); } diff --git a/lib/features/stock/presentation/screens/stock_in_manual_screen.dart b/lib/features/stock/presentation/screens/stock_in_manual_screen.dart index e277f3d..7ac6c13 100644 --- a/lib/features/stock/presentation/screens/stock_in_manual_screen.dart +++ b/lib/features/stock/presentation/screens/stock_in_manual_screen.dart @@ -2,6 +2,8 @@ import 'package:bruno/bruno.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:pda_template/app/enum/wms_api_response_code.dart'; +import 'package:pda_template/features/stock/domain/models/base_wms_api_response.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; import 'package:yaml/yaml.dart'; import '../../../../app/enum/config_path_enum.dart'; @@ -25,7 +27,7 @@ class _StockInManualPageState extends ConsumerState { Stand? _selectedStand; late Color primaryColor; bool _isLoading = true; - AsyncValue? _previousState; + AsyncValue? _previousState; bool _hasSubmitted = false; @override @@ -90,7 +92,7 @@ class _StockInManualPageState extends ConsumerState { }); } - void _handleState(AsyncValue state) { + void _handleState(AsyncValue state) { state.whenOrNull( loading: () => BrnLoadingDialog.show(context, content: "正在请求"), error: (error, _) { @@ -98,16 +100,25 @@ class _StockInManualPageState extends ConsumerState { DialogUtils.showErrorMessage(context, "请求发生错误", error.toString()); _hasSubmitted = false; }, - data: (_) { + data: (response) { BrnLoadingDialog.dismiss(context); - DialogUtils.showSuccessMessage(context, "成功", "入库成功", btnLabel: "我知道了"); - _vehicleIdController.clear(); - _goodsCodeController.clear(); - goodsInfoList = []; - setState(() { - _selectedStand = null; - _hasSubmitted = false; - }); + if (response != null && response.code == WmsApiResponseCode.success.code) { + DialogUtils.showSuccessMessage(context, "成功", "入库成功", btnLabel: "我知道了"); + _vehicleIdController.clear(); + _goodsCodeController.clear(); + goodsInfoList = []; + setState(() { + _selectedStand = null; + _hasSubmitted = false; + }); + } else if (response != null) { + DialogUtils.showWarningMessage( + context, + "操作未成功", + "${response.message} ${response.code.toString()}", + btnLabel: "返回", + ); + } }, ); } @@ -206,7 +217,7 @@ class _StockInManualPageState extends ConsumerState { } ref.listen(app_providers.stockInNotifierProvider, (previous, next) { - if (_hasSubmitted) { + if (previous != next && _hasSubmitted) { _previousState = next; Future.microtask(() => _handleState(next)); } diff --git a/lib/features/stock/presentation/screens/stock_out_empty_screen.dart b/lib/features/stock/presentation/screens/stock_out_empty_screen.dart index 48c4b02..86d45d5 100644 --- a/lib/features/stock/presentation/screens/stock_out_empty_screen.dart +++ b/lib/features/stock/presentation/screens/stock_out_empty_screen.dart @@ -2,6 +2,8 @@ import 'package:bruno/bruno.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter/services.dart' show rootBundle; +import 'package:pda_template/app/enum/wms_api_response_code.dart'; +import 'package:pda_template/features/stock/domain/models/base_wms_api_response.dart'; import 'package:yaml/yaml.dart'; import '/app/enum/config_path_enum.dart'; import '/app/enum/stand.dart'; @@ -26,7 +28,7 @@ class _StockOutEmptyPageState extends ConsumerState { .map((stand) => BrnCommonActionSheetItem(stand.message)) .toList(); bool _hasSubmitted = false; - AsyncValue? _previousState; + AsyncValue? _previousState; late Color primaryColor; bool _isLoading = true; @@ -60,7 +62,7 @@ class _StockOutEmptyPageState extends ConsumerState { } } - void _handleState(AsyncValue state) { + void _handleState(AsyncValue state) { state.whenOrNull( loading: () => BrnLoadingDialog.show(context, content: "正在请求"), error: (error, _) { @@ -68,18 +70,27 @@ class _StockOutEmptyPageState extends ConsumerState { DialogUtils.showErrorMessage(context, "请求发生错误", error.toString()); _hasSubmitted = false; }, - data: (_) { + data: (response) { BrnLoadingDialog.dismiss(context); - DialogUtils.showSuccessMessage( - context, - "成功", - "空托已呼叫", - btnLabel: "我知道了", - ); - setState(() { - selectedQuantity = 1; - _hasSubmitted = false; - }); + if (response != null && response.code == WmsApiResponseCode.success.code) { + DialogUtils.showSuccessMessage( + context, + "成功", + "空托已呼叫", + btnLabel: "我知道了", + ); + setState(() { + selectedQuantity = 1; + _hasSubmitted = false; + }); + } else if (response != null) { + DialogUtils.showWarningMessage( + context, + "操作未成功", + "${response.message} ${response.code.toString()}", + btnLabel: "返回", + ); + } }, ); }