Files
Kifi/kifi-app/lib/features/business/providers/business_provider.dart

80 lines
2.2 KiB
Dart

import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../core/network/dio_client.dart';
import '../domain/business_profile.dart';
import '../domain/business_feature.dart';
class BusinessProfileNotifier extends AsyncNotifier<BusinessProfile?> {
@override
FutureOr<BusinessProfile?> build() async {
return _fetchProfile();
}
Future<BusinessProfile?> _fetchProfile() async {
final response = await DioClient().dio.get('/business/profile');
if (response.statusCode == 200) {
return BusinessProfile.fromJson(response.data);
}
return null;
}
Future<void> updateProfile(BusinessProfile profile) async {
state = const AsyncValue.loading();
try {
final response = await DioClient().dio.post(
'/business/profile',
data: profile.toJson(),
);
if (response.statusCode == 200) {
state = AsyncValue.data(BusinessProfile.fromJson(response.data));
}
} catch (e, stack) {
state = AsyncValue.error(e, stack);
}
}
}
final businessProfileProvider = AsyncNotifierProvider<BusinessProfileNotifier, BusinessProfile?>(() {
return BusinessProfileNotifier();
});
class BusinessFeatureNotifier extends AsyncNotifier<BusinessFeature?> {
@override
FutureOr<BusinessFeature?> build() async {
return _fetchFeatures();
}
Future<BusinessFeature?> _fetchFeatures() async {
try {
final response = await DioClient().dio.get('/business/features');
if (response.statusCode == 200) {
return BusinessFeature.fromJson(response.data);
}
} catch (e) {
// Return default if error
}
return BusinessFeature();
}
Future<void> updateFeatures(BusinessFeature feature) async {
state = const AsyncValue.loading();
try {
final response = await DioClient().dio.post(
'/business/features',
data: feature.toJson(),
);
if (response.statusCode == 200) {
state = AsyncValue.data(BusinessFeature.fromJson(response.data));
}
} catch (e, stack) {
state = AsyncValue.error(e, stack);
}
}
}
final businessFeatureProvider = AsyncNotifierProvider<BusinessFeatureNotifier, BusinessFeature?>(() {
return BusinessFeatureNotifier();
});