# 弹窗组件使用指南 本项目提供了一套优雅的弹窗组件系统,包括确认弹窗(ConfirmDialog)和操作选择弹窗(ActionSheet)。 ## 全局使用方式 ### 1. 使用 useGlobalDialog Hook ```tsx import { useGlobalDialog } from '@/components/ui/DialogProvider'; function MyComponent() { const { showConfirm, showActionSheet } = useGlobalDialog(); // 显示确认弹窗 const handleDelete = () => { showConfirm( { title: '删除确认', message: '确定要删除这个项目吗?删除后无法恢复。', icon: 'trash-outline', destructive: true, }, () => { // 确认后的操作 console.log('已删除'); } ); }; // 显示操作选择弹窗 const handleMoreActions = () => { showActionSheet( { title: '更多操作', subtitle: '选择要执行的操作', }, [ { id: 'edit', title: '编辑', subtitle: '修改项目信息', icon: 'create-outline', iconColor: '#3B82F6', onPress: () => { console.log('编辑'); } }, { id: 'share', title: '分享', subtitle: '分享给朋友', icon: 'share-outline', iconColor: '#10B981', onPress: () => { console.log('分享'); } }, { id: 'delete', title: '删除', subtitle: '永久删除项目', icon: 'trash-outline', iconColor: '#EF4444', destructive: true, onPress: () => { console.log('删除'); } } ] ); }; return ( 删除 更多操作 ); } ``` ## 独立使用方式 ### 1. ConfirmDialog 确认弹窗 ```tsx import { ConfirmDialog } from '@/components/ui/ConfirmDialog'; function MyComponent() { const [showDialog, setShowDialog] = useState(false); return ( <> setShowDialog(true)}> 显示确认弹窗 setShowDialog(false)} title="确认操作" message="确定要执行这个操作吗?" confirmText="确定" cancelText="取消" destructive={false} icon="checkmark-circle-outline" iconColor="#22C55E" onConfirm={() => { console.log('确认操作'); setShowDialog(false); }} /> ); } ``` ### 2. ActionSheet 操作选择弹窗 ```tsx import { ActionSheet } from '@/components/ui/ActionSheet'; function MyComponent() { const [showSheet, setShowSheet] = useState(false); const options = [ { id: 'camera', title: '拍照', subtitle: '使用相机拍摄照片', icon: 'camera-outline' as const, iconColor: '#3B82F6', onPress: () => { console.log('拍照'); setShowSheet(false); } }, { id: 'gallery', title: '从相册选择', subtitle: '从手机相册中选择照片', icon: 'images-outline' as const, iconColor: '#10B981', onPress: () => { console.log('相册'); setShowSheet(false); } } ]; return ( <> setShowSheet(true)}> 选择照片 setShowSheet(false)} title="选择照片" subtitle="选择照片来源" cancelText="取消" options={options} /> ); } ``` ## 配置选项 ### ConfirmDialog 配置 ```tsx interface DialogConfig { title: string; // 标题 message?: string; // 消息内容 confirmText?: string; // 确认按钮文字,默认"确定" cancelText?: string; // 取消按钮文字,默认"取消" destructive?: boolean; // 是否为危险操作,影响按钮颜色 icon?: keyof typeof Ionicons.glyphMap; // 图标名称 iconColor?: string; // 图标颜色 } ``` ### ActionSheet 配置 ```tsx interface ActionSheetConfig { title?: string; // 标题 subtitle?: string; // 副标题 cancelText?: string; // 取消按钮文字,默认"取消" } interface ActionSheetOption { id: string; // 唯一标识 title: string; // 选项标题 subtitle?: string; // 选项副标题 icon?: keyof typeof Ionicons.glyphMap; // 图标名称 iconColor?: string; // 图标颜色 destructive?: boolean; // 是否为危险操作 onPress: () => void; // 点击回调 } ``` ## 设计特点 1. **优雅的动画效果**:使用原生动画,流畅自然 2. **触觉反馈**:集成 Haptics 提供触觉反馈 3. **响应式设计**:适配不同屏幕尺寸 4. **无障碍支持**:支持屏幕阅读器等无障碍功能 5. **类型安全**:完整的 TypeScript 类型定义 6. **全局管理**:通过 Context 实现全局弹窗管理 7. **易于使用**:简洁的 API 设计,易于集成 ## 最佳实践 1. **使用全局 Hook**:推荐使用 `useGlobalDialog` 而不是独立组件 2. **合理使用图标**:为不同类型的操作选择合适的图标 3. **明确的文案**:使用清晰、简洁的标题和描述 4. **危险操作标识**:对删除等危险操作使用 `destructive: true` 5. **触觉反馈**:重要操作会自动提供触觉反馈