这是一个使用 Flutter 构建的简单 WebApp 项目,旨在帮助开发者快速实现一个加载网页的移动应用。它集成了 webview_flutter
插件,用于加载网页,并通过 connectivity_plus
插件检测网络连接状态,提供以下功能:
- 加载指定的网页。
- 处理系统返回按钮,用于返回网页的上一页。
- 当设备无网络连接时显示“无网络连接”的提示页面。
- 沉浸式状态栏设计,状态栏颜色为白色,图标为深色。
- 网页加载:通过 WebView 加载指定的网页内容。
- 状态栏设计:实现沉浸式状态栏,颜色白色,图标为深色。
- 无网络提示:在无网络连接时显示提示页面,并提供“重试”按钮。
- 返回按钮处理:支持返回 WebView 的上一页,而不是直接退出应用。
- 正常加载网页:
- 显示指定的网址内容。
- 无网络提示:
- 显示无网络连接的占位页面。
- 返回按钮功能:
- 在网页内导航时,按系统返回按钮可返回到上一页。
- 如果已经在首页,则退出应用。
- Flutter SDK:3.22.0 或更高版本
- Dart:3.4.0 或更高版本
- 开发环境:VS Code
- 支持平台:HarmonyOS Next(API12+)
按照以下步骤运行项目:
参见 开源鸿蒙仓库。
git clone https://github.com/your-repo/flutter-webapp-example.git
cd flutter-webapp-example
确保 Flutter 环境已配置,然后运行以下命令安装依赖:
flutter pub get
在 WebAppScreen
的 initState
方法中,找到以下代码:
..loadRequest(Uri.parse('https://flutter.dev'));
将 'https://flutter.dev'
替换为你希望加载的目标网址,例如:
..loadRequest(Uri.parse('https://yourwebsite.com'));
使用以下命令构建应用:
flutter build hap --release
以下是项目的核心依赖及其功能:
- webview_flutter:
- 用于在应用中嵌入网页。
- connectivity_plus:
- 检测设备的网络连接状态。
dependencies:
flutter:
sdk: flutter
webview_flutter: (鸿蒙仓库)
connectivity_plus: (鸿蒙仓库)
webapp/
├── lib/
│ ├── main.dart # 应用入口文件
├── pubspec.yaml # 项目依赖配置文件
应用的核心逻辑,包括以下功能:
-
WebView 加载网页:
- 使用
webview_flutter
的WebViewController
和WebViewWidget
来加载网页内容。
- 使用
-
无网络提示:
- 使用
connectivity_plus
检测网络状态,无网络时显示占位页面。
- 使用
-
返回按钮处理:
- 使用
WillPopScope
捕捉返回事件,并通过 WebView 的canGoBack
和goBack
方法返回上一页。
- 使用
在 main.dart
文件中,找到以下代码:
..loadRequest(Uri.parse('https://flutter.dev'));
将 https://flutter.dev
替换为你的目标网址。
无网络时显示的占位页面在 _buildNoConnectionScreen
方法中定义:
Widget _buildNoConnectionScreen() {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.wifi_off, size: 80, color: Colors.grey),
const SizedBox(height: 20),
const Text(
'无网络连接',
style: TextStyle(fontSize: 20, color: Colors.grey),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _checkNetworkConnection,
child: const Text('重试'),
),
],
),
);
}
你可以根据需要修改图标、文字或按钮设计。
状态栏的样式通过以下代码设置:
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(
statusBarColor: Colors.white, // 状态栏背景颜色
statusBarIconBrightness: Brightness.dark, // 状态栏图标颜色
),
);
- 状态栏背景颜色:修改
statusBarColor
。 - 状态栏图标颜色:
Brightness.dark
:深色图标(适合浅色背景)。Brightness.light
:浅色图标(适合深色背景)。
- 检查目标网址是否可以正常访问。
- 确保设备已连接到网络。
确保已安装 connectivity_plus
插件,并正确配置以下代码:
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
setState(() {
_isConnected = result != ConnectivityResult.none;
});
});
确保在 Scaffold
的 body
中使用了 SafeArea
:
body: SafeArea(
child: WebViewWidget(controller: _controller),
),
欢迎提交 issue 或 pull request,帮助改进项目!
- Fork 本项目。
- 创建你的分支:
git checkout -b feature/my-feature
。 - 提交更改:
git commit -m "Add some feature"
。 - 推送到分支:
git push origin feature/my-feature
。 - 提交 Pull Request。
本项目遵循 Apache 许可证,详情请参考 LICENSE。