告警中心的二级详情页面+信息中心的页面+对接机器人接口
This commit is contained in:
66
lib/features/v2/site/presentation/cubit/site_cubit.dart
Normal file
66
lib/features/v2/site/presentation/cubit/site_cubit.dart
Normal file
@@ -0,0 +1,66 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user