Files
slogan/lib/features/profile/body_provider.dart
T
admin ceef7bc64e feat(app): 形象照片上传 + 身形设置 + 化身构建 + 衣橱管理
- photo_upload_provider/photo_guide_page:4 类照片(大头照/正面/侧面/背面)拍照或相册上传
- body_provider/body_tune_page:身高 145-200cm / 体重 / 肤色 1-5 滑杆设置
- avatar_provider:化身构建(同步 + 异步轮询兜底)
- profile_page:形象主页聚合化身/照片/身形状态 + 登出
- wardrobe_provider/wardrobe_page/wardrobe_upload_page:网格展示 + 分类筛选 + 长按删除 + 表单上传
- AppConfig.resolveUrl 相对路径拼接;新增 /photo-guide /body-tune /wardrobe-upload 路由
2026-07-31 12:44:10 +08:00

39 lines
1.1 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../core/auth/auth_provider.dart';
class BodyState {
final int height;
final int weight;
final int skinTone;
const BodyState({this.height = 170, this.weight = 60, this.skinTone = 3});
}
class BodyNotifier extends AsyncNotifier<BodyState> {
@override
Future<BodyState> build() async {
final api = ref.read(apiClientProvider);
final data = await api.get<Map<String, dynamic>>('/body-measurement/get');
return BodyState(
height: (data['height'] as num?)?.toInt() ?? 170,
weight: (data['weight'] as num?)?.toInt() ?? 60,
skinTone: (data['skin_tone'] as num?)?.toInt() ?? 3,
);
}
Future<void> save(int height, int weight, int skinTone) async {
final api = ref.read(apiClientProvider);
await api.post('/body-measurement/save', {
'height': height,
'weight': weight,
'skin_tone': skinTone,
});
state = AsyncData(
BodyState(height: height, weight: weight, skinTone: skinTone));
}
}
final bodyProvider =
AsyncNotifierProvider<BodyNotifier, BodyState>(BodyNotifier.new);