This commit is contained in:
2026-03-07 17:24:59 +08:00
parent 4418ebecac
commit b0ec8ab4bd
417 changed files with 42546 additions and 2 deletions

View File

@@ -0,0 +1,133 @@
import 'package:flutter/material.dart';
import 'package:flutter_dmzj/app/utils.dart';
import 'package:flutter_dmzj/modules/common/webview/webview_controller.dart';
import 'package:flutter_dmzj/widgets/status/app_error_widget.dart';
import 'package:get/get.dart';
import 'package:url_launcher/url_launcher_string.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebViewPage extends StatelessWidget {
final String url;
final WebViewPageController controller;
WebViewPage({required this.url, Key? key})
: controller = Get.put(
WebViewPageController(url),
tag: DateTime.now().millisecondsSinceEpoch.toString(),
),
super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Obx(() => Text(controller.title.value)),
),
body: Stack(
children: [
Obx(
() => Offstage(
offstage: controller.pageLoadding.value,
child: WebViewWidget(
controller: controller.webViewController,
),
),
),
Obx(
() => Offstage(
offstage: !controller.pageError.value,
child: AppErrorWidget(
errorMsg: controller.errorMsg.value,
onRefresh: () => controller.refreshWeb(),
),
),
),
],
),
bottomNavigationBar: Stack(
children: [
BottomAppBar(
child: SizedBox(
height: 56,
child: Row(
children: [
Expanded(
child: IconButton(
onPressed: () {
controller.webViewController.goBack();
},
icon: const Icon(
Icons.chevron_left,
),
),
),
Expanded(
child: IconButton(
onPressed: () {
controller.webViewController.reload();
},
icon: const Icon(
Icons.refresh,
),
),
),
Expanded(
child: IconButton(
onPressed: () {
controller.webViewController.goForward();
},
icon: const Icon(
Icons.chevron_right,
),
),
),
Expanded(
child: IconButton(
onPressed: () async {
Utils.share(
(await controller.webViewController.currentUrl())
.toString(),
);
},
icon: const Icon(
Icons.share,
size: 20,
),
),
),
Expanded(
child: IconButton(
onPressed: () async {
var url =
await controller.webViewController.currentUrl();
if (url != null) {
launchUrlString(url,
mode: LaunchMode.externalApplication);
}
},
icon: const Icon(
Icons.open_in_browser,
),
),
),
],
),
),
),
Positioned.fill(
top: 0,
left: 0,
child: Obx(
() => Offstage(
offstage: !controller.pageLoadding.value,
child: Container(
alignment: Alignment.topLeft,
child: const LinearProgressIndicator(),
),
),
),
)
],
),
);
}
}