67 lines
1.8 KiB
Dart
67 lines
1.8 KiB
Dart
|
|
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());
|
||
|
|
}
|
||
|
|
}
|