- 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 路由
39 lines
1.1 KiB
Dart
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);
|