Initial project
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
import '../../../app/router/app_route_name.dart';
|
||||
|
||||
part 'settings_view_model.g.dart';
|
||||
|
||||
/// 设置页 ViewModel
|
||||
///
|
||||
/// ## 数据流位置
|
||||
///
|
||||
/// ```
|
||||
/// SettingsPage
|
||||
/// → ref.read(settingsViewModelProvider.notifier).navigateToTheme(context)
|
||||
/// → ★ SettingsViewModel.navigateToTheme() ★ ← 你在这里
|
||||
/// → context.push(AppRouteName.settingsTheme.path)
|
||||
/// ```
|
||||
///
|
||||
/// 导航意图由 ViewModel 统一管理,View 不直接调用路由。
|
||||
@riverpod
|
||||
class SettingsViewModel extends _$SettingsViewModel {
|
||||
@override
|
||||
void build() {}
|
||||
|
||||
/// 跳转到主题设置页。
|
||||
void navigateToTheme(BuildContext context) {
|
||||
context.push(AppRouteName.settingsTheme.path);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
import '../../../app/di/app_providers.dart';
|
||||
import '../di/settings_providers.dart';
|
||||
|
||||
part 'theme_view_model.g.dart';
|
||||
|
||||
/// 主题 ViewModel
|
||||
///
|
||||
/// View 层只感知此 ViewModel,不直接依赖 app 级 Provider。
|
||||
///
|
||||
/// ## 数据流
|
||||
///
|
||||
/// ```
|
||||
/// ThemeView
|
||||
/// → ref.watch(themeViewModelProvider) ← 当前 ThemeMode
|
||||
/// → ref.read(themeViewModelProvider.notifier).setMode(mode)
|
||||
/// → ★ ThemeViewModel.setMode() ★ ← 你在这里
|
||||
/// → SetThemeUseCase.execute()
|
||||
/// → 幂等校验(相同模式直接返回)
|
||||
/// → onApply → ThemeModeNotifier.setMode() ← 更新内存状态
|
||||
/// → TODO: 持久化(storage_sdk)
|
||||
/// ```
|
||||
@riverpod
|
||||
class ThemeViewModel extends _$ThemeViewModel {
|
||||
@override
|
||||
ThemeMode build() => ref.watch(themeModeProvider);
|
||||
|
||||
void setMode(ThemeMode mode) {
|
||||
ref.read(setThemeUseCaseProvider).execute(
|
||||
current: state,
|
||||
requested: mode,
|
||||
onApply: (m) => ref.read(themeModeProvider.notifier).setMode(m),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user