Initial commit: Flutter 无书应用项目

This commit is contained in:
Developer
2026-03-30 02:35:31 +08:00
commit 9175ff9905
566 changed files with 103261 additions and 0 deletions

View File

@@ -0,0 +1,180 @@
// 时间: 2026-03-22
// 功能: 应用全局常量
// 介绍: 颜色、路由、文案、布局等集中定义,供各页面复用
// 最新变化: 新增 tabbedPageToolbarHeight / tabbedPageTabBarHeight压缩主导航子页标题+Tab 占用高度
import 'package:flutter/material.dart';
class AppConstants {
// 应用信息
static const String appName = 'Poes';
static const String appVersion = '1.0.0';
// 响应式断点
static const double mobileBreakpoint = 768.0;
static const double tabletBreakpoint = 1024.0;
static const double desktopBreakpoint = 1440.0;
// 路由名称
static const String routeHome = '/home';
static const String routeSettings = '/settings';
static const String routeProfile = '/profile';
static const String routeWidgets = '/widgets';
static const String routeWidgetsPage = '/widgets_page';
static const String routeCollectNotes = '/collect_notes';
// 颜色常量
static const Color primaryColor = Color(0xFF6200EE);
static const Color secondaryColor = Color(0xFF03DAC6);
static const Color backgroundColor = Color(0xFFFFFFFF);
static const Color surfaceColor = Color(0xFFFFFFFF);
static const Color errorColor = Color(0xFFB00020);
static const Color warningColor = Color(0xFFFF9800);
static const Color successColor = Color(0xFF4CAF50);
static const Color infoColor = Color(0xFF2196F3);
// 文本常量
static const String appTitle = 'Poes';
static const String loadingText = '加载中...';
static const String errorText = '出错了';
static const String retryText = '重试';
static const String cancelText = '取消';
static const String confirmText = '确认';
static const String saveText = '保存';
static const String deleteText = '删除';
static const String editText = '编辑';
static const String addText = '添加';
static const String searchText = '搜索';
static const String filterText = '筛选';
static const String sortText = '排序';
static const String refreshText = '刷新';
// 响应式文本常量
static const String noDataText = '暂无数据';
static const String networkErrorText = '网络连接失败';
static const String loadMoreText = '加载更多';
static const String pullToRefreshText = '下拉刷新';
static const String releaseToRefreshText = '释放刷新';
// 图标常量
static const IconData homeIcon = Icons.home;
static const IconData settingsIcon = Icons.settings;
static const IconData profileIcon = Icons.person;
static const IconData searchIcon = Icons.search;
static const IconData filterIcon = Icons.filter_list;
static const IconData sortIcon = Icons.sort;
static const IconData refreshIcon = Icons.refresh;
static const IconData addIcon = Icons.add;
static const IconData editIcon = Icons.edit;
static const IconData deleteIcon = Icons.delete;
static const IconData saveIcon = Icons.save;
static const IconData cancelIcon = Icons.cancel;
static const IconData confirmIcon = Icons.check;
static const IconData backIcon = Icons.arrow_back;
static const IconData menuIcon = Icons.menu;
static const IconData closeIcon = Icons.close;
static const IconData notificationIcon = Icons.notifications;
static const IconData favoriteIcon = Icons.favorite;
static const IconData shareIcon = Icons.share;
static const IconData downloadIcon = Icons.download;
static const IconData uploadIcon = Icons.upload;
// 响应式图标常量
static const IconData expandIcon = Icons.expand_more;
static const IconData collapseIcon = Icons.expand_less;
static const IconData fullscreenIcon = Icons.fullscreen;
static const IconData fullscreenExitIcon = Icons.fullscreen_exit;
static const IconData gridIcon = Icons.grid_view;
static const IconData listIcon = Icons.view_list;
// 动画时长
static const Duration animationDurationShort = Duration(milliseconds: 200);
static const Duration animationDurationMedium = Duration(milliseconds: 300);
static const Duration animationDurationLong = Duration(milliseconds: 500);
// 网络相关
static const int httpTimeout = 30000; // 30秒
static const int maxRetryCount = 3;
// 分页相关
static const int defaultPageSize = 20;
static const int firstPageIndex = 1;
// 响应式分页
static const int pageSizeMobile = 10;
static const int pageSizeTablet = 15;
static const int pageSizeDesktop = 20;
static const int pageSizeLargeDesktop = 25;
// 正则表达式
static const String emailRegex =
r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
static const String phoneRegex = r'^1[3-9]\d{9}$';
static const String passwordRegex =
r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$';
// 存储键名
static const String tokenKey = 'auth_token';
static const String userKey = 'user_info';
static const String themeKey = 'theme_mode';
static const String languageKey = 'language_code';
static const String firstLaunchKey = 'first_launch';
// 响应式存储键名
static const String layoutModeKey = 'layout_mode';
static const String fontSizeKey = 'font_size';
static const String gridColumnsKey = 'grid_columns';
// 错误消息
static const String networkError = '网络连接失败,请检查网络设置';
static const String serverError = '服务器错误,请稍后重试';
static const String dataError = '数据错误,请重试';
static const String authError = '认证失败,请重新登录';
static const String permissionError = '权限不足';
static const String notFoundError = '未找到相关内容';
static const String unknownError = '未知错误,请联系客服';
// 响应式错误消息
static const String screenNotSupportedError = '当前屏幕尺寸不支持';
static const String orientationNotSupportedError = '当前屏幕方向不支持';
static const String splitScreenNotSupportedError = '分屏模式不支持';
// 成功消息
static const String saveSuccess = '保存成功';
static const String deleteSuccess = '删除成功';
static const String updateSuccess = '更新成功';
static const String loginSuccess = '登录成功';
static const String logoutSuccess = '退出成功';
static const String uploadSuccess = '上传成功';
static const String downloadSuccess = '下载成功';
// 响应式成功消息
static const String layoutChangedSuccess = '布局已切换';
static const String fontSizeChangedSuccess = '字体大小已调整';
static const String orientationChangedSuccess = '屏幕方向已调整';
// 页面内容区与主导航子页统一的水平内边距(与 TabBar 可滚动标签左侧对齐)
static const double pageHorizontalPadding = 16.0;
/// 主导航子页标题行高度(默认 [kToolbarHeight] 为 56略压缩以减少顶部留白
static const double tabbedPageToolbarHeight = 48.0;
/// 主导航子页 Tab 行高度(默认约 48略压缩过小易触发指示条溢出
static const double tabbedPageTabBarHeight = 46.0;
// 布局相关
static const String gridLayout = 'grid';
static const String listLayout = 'list';
static const String compactLayout = 'compact';
static const String spaciousLayout = 'spacious';
// 屏幕方向
static const String portraitOrientation = 'portrait';
static const String landscapeOrientation = 'landscape';
// 设备类型
static const String mobileDevice = 'mobile';
static const String tabletDevice = 'tablet';
static const String desktopDevice = 'desktop';
static const String largeDesktopDevice = 'large_desktop';
}