基础组件库
 
 
 
 
 

104 lines
2.6 KiB

  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:webview_flutter/webview_flutter.dart';
  4. import 'package:zhiying_comm/zhiying_comm.dart';
  5. class BaseWebview extends StatefulWidget {
  6. final Map<String, dynamic> model;
  7. const BaseWebview(
  8. this.model, {
  9. Key key,
  10. }) : super(key: key);
  11. @override
  12. _BaseWebviewState createState() => _BaseWebviewState();
  13. }
  14. class _BaseWebviewState extends State<BaseWebview> {
  15. String _url;
  16. String _title;
  17. WebViewController _webViewController;
  18. @override
  19. void initState() {
  20. _url = widget.model['url'] ?? '';
  21. super.initState();
  22. }
  23. @override
  24. Widget build(BuildContext context) {
  25. return Scaffold(
  26. appBar: _createNav(),
  27. body: Builder(builder: (BuildContext context) {
  28. return WebView(
  29. initialUrl: _url,
  30. javascriptMode: JavascriptMode.unrestricted,
  31. onWebViewCreated: (WebViewController webViewController) {
  32. _webViewController = webViewController;
  33. },
  34. navigationDelegate: (NavigationRequest request) {
  35. return NavigationDecision.navigate;
  36. },
  37. onPageStarted: (String url) {
  38. print('Page started loading: $url');
  39. },
  40. onPageFinished: (String url) {
  41. print('Page finished loading: $url');
  42. _webViewController.getTitle().then((title) {
  43. _title = title;
  44. setState(() {});
  45. });
  46. },
  47. gestureNavigationEnabled: true,
  48. );
  49. }),
  50. );
  51. }
  52. // 导航栏
  53. Widget _createNav() {
  54. return CupertinoNavigationBar(
  55. border: Border(
  56. bottom: BorderSide(
  57. width: 0.0, // One physical pixel.
  58. style: BorderStyle.none,
  59. ),
  60. ),
  61. backgroundColor: Colors.white,
  62. leading: Navigator.canPop(context)
  63. ? GestureDetector(
  64. child: Container(
  65. padding: EdgeInsets.zero,
  66. child: Icon(
  67. Icons.arrow_back_ios,
  68. size: 20,
  69. ),
  70. ),
  71. onTap: () {
  72. if (Navigator.canPop(context)) {
  73. Navigator.pop(context);
  74. }
  75. },
  76. )
  77. : Container(),
  78. middle: Text(
  79. _title ?? '',
  80. style: TextStyle(
  81. fontSize: 15,
  82. color: HexColor.fromHex('333333'),
  83. ),
  84. ),
  85. trailing: GestureDetector(
  86. child: Icon(
  87. Icons.refresh,
  88. size: 20,
  89. ),
  90. onTap: () {
  91. _webViewController.reload();
  92. },
  93. ),
  94. );
  95. }
  96. }