Files
oneapp_docs/basic_uis/README.md
2025-09-24 14:08:54 +08:00

350 lines
8.9 KiB
Markdown
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.

# Basic UIs 基础UI组件模块群
## 模块群概述
Basic UIs 模块群是 OneApp 的用户界面基础设施提供了完整的UI组件生态系统。该模块群包含了基础UI组件、业务UI组件和通用UI组件为整个应用提供统一的设计语言和用户体验。
## 子模块列表
### 核心UI组件
1. **[ui_basic](./ui_basic.md)** - 基础UI组件库
- 按钮、输入框、卡片等基础组件
- 布局容器和交互组件
- 主题系统和响应式设计
2. **[ui_business](./ui_business.md)** - 业务UI组件库
- 车辆状态展示组件
- 消息中心组件
- 地理位置组件
- 用户同意组件
3. **[basic_uis](./basic_uis.md)** - 通用UI组件集合
- 组件库整合和统一导出
- 跨模块UI组件管理
- 全局UI配置和工具
4. **[general_ui_component](./general_ui_component.md)** - 通用UI组件
- 可复用的通用组件
- 跨业务场景组件
- 第三方组件封装
## 模块架构
### 分层设计
```
应用层 UI 组件
业务层 UI 组件 (ui_business)
基础层 UI 组件 (ui_basic)
Flutter Framework
```
### 组件分类
#### 1. 基础组件层 (ui_basic)
- **原子组件**: Button, TextField, Icon, Text
- **分子组件**: Card, ListTile, AppBar, Dialog
- **布局组件**: Container, Row, Column, Stack
- **交互组件**: GestureDetector, InkWell, RefreshIndicator
#### 2. 业务组件层 (ui_business)
- **车辆组件**: VehicleStatusCard, VehicleControlPanel
- **消息组件**: MessageListView, MessageTile
- **位置组件**: LocationPicker, MapView
- **表单组件**: BusinessForm, ConsentDialog
#### 3. 通用组件层 (basic_uis & general_ui_component)
- **复合组件**: SearchBar, NavigationDrawer
- **特效组件**: AnimatedWidget, TransitionWidget
- **工具组件**: LoadingOverlay, ErrorBoundary
## 设计原则
### 1. 一致性原则
- **视觉一致性**: 统一的颜色、字体、间距规范
- **交互一致性**: 统一的交互模式和反馈机制
- **行为一致性**: 相同功能组件的行为保持一致
### 2. 可访问性原则
- **语义标签**: 为屏幕阅读器提供清晰的语义
- **键盘导航**: 支持键盘和辅助设备导航
- **对比度**: 满足无障碍对比度要求
- **字体缩放**: 支持系统字体缩放设置
### 3. 响应式原则
- **屏幕适配**: 适应不同屏幕尺寸和密度
- **方向适配**: 支持横竖屏切换
- **设备适配**: 针对手机、平板的优化
- **性能适配**: 根据设备性能调整渲染策略
### 4. 可扩展性原则
- **插件化**: 支持组件插件化扩展
- **主题化**: 支持多主题和自定义主题
- **国际化**: 支持多语言和本地化
- **配置化**: 通过配置控制组件行为
## 主题系统
### 主题架构
```dart
class OneAppTheme {
// 颜色系统
static ColorScheme get colorScheme => ColorScheme.fromSeed(
seedColor: const Color(0xFF1976D2),
);
// 字体系统
static TextTheme get textTheme => const TextTheme(
displayLarge: TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
titleLarge: TextStyle(fontSize: 20, fontWeight: FontWeight.w600),
bodyLarge: TextStyle(fontSize: 16, fontWeight: FontWeight.normal),
);
// 组件主题
static ThemeData get lightTheme => ThemeData(
useMaterial3: true,
colorScheme: colorScheme,
textTheme: textTheme,
appBarTheme: const AppBarTheme(/* ... */),
elevatedButtonTheme: ElevatedButtonThemeData(/* ... */),
);
}
```
### 设计令牌 (Design Tokens)
```dart
class DesignTokens {
// 间距系统
static const double spacingXs = 4.0;
static const double spacingSm = 8.0;
static const double spacingMd = 16.0;
static const double spacingLg = 24.0;
static const double spacingXl = 32.0;
// 圆角系统
static const double radiusXs = 4.0;
static const double radiusSm = 8.0;
static const double radiusMd = 12.0;
static const double radiusLg = 16.0;
// 阴影系统
static const List<BoxShadow> shadowSm = [
BoxShadow(
color: Color(0x0D000000),
blurRadius: 2,
offset: Offset(0, 1),
),
];
}
```
## 组件开发规范
### 1. 组件结构
```dart
class ExampleComponent extends StatelessWidget {
// 1. 必需参数
final String title;
// 2. 可选参数
final String? subtitle;
final VoidCallback? onTap;
// 3. 样式参数
final TextStyle? titleStyle;
final EdgeInsets? padding;
// 4. 构造函数
const ExampleComponent({
Key? key,
required this.title,
this.subtitle,
this.onTap,
this.titleStyle,
this.padding,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(/* 实现 */);
}
}
```
### 2. 命名规范
- **组件名称**: 使用PascalCase`VehicleStatusCard`
- **参数名称**: 使用camelCase`onPressed`
- **常量名称**: 使用camelCase`defaultPadding`
- **枚举名称**: 使用PascalCase`ButtonType`
### 3. 文档规范
```dart
/// 车辆状态卡片组件
///
/// 用于展示车辆的基本状态信息,包括电量、里程、锁定状态等。
/// 支持点击交互和自定义样式。
///
/// 示例用法:
/// ```dart
/// VehicleStatusCard(
/// status: vehicleStatus,
/// onTap: () => Navigator.push(...),
/// )
/// ```
class VehicleStatusCard extends StatelessWidget {
/// 车辆状态数据
final VehicleStatus status;
/// 点击回调函数
final VoidCallback? onTap;
}
```
## 性能优化策略
### 1. 渲染优化
- **Widget缓存**: 缓存不变的Widget实例
- **RepaintBoundary**: 隔离重绘区域
- **Const构造**: 使用const构造函数
- **Build优化**: 避免在build方法中创建对象
### 2. 内存优化
- **资源释放**: 及时释放Controller和Stream
- **图片缓存**: 合理使用图片缓存策略
- **对象池**: 复用频繁创建的对象
- **弱引用**: 避免内存泄漏
### 3. 加载优化
- **懒加载**: 按需加载组件和资源
- **预加载**: 预测性加载关键资源
- **分包加载**: 大型组件分包异步加载
- **缓存策略**: 智能缓存机制
## 测试策略
### 1. 单元测试
```dart
testWidgets('VehicleStatusCard displays correct information', (tester) async {
const status = VehicleStatus(
vehicleName: 'Test Vehicle',
batteryLevel: 80,
isLocked: true,
);
await tester.pumpWidget(
MaterialApp(
home: VehicleStatusCard(status: status),
),
);
expect(find.text('Test Vehicle'), findsOneWidget);
expect(find.text('80%'), findsOneWidget);
expect(find.byIcon(Icons.lock), findsOneWidget);
});
```
### 2. Widget测试
- **渲染测试**: 验证组件正确渲染
- **交互测试**: 测试用户交互响应
- **状态测试**: 测试状态变化
- **样式测试**: 验证样式正确应用
### 3. 集成测试
- **页面流程测试**: 测试完整用户流程
- **性能测试**: 测试组件性能表现
- **兼容性测试**: 测试不同设备兼容性
- **可访问性测试**: 测试无障碍功能
## 构建和发布
### 1. 版本管理
- **语义化版本**: 遵循 semver 规范
- **变更日志**: 详细的变更记录
- **向后兼容**: 保证API向后兼容
- **废弃通知**: 提前通知API废弃
### 2. 发布流程
```bash
# 1. 运行测试
flutter test
# 2. 更新版本号
# 编辑 pubspec.yaml
# 3. 更新变更日志
# 编辑 CHANGELOG.md
# 4. 发布包
flutter pub publish
```
## 使用指南
### 1. 快速开始
```dart
import 'package:ui_basic/ui_basic.dart';
import 'package:ui_business/ui_business.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: OneAppTheme.lightTheme,
home: MyHomePage(),
);
}
}
```
### 2. 组件使用
```dart
// 基础组件使用
BasicButton(
text: '确定',
type: ButtonType.primary,
onPressed: () {},
)
// 业务组件使用
VehicleStatusCard(
status: vehicleStatus,
onTap: () {},
)
```
### 3. 主题定制
```dart
MaterialApp(
theme: OneAppTheme.lightTheme.copyWith(
primarySwatch: Colors.green,
// 其他自定义配置
),
)
```
## 最佳实践
### 1. 组件设计
- **单一职责**: 每个组件功能单一明确
- **可组合性**: 支持组件组合使用
- **可配置性**: 提供丰富的配置选项
- **可预测性**: 相同输入产生相同输出
### 2. API设计
- **直观性**: API命名直观易理解
- **一致性**: 相似功能API保持一致
- **扩展性**: 预留扩展空间
- **文档化**: 提供完整文档和示例
### 3. 性能考虑
- **懒加载**: 按需加载减少初始化开销
- **缓存策略**: 合理使用缓存提升性能
- **异步处理**: 避免阻塞UI线程
- **资源管理**: 及时释放不需要的资源
## 总结
Basic UIs 模块群为 OneApp 提供了完整的UI基础设施通过分层设计、统一规范和完善的工具链实现了高效的UI开发和一致的用户体验。模块群具有良好的可扩展性和可维护性能够支撑大型应用的UI需求并为未来的功能扩展提供了坚实的基础。