152 lines
3.5 KiB
Dart
152 lines
3.5 KiB
Dart
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];
|
||
}
|