webview_page.dart 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:liftmanager/widgets/app_bar.dart';
  4. import 'package:webview_flutter/webview_flutter.dart';
  5. class WebViewPage extends StatefulWidget {
  6. const WebViewPage({
  7. Key key,
  8. @required this.title,
  9. @required this.url,
  10. }) : super(key: key);
  11. final String title;
  12. final String url;
  13. @override
  14. _WebViewPageState createState() => _WebViewPageState();
  15. }
  16. class _WebViewPageState extends State<WebViewPage> {
  17. final Completer<WebViewController> _controller = Completer<WebViewController>();
  18. @override
  19. Widget build(BuildContext context) {
  20. return FutureBuilder<WebViewController>(
  21. future: _controller.future,
  22. builder: (context, snapshot) {
  23. return WillPopScope(
  24. onWillPop: () async {
  25. if (snapshot.hasData){
  26. bool canGoBack = await snapshot.data.canGoBack();
  27. if (canGoBack){
  28. // 网页可以返回时,优先返回上一页
  29. snapshot.data.goBack();
  30. return Future.value(false);
  31. }
  32. return Future.value(true);
  33. }
  34. return Future.value(true);
  35. },
  36. child: Scaffold(
  37. appBar: MyAppBar(
  38. centerTitle: widget.title,
  39. ),
  40. body: WebView(
  41. initialUrl: widget.url,
  42. javascriptMode: JavascriptMode.unrestricted,
  43. onWebViewCreated: (WebViewController webViewController) {
  44. _controller.complete(webViewController);
  45. },
  46. )
  47. ),
  48. );
  49. }
  50. );
  51. }
  52. }