import 'package:flutter/material.dart'; import 'package:ainoval/widgets/common/app_search_field.dart'; /// 模型服务列表页面的头部组件 /// 包含标题、描述、搜索框、筛选下拉框和添加按钮 class ModelServiceHeader extends StatelessWidget { const ModelServiceHeader({ super.key, required this.onSearch, required this.onAddNew, required this.onFilterChange, }); final Function(String) onSearch; final VoidCallback onAddNew; final Function(String) onFilterChange; @override Widget build(BuildContext context) { final theme = Theme.of(context); return Container( decoration: BoxDecoration( color: theme.colorScheme.surface, border: Border( bottom: BorderSide( color: theme.colorScheme.outlineVariant, width: 1, ), ), ), padding: const EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // 主标题区域 Row( children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '模型服务管理', style: theme.textTheme.headlineSmall?.copyWith( fontWeight: FontWeight.bold, color: theme.colorScheme.onSurface, ), ), const SizedBox(height: 4), Text( '管理和配置你的 AI 模型提供商及其可用模型。', style: theme.textTheme.bodyMedium?.copyWith( color: theme.colorScheme.onSurface.withOpacity(0.7), ), ), ], ), ), // 添加按钮 ElevatedButton.icon( onPressed: onAddNew, icon: Icon( Icons.add, size: 18, color: theme.colorScheme.onPrimary, ), label: Text( '添加模型', style: TextStyle( color: theme.colorScheme.onPrimary, ), ), style: ElevatedButton.styleFrom( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), backgroundColor: theme.colorScheme.primary, foregroundColor: theme.colorScheme.onPrimary, elevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), ], ), const SizedBox(height: 20), // 控制栏 Row( children: [ // 搜索框 Expanded( flex: 2, child: AppSearchField( hintText: '搜索模型提供商...', height: 40, borderRadius: 8, onChanged: onSearch, controller: TextEditingController(), ), ), const SizedBox(width: 16), // 筛选下拉框 SizedBox( width: 140, height: 40, child: DropdownButtonFormField( decoration: InputDecoration( contentPadding: const EdgeInsets.symmetric(horizontal: 12), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: theme.colorScheme.outline.withOpacity(0.3), width: 1.0, ), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: theme.colorScheme.outline.withOpacity(0.3), width: 1.0, ), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: theme.colorScheme.primary, width: 1.5, ), ), filled: true, fillColor: theme.colorScheme.surface, ), value: 'all', style: theme.textTheme.bodyMedium?.copyWith( color: theme.colorScheme.onSurface, ), icon: Icon( Icons.keyboard_arrow_down, size: 18, color: theme.colorScheme.onSurface.withOpacity(0.7), ), dropdownColor: theme.colorScheme.surface, items: [ DropdownMenuItem( value: 'all', child: Text( '全部模型', style: TextStyle( fontSize: 14, color: theme.colorScheme.onSurface, ), ), ), DropdownMenuItem( value: 'verified', child: Text( '已验证', style: TextStyle( fontSize: 14, color: theme.colorScheme.onSurface, ), ), ), DropdownMenuItem( value: 'unverified', child: Text( '未验证', style: TextStyle( fontSize: 14, color: theme.colorScheme.onSurface, ), ), ), ], onChanged: (value) { if (value != null) { onFilterChange(value); } }, ), ), const SizedBox(width: 12), // 设置按钮 IconButton( onPressed: () {}, icon: const Icon(Icons.settings, size: 20), style: IconButton.styleFrom( padding: const EdgeInsets.all(10), backgroundColor: Colors.transparent, foregroundColor: theme.colorScheme.onSurface.withOpacity(0.7), side: BorderSide( color: theme.colorScheme.outline.withOpacity(0.3), width: 1, ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), ], ), ], ), ); } }