|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
- import 'package:webview_flutter/webview_flutter.dart';
-
- class BaseWebview extends StatefulWidget {
- final Map<String, dynamic> model;
-
- const BaseWebview(this.model, {Key key}) : super(key: key);
-
- @override
- _BaseWebviewState createState() => _BaseWebviewState();
- }
-
- class _BaseWebviewState extends State<BaseWebview> {
- String _url;
- String _title;
- WebViewController _webViewController;
-
- @override
- void initState() {
- _url = widget.model['url'] ?? '';
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: _createNav(),
- backgroundColor: Colors.white,
- body: 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 ?? '',
- maxLines: 1,
- style: TextStyle(
- fontSize: 15,
- color: Color(0xff333333),
- ),
- ),
- trailing: GestureDetector(
- child: Icon(
- Icons.refresh,
- size: 20,
- ),
- onTap: () {
- _webViewController.reload();
- },
- ),
- );
- }
- }
|