在根目录pubspec.yaml文件中添加依赖
dependencies:
webview_flutter: ^2.0.10
主页面
import 'package:flutter/material.dart';
import 'package:webview/webview.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({ Key key }) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(home: Scaffold(body: homebody(),),);
}
}
class homebody extends StatelessWidget {
const homebody({ Key key }) : super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
NavigatorUtil.push(
context,
Webview(
initialUrl:"https://blog.csdn.net/m0_38013946/article/details/122081021?spm=1001.2014.3001.5501",
title: '详情',
),
);
},
child: Container(child: Padding(padding: EdgeInsets.all(50),child: Text("webview_flutter"),),)
);
}
}
class NavigatorUtil {
//跳转页面
static push(BuildContext context, Widget page) async {
final result = await Navigator.push(
context, MaterialPageRoute(builder: (context) => page));
return result;
}
}
webview.dart 文件
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class Webview extends StatefulWidget {
final String initialUrl;
final String statusBarColor;
final String title;
final bool hideAppBar;
final bool backForbid;
Webview({
Key key,
this.initialUrl,
this.statusBarColor,
this.title,
this.hideAppBar,
this.backForbid = false,
}): super(key: key);
@override
_WebviewState createState() => _WebviewState();
}
class _WebviewState extends State<Webview> {
final Completer<WebViewController> _controller =
Completer<WebViewController>();
@override
void initState() {
super.initState();
if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
}
// 自定义 appBar
Widget _appBar(Color backgroundColor, Color backButtonColor) {
if (widget.hideAppBar ?? false) {
return Container(
color: backButtonColor,
height: 25,
);
}
return Container(
color: backgroundColor,
padding: EdgeInsets.fromLTRB(0, 40, 0, 10),
child: FractionallySizedBox(
widthFactor: 1,
child: Stack(
children: <Widget>[
GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Container(
margin: EdgeInsets.only(left: 10),
child: Icon(
Icons.close,
color: backButtonColor,
size: 26,
),
),
),
Positioned(
left: 0,
right: 0,
child: Center(
child: Text(
widget.title ?? '',
style: TextStyle(
color: backButtonColor,
fontSize: 20,
),
),
),
)
],
),
),
);
}
@override
Widget build(BuildContext context) {
String statusBarColorStr = widget.statusBarColor ?? 'ffffff';
Color backButtonColor;
if (statusBarColorStr == 'ffffff') {
backButtonColor = Colors.black;
} else {
backButtonColor = Colors.white;
}
return Scaffold(
body: Column(
children: [
_appBar(
Color(int.parse('0xff' + statusBarColorStr)),
backButtonColor,
),
Expanded(
child: WebView(
initialUrl: widget.initialUrl,
javascriptMode: JavascriptMode.unrestricted,
gestureNavigationEnabled: true,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
onProgress: (int progress) {
print("WebView is loading (progress : $progress%)");
},
navigationDelegate: (NavigationRequest request) {
return NavigationDecision.navigate;
},
onPageStarted: (String url) {
print('Page started loading: $url');
},
onPageFinished: (String url) {
print('Page finished loading: $url');
},
),
)
],
),
);
}
}