0


Flutter&鸿蒙next 中如何实现 WebView【跳、显、适、反】等一些基础问题

✅近期推荐:求职神器

https://bbs.csdn.net/topics/619384540

🔥欢迎大家订阅系列专栏:flutter_鸿蒙next
💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路,太tm无趣了!

写在前面

在 Flutter 中集成 WebView 是一种常见需求,可以用于展示网页或进行在线操作。以下是如何在 Flutter 项目中实现 WebView,适配不同机型,并处理页面间参数传递的详细步骤。

1. 添加依赖

首先,在

  1. pubspec.yaml

中添加

  1. webview_flutter

插件:

  1. dependencies:
  2. flutter:
  3. sdk: flutter
  4. webview_flutter: ^latest_version

然后,运行

  1. flutter pub get

安装依赖。

2. 配置平台权限

鸿蒙nextOS:鸿蒙应用中设置并使用网络权限。可以在

  1. module.json5

文件中声明网络权限。

  1. {
  2. "permissions": [
  3. "ohos.permission.INTERNET"
  4. ]
  5. }

Android: 在

  1. AndroidManifest.xml

中,添加网络权限:

  1. <uses-permission android:name="android.permission.INTERNET"/>

iOS: 在

  1. Info.plist

中,添加以下配置以允许访问网络:

  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSAllowsArbitraryLoads</key>
  4. <true/>
  5. </dict>
3. 创建 WebView 页面

在你的 Flutter 项目中创建一个 WebView 页面。例如:

  1. import 'package:flutter/material.dart';
  2. import 'package:webview_flutter/webview_flutter.dart';
  3. class WebViewPage extends StatefulWidget {
  4. final String url;
  5. WebViewPage({required this.url});
  6. @override
  7. _WebViewPageState createState() => _WebViewPageState();
  8. }
  9. class _WebViewPageState extends State<WebViewPage> {
  10. late WebViewController _controller;
  11. bool _isLoading = true;
  12. @override
  13. Widget build(BuildContext context) {
  14. return Scaffold(
  15. appBar: AppBar(
  16. title: Text('WebView Example'),
  17. ),
  18. body: Stack(
  19. children: [
  20. WebView(
  21. initialUrl: widget.url,
  22. javascriptMode: JavascriptMode.unrestricted,
  23. onWebViewCreated: (WebViewController webViewController) {
  24. _controller = webViewController;
  25. },
  26. onPageFinished: (String url) {
  27. setState(() {
  28. _isLoading = false;
  29. });
  30. },
  31. ),
  32. if (_isLoading)
  33. Center(child: CircularProgressIndicator()),
  34. ],
  35. ),
  36. );
  37. }
  38. }
4. 从 Flutter 项目跳转到 WebView 页面

在 Flutter 的主页面或其他地方,可以通过 Navigator 跳转到 WebView 页面:

  1. Navigator.push(
  2. context,
  3. MaterialPageRoute(
  4. builder: (context) => WebViewPage(url: 'https://flutter.dev'),
  5. ),
  6. );
5. 适配不同机型

为了确保 WebView 在不同机型上的适配,使用

  1. MediaQuery

获取屏幕尺寸并设置 WebView 的高度和宽度:

  1. final screenWidth = MediaQuery.of(context).size.width;
  2. final screenHeight = MediaQuery.of(context).size.height;
  3. WebView(
  4. initialUrl: widget.url,
  5. javascriptMode: JavascriptMode.unrestricted,
  6. // 这里可以根据需要调整高度和宽度
  7. );
6. 从 WebView 返回携带参数

要从 WebView 返回到 Flutter 页面并携带参数,可以在 WebView 中使用 JavaScript 与 Flutter 进行交互。可以通过

  1. evaluateJavascript

传递数据:

  1. // 在 WebView 中调用
  2. final result = await _controller.evaluateJavascript("someFunction()");
  3. Navigator.pop(context, result);

在 Flutter 中接收参数:

  1. final result = await Navigator.push(
  2. context,
  3. MaterialPageRoute(
  4. builder: (context) => WebViewPage(url: 'https://your-url.com'),
  5. ),
  6. );
  7. if (result != null) {
  8. // 处理返回的参数
  9. print(result);
  10. }
7. 测试与调试

在不同设备上进行测试,确保 WebView 的显示效果和功能正常。使用 Flutter 的热重载功能可以快速查看更改。

写在最后

通过上述步骤,你可以在 Flutter 项目中有效实现 WebView,适配不同机型,并实现页面间的数据传递。这样的实现不仅丰富了应用的功能,也提升了用户体验。通过调试和优化,确保 WebView 的性能和稳定性。


本文转载自: https://blog.csdn.net/lbcyllqj/article/details/143196388
版权归原作者 淼学派对 所有, 如有侵权,请联系我们删除。

“Flutter&鸿蒙next 中如何实现 WebView【跳、显、适、反】等一些基础问题”的评论:

还没有评论