تعتبر حزمة webview_flutter أداة قوية ومفيدة في تطوير تطبيقات Flutter، حيث تتيح إمكانية عرض محتوى الويب داخل تطبيقك. تعمل هذه الحزمة على تضمين متصفح الويب داخل تطبيقك، مما يسمح للمستخدمين بتصفح صفحات الويب وتفاعل معها بسهولة وبطريقة مرنة.
أهمية حزمة webview_flutter:
توفر حزمة webview_flutter إمكانية دمج متصفح الويب في تطبيقاتك بشكل سلس وسهل الاستخدام. يعتبر استخدام متصفح الويب ضرورى في العديد من السيناريوهات، بما في ذلك:
- عرض صفحات الويب الخارجية: يمكن استخدام حزمة webview_flutter لعرض صفحات الويب الخارجية داخل تطبيقك، مثل عرض مقالات الأخبار أو صفحات المنتجات الخاصة بموقعك.
- تطبيقات الويب: يمكن استخدام حزمة webview_flutter لتحويل تطبيق الويب الحالي إلى تطبيق Flutter من خلال تضمين متصفح الويب داخل التطبيق وعرض المحتوى بشكل سلس ومتكامل.
- الإعلانات والتحليلات: يمكن استخدام حزمة webview_flutter لعرض إعلانات أو تضمين رموز التحليل في صفحات الويب المعروضة، مما يسمح لك بتتبع وتحليل تفاعل المستخدمين مع المحتوى.
“اقرأ أيضاً: شرح استخدام path_provider في Flutter“
خصائص حزمة webview_flutter:
دعونا نستعرض الخصائص الرئيسية في حزمة webview_flutter بالأكواد:
1. WebViewController
هذا الجزء يعرف حالة الصفحة ويحتوي على الـ WebViewController الذي يتحكم في عرض صفحة الويب.
import 'package:webview_flutter/webview_flutter.dart'; controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setBackgroundColor(const Color(0x00000000)) ..setNavigationDelegate( NavigationDelegate( onProgress: (int progress) { // Update loading bar. }, onPageStarted: (String url) {}, onPageFinished: (String url) {}, onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) { if (request.url.startsWith('https://www.youtube.com/')) { return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse('https://flutter.dev'));
WebViewController controller = WebViewController()
: يتم إنشاء مثيل جديد من WebViewController للتحكم في صفحة الويب المعروضة في WebView...setJavaScriptMode(JavaScriptMode.unrestricted)
: تعيين وضع JavaScript للوضع غير المقيد، مما يتيح تشغيل السكربتات في صفحة الويب...setBackgroundColor(const Color(0x00000000))
: تعيين لون خلفية الـ WebView إلى اللون الشفاف...setNavigationDelegate(NavigationDelegate())
: تعيين مسؤول التنقل للـ WebViewController باستخدام NavigationDelegate المعطى سيتم شرح بالأسفل...loadRequest(Uri.parse('https://flutter.dev'))
: تحميل صفحة الويب المستهدفة من رابط محدد.
“اقرأ أيضاً: شرح استخدام Image Picker في Flutter“
2. NavigationDelegate
هذا الجزء يعرف مسؤول التنقل لـ WebView ويحتوي على العديد من الدوال التي تتحكم في سلوك التنقل .
NavigationDelegate( onProgress: (int progress) { // Update loading bar. }, onPageStarted: (String url) {}, onPageFinished: (String url) {}, onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) { if (request.url.startsWith('https://www.youtube.com/')) { return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ),
onProgress
: يتم استدعاءه لتحديث شريط التحميل عندما يتم تحميل صفحة الويب.onPageStarted
: يتم استدعاءه عندما يبدأ تحميل صفحة الويب.onPageFinished
: يتم استدعاءه عندما ينتهي تحميل صفحة الويب.onWebResourceError
: يتم استدعاءه عندما يحدث خطأ في تحميل مصدر ويب.onNavigationRequest
: يتم استدعاءه للتحقق من طلب التنقل وتحديد قرار التنقل. في هذا الكود، إذا بدأت عناوين URL بـ ‘https://www.youtube.com/’، فإن التنقل يمنع (NavigationDecision.prevent)، وإلا فإنه يتم السماح بالتنقل اليه (NavigationDecision.navigate).
3. WebViewWidget
WebViewWidget(controller: controller)
: يعرض واجهة المستخدم لـ WebView ويستخدم الـ controller المعطى.
import 'package:webview_flutter/webview_flutter.dart'; WebViewController? _controller; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Web View Example'), ), body: WebViewWidget(controller: controller), ); }
“اقرأ أيضاً: شرح استخدام FlutterToast في Flutter“
مثال كامل لاستخدام حزمة webview_flutter:
دعنا نستعرض مثالًا كاملاً لاستخدام حزمة webview_flutter في تطبيق Flutter:
import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Web View Example', theme: ThemeData( primarySwatch: Colors.blue, ), home: const WebViewExample(), ); } } class WebViewExample extends StatefulWidget { const WebViewExample({super.key}); @override _WebViewExampleState createState() => _WebViewExampleState(); } class _WebViewExampleState extends State<WebViewExample> { WebViewController controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setBackgroundColor(const Color(0x00000000)) ..setNavigationDelegate( NavigationDelegate( onProgress: (int progress) { // Update loading bar. }, onPageStarted: (String url) {}, onPageFinished: (String url) {}, onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) { if (request.url.startsWith('https://www.youtube.com/')) { return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse('https://flutter.dev')); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Web View Example'), ), body: WebViewWidget(controller: controller), ); } }
“اقرأ أيضاً: شرح استخدام url_launcher في Flutter“
باستخدام حزمة webview_flutter في تطبيقات Flutter، يمكن للمطورين دمج تجربة الويب بسهولة ومرونة، مما يوفر تجربة مستخدم سلسة وتفاعلية. استخدام هذه الحزمة يوفر وقت وجهود التطوير ويسمح بعرض صفحات الويب وتفاعل المستخدمين معها داخل التطبيق. ابدأ في استكشاف قدراتها وبناء تطبيقات متكاملة ومدهشة.