import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../core/api/api_client.dart'; import '../core/auth/auth_state.dart'; import '../models/product_option.dart'; import '../providers/connectivity_provider.dart'; import '../repositories/product_option_repository.dart'; final productOptionRepositoryProvider = Provider((ref) { return ProductOptionRepository(ref.watch(apiClientProvider)); }); // ── 商品名称 ───────────────────────────────────────────────── final productNameListProvider = AsyncNotifierProvider>( ProductNameListNotifier.new, ); class ProductNameListNotifier extends AsyncNotifier> { @override Future> build() async { ref.watch(authStateProvider.select((s) => s.user?.shopId)); ref.watch(networkRecoveryCountProvider); return ref.read(productOptionRepositoryProvider).listNames(); } void reload() { state = const AsyncValue.loading(); ref.read(productOptionRepositoryProvider).listNames().then( (data) => state = AsyncValue.data(data), onError: (e, st) => state = AsyncValue.error(e, st), ); } Future create(Map data) async { await ref.read(productOptionRepositoryProvider).createName(data); reload(); } Future updateItem(int id, Map data) async { await ref.read(productOptionRepositoryProvider).updateName(id, data); reload(); } Future delete(int id) async { await ref.read(productOptionRepositoryProvider).deleteName(id); reload(); } } // ── 商品系列 ───────────────────────────────────────────────── final productSeriesListProvider = AsyncNotifierProvider>( ProductSeriesListNotifier.new, ); class ProductSeriesListNotifier extends AsyncNotifier> { @override Future> build() async { ref.watch(authStateProvider.select((s) => s.user?.shopId)); ref.watch(networkRecoveryCountProvider); return ref.read(productOptionRepositoryProvider).listSeries(); } void reload() { state = const AsyncValue.loading(); ref.read(productOptionRepositoryProvider).listSeries().then( (data) => state = AsyncValue.data(data), onError: (e, st) => state = AsyncValue.error(e, st), ); } Future create(Map data) async { await ref.read(productOptionRepositoryProvider).createSeries(data); reload(); } Future updateItem(int id, Map data) async { await ref.read(productOptionRepositoryProvider).updateSeries(id, data); reload(); } Future delete(int id) async { await ref.read(productOptionRepositoryProvider).deleteSeries(id); reload(); } } // ── 商品规格 ───────────────────────────────────────────────── final productSpecListProvider = AsyncNotifierProvider>( ProductSpecListNotifier.new, ); class ProductSpecListNotifier extends AsyncNotifier> { @override Future> build() async { ref.watch(authStateProvider.select((s) => s.user?.shopId)); ref.watch(networkRecoveryCountProvider); return ref.read(productOptionRepositoryProvider).listSpecs(); } void reload() { state = const AsyncValue.loading(); ref.read(productOptionRepositoryProvider).listSpecs().then( (data) => state = AsyncValue.data(data), onError: (e, st) => state = AsyncValue.error(e, st), ); } Future create(Map data) async { await ref.read(productOptionRepositoryProvider).createSpec(data); reload(); } Future updateItem(int id, Map data) async { await ref.read(productOptionRepositoryProvider).updateSpec(id, data); reload(); } Future delete(int id) async { await ref.read(productOptionRepositoryProvider).deleteSpec(id); reload(); } } // ── 产地 ────────────────────────────────────────────────────── final productOriginListProvider = AsyncNotifierProvider>( ProductOriginListNotifier.new, ); class ProductOriginListNotifier extends AsyncNotifier> { @override Future> build() async { ref.watch(authStateProvider.select((s) => s.user?.shopId)); ref.watch(networkRecoveryCountProvider); return ref.read(productOptionRepositoryProvider).listOrigins(); } void reload() { state = const AsyncValue.loading(); ref.read(productOptionRepositoryProvider).listOrigins().then( (data) => state = AsyncValue.data(data), onError: (e, st) => state = AsyncValue.error(e, st), ); } Future create(Map data) async { await ref.read(productOptionRepositoryProvider).createOrigin(data); reload(); } Future updateItem(int id, Map data) async { await ref.read(productOptionRepositoryProvider).updateOrigin(id, data); reload(); } Future delete(int id) async { await ref.read(productOptionRepositoryProvider).deleteOrigin(id); reload(); } } // ── 保质期 ──────────────────────────────────────────────────── final productShelfLifeListProvider = AsyncNotifierProvider>( ProductShelfLifeListNotifier.new, ); class ProductShelfLifeListNotifier extends AsyncNotifier> { @override Future> build() async { ref.watch(authStateProvider.select((s) => s.user?.shopId)); ref.watch(networkRecoveryCountProvider); return ref.read(productOptionRepositoryProvider).listShelfLives(); } void reload() { state = const AsyncValue.loading(); ref.read(productOptionRepositoryProvider).listShelfLives().then( (data) => state = AsyncValue.data(data), onError: (e, st) => state = AsyncValue.error(e, st), ); } Future create(Map data) async { await ref.read(productOptionRepositoryProvider).createShelfLife(data); reload(); } Future updateItem(int id, Map data) async { await ref.read(productOptionRepositoryProvider).updateShelfLife(id, data); reload(); } Future delete(int id) async { await ref.read(productOptionRepositoryProvider).deleteShelfLife(id); reload(); } } // ── 储存方式 ────────────────────────────────────────────────── final productStorageListProvider = AsyncNotifierProvider>( ProductStorageListNotifier.new, ); class ProductStorageListNotifier extends AsyncNotifier> { @override Future> build() async { ref.watch(authStateProvider.select((s) => s.user?.shopId)); ref.watch(networkRecoveryCountProvider); return ref.read(productOptionRepositoryProvider).listStorages(); } void reload() { state = const AsyncValue.loading(); ref.read(productOptionRepositoryProvider).listStorages().then( (data) => state = AsyncValue.data(data), onError: (e, st) => state = AsyncValue.error(e, st), ); } Future create(Map data) async { await ref.read(productOptionRepositoryProvider).createStorage(data); reload(); } Future updateItem(int id, Map data) async { await ref.read(productOptionRepositoryProvider).updateStorage(id, data); reload(); } Future delete(int id) async { await ref.read(productOptionRepositoryProvider).deleteStorage(id); reload(); } } // ── 描述文档 ────────────────────────────────────────────────── final productDescriptionDocListProvider = AsyncNotifierProvider>( ProductDescriptionDocListNotifier.new, ); class ProductDescriptionDocListNotifier extends AsyncNotifier> { @override Future> build() async { ref.watch(authStateProvider.select((s) => s.user?.shopId)); ref.watch(networkRecoveryCountProvider); return ref.read(productOptionRepositoryProvider).listDescriptionDocs(); } void reload() { state = const AsyncValue.loading(); ref.read(productOptionRepositoryProvider).listDescriptionDocs().then( (data) => state = AsyncValue.data(data), onError: (e, st) => state = AsyncValue.error(e, st), ); } Future create(Map data) async { await ref.read(productOptionRepositoryProvider).createDescriptionDoc(data); reload(); } Future updateItem(int id, Map data) async { await ref.read(productOptionRepositoryProvider).updateDescriptionDoc(id, data); reload(); } Future delete(int id) async { await ref.read(productOptionRepositoryProvider).deleteDescriptionDoc(id); reload(); } }