我有一个网页,需要2个不同的APIC电话。
我正在运用清洁结构来撰写该守则,并将之作为国家管理。 然后,我利用自由套线绘制各州地图。
How can I combine the different states? What I would like to achieve is to emit a success state only if both states give me data or emit an error state if one of them is an error, otherwise loading state.
提前感谢。
它们是:
import package:freezed_annotation/freezed_annotation.dart ;
import ...eatures/profile/domain/entities/user_profile_entity.dart ;
part user_profile_details_state.freezed.dart ;
@freezed
class UserProfileDetailsState with _$UserProfileDetailsState {
///Initial
const factory UserProfileDetailsState.initial() =
_UserProfileDetailsStateInitial;
///Loading
const factory UserProfileDetailsState.loading() =
_UserProfileDetailsStateLoading;
///Data
const factory UserProfileDetailsState.data(
{required ProfileEntity profileEntity}) = _UserProfileDetailsStateData;
///Error
const factory UserProfileDetailsState.error([String? error]) =
_UserProfileDetailsStateError;
}
import package:freezed_annotation/freezed_annotation.dart ;
import ....features/profile/domain/entities/user_properties_entity.dart ;
part user_properties_state.freezed.dart ;
@freezed
class UserPropertiesState with _$UserPropertiesState {
///Initial
const factory UserPropertiesState.initial() = _UserPropertiesStateInitial;
///Loading
const factory UserPropertiesState.loading() = _UserPropertiesStateLoading;
///Data
const factory UserPropertiesState.data(
{required UserPropertiesEntity userPropertiesEntity}) =
_UserPropertiesStateData;
///Error
const factory UserPropertiesState.error([String? error]) =
_UserPropertiesStateError;
}
这些是两个通知人:
import ...core/di/dependency_injection.dart ;
import ...core/errors/failures.dart ;
import ...core/presentation/riverpod/check_token_notifier.dart ;
import ...features/profile/presentation/riverpod/user_profile_details_state.dart ;
import package:riverpod_annotation/riverpod_annotation.dart ;
part user_profile_details_notifier.g.dart ;
@riverpod
class UserProfileDetailsNotifier extends _$UserProfileDetailsNotifier {
@override
UserProfileDetailsState build() {
getUserProfileDetailsData();
return const UserProfileDetailsState.initial();
}
Future<void> getUserProfileDetailsData() async {
state = const UserProfileDetailsState.loading();
final userProfileDetailsOrFailure = await ref
.read(userProfileDetailsUseCaseProvider)
.getUserProfileDetailsData();
userProfileDetailsOrFailure.fold((error) {
if (error is TokenFailure) {
ref.read(checkTokenNotifierProvider.notifier).deAuthUser();
return;
}
state = UserProfileDetailsState.error(error.errorMessage);
}, (userProfileDetailsEntity) {
state =
UserProfileDetailsState.data(profileEntity: userProfileDetailsEntity);
});
}
}
import ...core/di/dependency_injection.dart ;
import ...core/errors/failures.dart ;
import ...core/presentation/riverpod/check_token_notifier.dart ;
import ...features/profile/presentation/riverpod/user_properties_state.dart ;
import package:riverpod_annotation/riverpod_annotation.dart ;
part user_properties_notifier.g.dart ;
@riverpod
class UserPropertiesNotifier extends _$UserPropertiesNotifier {
@override
UserPropertiesState build() {
getUserPropertiesData();
return const UserPropertiesState.initial();
}
Future<void> getUserPropertiesData() async {
state = const UserPropertiesState.loading();
final userPropertiesOrFailure =
await ref.read(userPropertiesUseCaseProvider).getUserPropertiesData();
userPropertiesOrFailure.fold((error) {
if (error is TokenFailure) {
ref.read(checkTokenNotifierProvider.notifier).deAuthUser();
return;
}
state = UserPropertiesState.error(error.errorMessage);
}, (userPropertiesEntity) {
state =
UserPropertiesState.data(userPropertiesEntity: userPropertiesEntity);
});
}
}