From 948819badab4c589d7f07570ac00eb1705ac0d0f Mon Sep 17 00:00:00 2001
From: Weller <1812208341@qq.com>
Date: Tue, 22 Sep 2020 19:00:27 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=AC=E5=85=B1=E8=B7=B3?=
=?UTF-8?q?=E8=BD=ACwebview?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
example/ios/Runner/Info.plist | 9 ++
.../models/setting_page_style_item_model.dart | 4 +
.../setting_page_style_item_model.g.dart | 2 +
lib/pages/setting_page/setting_page.dart | 39 ++++++-
lib/pages/webview/base_webview.dart | 103 ++++++++++++++++++
lib/register.dart | 3 +
6 files changed, 154 insertions(+), 6 deletions(-)
create mode 100644 lib/pages/webview/base_webview.dart
diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist
index c5bd9d3..e42a3c0 100644
--- a/example/ios/Runner/Info.plist
+++ b/example/ios/Runner/Info.plist
@@ -55,5 +55,14 @@
获取访问相册权限更换头像
NSPhotoLibraryUsageDescription
获取访问相册权限更换头像
+ io.flutter.embedded_views_preview
+ YES
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
diff --git a/lib/pages/setting_page/models/setting_page_style_item_model.dart b/lib/pages/setting_page/models/setting_page_style_item_model.dart
index c166bc3..b79808a 100644
--- a/lib/pages/setting_page/models/setting_page_style_item_model.dart
+++ b/lib/pages/setting_page/models/setting_page_style_item_model.dart
@@ -19,12 +19,16 @@ class SettingPageStyleItemModel extends Object {
@JsonKey(name: 'skip_identifier')
String skipIdentifier;
+ @JsonKey(name: 'url')
+ String url;
+
SettingPageStyleItemModel(
this.name,
this.nameColor,
this.desc,
this.descColor,
this.skipIdentifier,
+ this.url,
);
factory SettingPageStyleItemModel.fromJson(Map srcJson) =>
diff --git a/lib/pages/setting_page/models/setting_page_style_item_model.g.dart b/lib/pages/setting_page/models/setting_page_style_item_model.g.dart
index 996447a..c831197 100644
--- a/lib/pages/setting_page/models/setting_page_style_item_model.g.dart
+++ b/lib/pages/setting_page/models/setting_page_style_item_model.g.dart
@@ -14,6 +14,7 @@ SettingPageStyleItemModel _$SettingPageStyleItemModelFromJson(
json['desc'] as String,
json['desc_color'] as String,
json['skip_identifier'] as String,
+ json['url'] as String,
);
}
@@ -25,4 +26,5 @@ Map _$SettingPageStyleItemModelToJson(
'desc': instance.desc,
'desc_color': instance.descColor,
'skip_identifier': instance.skipIdentifier,
+ 'url': instance.url,
};
diff --git a/lib/pages/setting_page/setting_page.dart b/lib/pages/setting_page/setting_page.dart
index d8bb7ec..a74e6b2 100644
--- a/lib/pages/setting_page/setting_page.dart
+++ b/lib/pages/setting_page/setting_page.dart
@@ -115,13 +115,40 @@ class _SettingContainerState extends State<_SettingContainer> {
}
Widget _createItem(SettingPageStyleItemModel item) {
- return Container(
- width: double.infinity,
- height: 50,
- color: Colors.white,
- child: Row(
- children: [Text(item.name), Text('aaaaa')],
+ return GestureDetector(
+ child: Container(
+ padding: EdgeInsets.only(left: 12.5, right: 12.5),
+ width: double.infinity,
+ height: 50,
+ color: Colors.white,
+ child: Row(
+ children: [
+ Expanded(
+ child: Text(
+ item.name,
+ style: TextStyle(
+ fontSize: 13,
+ color: HexColor.fromHex(item.nameColor),
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ),
+ Expanded(
+ child: Text(
+ item.desc,
+ textAlign: TextAlign.right,
+ style: TextStyle(
+ fontSize: 13,
+ color: HexColor.fromHex(item.descColor),
+ ),
+ ),
+ ),
+ ],
+ ),
),
+ onTap: () {
+ RouterUtil.route(item.toJson(), context);
+ },
);
}
}
diff --git a/lib/pages/webview/base_webview.dart b/lib/pages/webview/base_webview.dart
new file mode 100644
index 0000000..e1c9bb6
--- /dev/null
+++ b/lib/pages/webview/base_webview.dart
@@ -0,0 +1,103 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:webview_flutter/webview_flutter.dart';
+import 'package:zhiying_comm/zhiying_comm.dart';
+
+class BaseWebview extends StatefulWidget {
+ final Map model;
+
+ const BaseWebview(
+ this.model, {
+ Key key,
+ }) : super(key: key);
+
+ @override
+ _BaseWebviewState createState() => _BaseWebviewState();
+}
+
+class _BaseWebviewState extends State {
+ String _url;
+ String _title;
+ WebViewController _webViewController;
+
+ @override
+ void initState() {
+ _url = widget.model['url'] ?? '';
+ super.initState();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: _createNav(),
+ body: Builder(builder: (BuildContext context) {
+ return WebView(
+ initialUrl: _url,
+ javascriptMode: JavascriptMode.unrestricted,
+ onWebViewCreated: (WebViewController webViewController) {
+ _webViewController = webViewController;
+ },
+ navigationDelegate: (NavigationRequest request) {
+ return NavigationDecision.navigate;
+ },
+ onPageStarted: (String url) {
+ print('Page started loading: $url');
+ },
+ onPageFinished: (String url) {
+ print('Page finished loading: $url');
+ _webViewController.getTitle().then((title) {
+ _title = title;
+ setState(() {});
+ });
+ },
+ gestureNavigationEnabled: true,
+ );
+ }),
+ );
+ }
+
+// 导航栏
+ Widget _createNav() {
+ return CupertinoNavigationBar(
+ border: Border(
+ bottom: BorderSide(
+ width: 0.0, // One physical pixel.
+ style: BorderStyle.none,
+ ),
+ ),
+ backgroundColor: Colors.white,
+ leading: Navigator.canPop(context)
+ ? GestureDetector(
+ child: Container(
+ padding: EdgeInsets.zero,
+ child: Icon(
+ Icons.arrow_back_ios,
+ size: 20,
+ ),
+ ),
+ onTap: () {
+ if (Navigator.canPop(context)) {
+ Navigator.pop(context);
+ }
+ },
+ )
+ : Container(),
+ middle: Text(
+ _title ?? '',
+ style: TextStyle(
+ fontSize: 15,
+ color: HexColor.fromHex('333333'),
+ ),
+ ),
+ trailing: GestureDetector(
+ child: Icon(
+ Icons.refresh,
+ size: 20,
+ ),
+ onTap: () {
+ _webViewController.reload();
+ },
+ ),
+ );
+ }
+}
diff --git a/lib/register.dart b/lib/register.dart
index 5b2a21f..669fdd2 100644
--- a/lib/register.dart
+++ b/lib/register.dart
@@ -7,6 +7,7 @@ import 'package:zhiying_base_widget/pages/setting_page/setting_page.dart';
import 'package:zhiying_base_widget/pages/sreach_page/sreach_page.dart';
import 'package:zhiying_base_widget/pages/sreach_result_page/sreach_result_page.dart';
import 'package:zhiying_base_widget/pages/wallet_page/wallet_page.dart';
+import 'package:zhiying_base_widget/pages/webview/base_webview.dart';
import 'package:zhiying_base_widget/widgets/goods_details/footer/goods_details_footer_widget.dart';
import 'package:zhiying_base_widget/widgets/goods_details/price/goods_details_price_widget.dart';
import 'package:zhiying_base_widget/widgets/goods_details/slide_banner/goods_details_slide_banner_widget.dart';
@@ -62,6 +63,8 @@ class BaseWidgetRegister {
PageFactory.regist('pub.flutter.settings', (model) => SettingPage(model));
PageFactory.regist('pub.flutter.my_orders', (model) => OrdersPage(model));
+
+ PageFactory.regist('pub.flutter.url', (model) => BaseWebview(model));
}
// 注册控件