Files
feature-tenant/lib/features/main_container/domain/tab_config.dart

152 lines
3.5 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:equatable/equatable.dart';
class TabConfigItem extends Equatable {
final String id;
final String name;
final String nameEn;
final String icon;
final bool isEnabled;
final int order;
const TabConfigItem({
required this.id,
required this.name,
required this.nameEn,
required this.icon,
required this.isEnabled,
required this.order,
});
TabConfigItem copyWith({
String? id,
String? name,
String? nameEn,
String? icon,
bool? isEnabled,
int? order,
}) {
return TabConfigItem(
id: id ?? this.id,
name: name ?? this.name,
nameEn: nameEn ?? this.nameEn,
icon: icon ?? this.icon,
isEnabled: isEnabled ?? this.isEnabled,
order: order ?? this.order,
);
}
@override
List<Object?> get props => [id, name, nameEn, icon, isEnabled, order];
}
class TabConfig extends Equatable {
final List<TabConfigItem> items;
const TabConfig({required this.items});
List<TabConfigItem> get enabledItems {
final enabled = items.where((item) => item.isEnabled).toList();
enabled.sort((a, b) => a.order.compareTo(b.order));
return enabled;
}
TabConfig copyWith({List<TabConfigItem>? items}) {
return TabConfig(items: items ?? this.items);
}
TabConfig toggleItem(String itemId) {
final currentItem = items.firstWhere((item) => item.id == itemId);
// 如果当前项是启用的,检查是否是最后一个启用的
if (currentItem.isEnabled) {
final enabledCount = items.where((item) => item.isEnabled).length;
if (enabledCount <= 1) {
// 至少保留一个 Tab,不允许关闭
return this;
}
}
final updatedItems = items.map((item) {
if (item.id == itemId) {
return item.copyWith(isEnabled: !item.isEnabled);
}
return item;
}).toList();
return copyWith(items: updatedItems);
}
static TabConfig defaultConfig() {
return const TabConfig(
items: [
TabConfigItem(
id: 'home_v2',
name: '首页',
nameEn: 'Home',
icon: 'home_rounded',
isEnabled: true,
order: 1,
),
TabConfigItem(
id: 'device',
name: '设备',
nameEn: 'Device',
icon: 'devices_rounded',
isEnabled: true,
order: 2,
),
TabConfigItem(
id: 'ai',
name: 'AI',
nameEn: 'AI',
icon: 'auto_awesome_rounded',
isEnabled: false,
order: 3,
),
TabConfigItem(
id: 'warning',
name: '告警',
nameEn: 'Alerts',
icon: 'warning_amber_rounded',
isEnabled: true,
order: 4,
),
TabConfigItem(
id: 'workorder',
name: '工单',
nameEn: 'WorkOrder',
icon: 'assignment_rounded',
isEnabled: true,
order: 5,
),
TabConfigItem(
id: 'report',
name: '上报',
nameEn: 'Report',
icon: 'post_add_rounded',
isEnabled: true,
order: 6,
),
TabConfigItem(
id: 'my',
name: '旧我的',
nameEn: 'Old Profile',
icon: 'person_rounded',
isEnabled: false,
order: 7,
),
TabConfigItem(
id: 'me',
name: '我的',
nameEn: 'Profile',
icon: 'person_rounded',
isEnabled: true,
order: 8,
),
],
);
}
@override
List<Object?> get props => [items];
}