Files
slogan/app/lib/features/wardrobe/wardrobe_provider.dart
T
admin b53c57e02d Add 'app/' from commit 'a11a66886941bba128d89c1124115e1b1c87a128'
git-subtree-dir: app
git-subtree-mainline: 6ebd902c6b
git-subtree-split: a11a668869
2026-08-04 14:59:55 +08:00

78 lines
2.1 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../core/auth/auth_provider.dart';
/// 服装分类(与后端校验一致)
const wardrobeCategories = ['上衣', '下装', '鞋', '配饰'];
const wardrobeSeasons = ['春', '夏', '秋', '冬', '四季'];
class WardrobeItemInfo {
final int id;
final String photoUrl;
final String category;
final String season;
final String styleTags;
final String colorInfo;
const WardrobeItemInfo({
required this.id,
required this.photoUrl,
required this.category,
required this.season,
required this.styleTags,
required this.colorInfo,
});
}
class WardrobeNotifier extends AsyncNotifier<List<WardrobeItemInfo>> {
@override
Future<List<WardrobeItemInfo>> build() async {
final api = ref.read(apiClientProvider);
final data = await api.get<Map<String, dynamic>>('/wardrobe/list');
final list = data['list'] as List<dynamic>? ?? [];
return list
.map((e) => WardrobeItemInfo(
id: (e['id'] as num).toInt(),
photoUrl: e['photo_url'] as String? ?? '',
category: e['category'] as String? ?? '',
season: e['season'] as String? ?? '',
styleTags: e['style_tags'] as String? ?? '',
colorInfo: e['color_info'] as String? ?? '',
))
.toList();
}
Future<void> upload(
String filePath, {
required String category,
String season = '',
String styleTags = '',
String colorInfo = '',
}) async {
final api = ref.read(apiClientProvider);
await api.upload('/wardrobe/upload', {
'category': category,
'season': season,
'style_tags': styleTags,
'color_info': colorInfo,
}, 'file', filePath);
await refresh();
}
Future<void> delete(int id) async {
final api = ref.read(apiClientProvider);
await api.post('/wardrobe/delete', {'id': id});
await refresh();
}
Future<void> refresh() async {
state = const AsyncLoading();
state = await AsyncValue.guard(build);
}
}
final wardrobeProvider =
AsyncNotifierProvider<WardrobeNotifier, List<WardrobeItemInfo>>(
WardrobeNotifier.new);