一款基于 Flutter 的 iOS/Android 全功能浏览器,支持精细缩放控制、下载管理和桌面模式。
- 多标签页 — 创建、切换、关闭标签页,标签页网格管理器
- 缩放控制 — 底部滑块 + 按钮精细调节(0.5x–3.0x),缩放级别跨页面保持
- 桌面/移动模式 — 切换 User-Agent,桌面模式可自定义视口宽度(1280/1920/2560)
- 起始页 — 快速访问网站 + 最近访问记录
- 页面内查找 — 底部搜索栏,上下导航匹配项
- 全屏模式 — 可拖拽浮动按钮切换,隐藏工具栏和缩放条
- 自动下载检测 — MIME 类型白名单、URL 扩展名、Content-Disposition 头
- 进度追踪 — 实时进度条,后台下载支持
- Cookie 透传 — 自动从 WebView 获取 cookies 传递给下载器,支持需要登录的下载
- 文件分享 — 下载完成后通过系统分享面板导出
- 书签管理 — 文件夹分组、搜索、排序、移动
- 历史记录 — 按日期分组(今天/昨天/更早),搜索,一键清除
- 深色/浅色模式 — 跟随系统或手动切换
- 搜索引擎 — Google / Bing / DuckDuckGo
- 隐私 — 清除 Cookies、清除缓存
- 开发者工具 — 分级日志记录(debug/info/warning/error),应用内日志查看器,日志导出
- 伪装为 Chrome for iOS / macOS Safari,匹配 WKWebView 平台指纹
- 完整的
chrome.app/runtime/csi/loadTimes对象 - WebGL vendor/renderer 一致性(Apple Inc. / Apple GPU)
- 清理 WebView 自动化标记
lib/
├── core/
│ ├── app_colors.dart # 颜色系统(深色/浅色)
│ ├── constants.dart # UA、缩放范围、搜索引擎
│ ├── extensions.dart # BuildContext 扩展
│ ├── theme.dart # Material 主题配置
│ ├── database/ # SQLite 数据库
│ ├── logger/ # AppLogger 分级日志
│ └── widgets/ # 共享 UI 组件
├── features/
│ ├── browser/ # 浏览器核心
│ │ ├── models/ # TabModel
│ │ ├── providers/ # BrowserNotifier (Riverpod)
│ │ └── widgets/ # 工具栏、URL栏、起始页、WebView容器
│ ├── bookmarks/ # 书签(文件夹 + 条目)
│ ├── downloads/ # 下载管理
│ ├── history/ # 浏览历史
│ └── settings/ # 设置
├── l10n/ # 国际化(中文/英文)
├── app.dart # MaterialApp 入口
└── main.dart # 启动 + flutter_downloader 初始化
| 类别 | 技术 |
|---|---|
| 框架 | Flutter 3.11+ / Dart |
| 状态管理 | Riverpod (NotifierProvider) |
| WebView | flutter_inappwebview |
| 下载 | flutter_downloader + NSURLSession |
| 数据库 | sqflite (SQLite) |
| 国际化 | Flutter intl (ARB) |
- Flutter SDK ≥ 3.11.5
- Xcode 16+(iOS 开发)
- CocoaPods
# 安装依赖
flutter pub get
# iOS 模拟器
flutter run
# iOS 真机(需要 Apple Developer 证书)
flutter run --release
# 生成国际化文件(修改 .arb 后)
flutter gen-l10n
# 生成应用图标
dart run flutter_launcher_iconslib/features/settings/models/settings_model.dart— 添加字段 +copyWith+fromMaplib/features/settings/providers/settings_provider.dart— 添加 setter 方法lib/features/settings/widgets/settings_screen.dart— 添加_SettingsRow
- 在
lib/l10n/app_en.arb和app_zh.arb添加 key-value - 运行
flutter gen-l10n - 通过
AppLocalizations.of(context)!.yourKey使用
import 'package:zoomview/core/logger/app_logger.dart';
AppLogger.instance.d('Tag', 'debug message');
AppLogger.instance.i('Tag', 'info message');
AppLogger.instance.w('Tag', 'warning message');
AppLogger.instance.e('Tag', 'error message');设置 → 开发者 → 开启日志 → 查看/导出日志。无论开关状态,日志始终输出到控制台。
MIT