challenge_edit_vm.dart 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import 'package:japp_flutter/core/models/challenge_model.dart';
  3. import 'package:japp_flutter/core/proviers/repository_providers.dart';
  4. import 'package:japp_flutter/core/repositories/challenge_repository.dart';
  5. final challengeEditProvider = AsyncNotifierProvider.autoDispose<ChallengeEditViewModel, ChallengeModel?>(
  6. ChallengeEditViewModel.new,
  7. );
  8. class ChallengeEditViewModel extends AutoDisposeAsyncNotifier<ChallengeModel?> {
  9. ChallengeRepository get _repository => ref.read(challengeRepositoryProvider);
  10. @override
  11. Future<ChallengeModel?> build() async {
  12. // 初始化为 null,由外部传入初始数据
  13. return null;
  14. }
  15. /// 初始化编辑数据(从详情页传入)
  16. void initialize(ChallengeModel challenge) {
  17. state = AsyncData(challenge);
  18. }
  19. /// 更新挑战标题
  20. void updateTitle(String title) {
  21. state.whenData((challenge) {
  22. state = AsyncData(challenge!.copyWith(title: title));
  23. });
  24. }
  25. /// 更新挑战描述
  26. void updateDescription(String description) {
  27. state.whenData((challenge) {
  28. state = AsyncData(challenge!.copyWith(description: description));
  29. });
  30. }
  31. /// 更新难度
  32. void updateDifficulty(String difficulty) {
  33. state.whenData((challenge) {
  34. state = AsyncData(challenge!.copyWith(difficulty: difficulty));
  35. });
  36. }
  37. /// 保存挑战
  38. Future<void> saveChallenge() async {
  39. final challenge = state.value;
  40. if (challenge == null) return;
  41. state = const AsyncLoading();
  42. state = await AsyncValue.guard(() => _repository.updateChallenge(challenge));
  43. }
  44. }