Files
feature-next-arch/lib/features/v2/site/presentation/cubit/site_cubit.dart

67 lines
1.8 KiB
Dart
Raw Normal View History

import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../../home/domain/entities/site_entity.dart';
class SiteState {
final List<SiteEntity> sites;
final SiteEntity? selectedSite;
const SiteState({
this.sites = const [],
this.selectedSite,
});
SiteState copyWith({
List<SiteEntity>? sites,
SiteEntity? selectedSite,
}) {
return SiteState(
sites: sites ?? this.sites,
selectedSite: selectedSite ?? this.selectedSite,
);
}
}
class SiteCubit extends Cubit<SiteState> {
final SharedPreferences sharedPreferences;
static const String _selectedSiteIdKey = 'selected_site_id';
SiteCubit(this.sharedPreferences) : super(const SiteState());
/// 更新场站列表
void updateSites(List<SiteEntity> sites) {
// 尝试恢复之前选中的场站
final savedSiteId = sharedPreferences.getInt(_selectedSiteIdKey);
SiteEntity? selectedSite;
if (savedSiteId != null && sites.isNotEmpty) {
selectedSite = sites.firstWhere(
(site) => site.id == savedSiteId,
orElse: () => sites.first,
);
} else if (sites.isNotEmpty) {
selectedSite = sites.first;
}
emit(state.copyWith(sites: sites, selectedSite: selectedSite));
}
/// 选择场站(持久化)
void selectSite(SiteEntity site) {
sharedPreferences.setInt(_selectedSiteIdKey, site.id);
emit(state.copyWith(selectedSite: site));
}
/// 清除选中场站
void clearSelectedSite() {
sharedPreferences.remove(_selectedSiteIdKey);
emit(state.copyWith(selectedSite: null));
}
/// 清空所有场站数据(退出登录时调用)
void clearAll() {
sharedPreferences.remove(_selectedSiteIdKey);
emit(const SiteState());
}
}