flutter_simple_webview
A lightweight Flutter WebView widget with built-in internet connectivity checks, error handling, and support for launching native apps (e.g., phone calls, email, maps, YouTube, etc.). Supports custom loading indicators, progress bar, retry logic, and customizable AppBar.
✨ Features
- 🌐 WebView with JavaScript enabled
- 🔌 Internet connectivity check using
connectivity_plus
- 📶 Auto retry on network restored
- 🧭 External link handling (e.g., tel:, mailto:, geo:, etc.)
- 📊 Linear & circular progress indicators
- ❌ Fallback error screen for no internet
- 🔙 AppBar with back and refresh actions
- ☁️ Custom callbacks for page events
🚀 Installation
Add to your pubspec.yaml
:
dependencies:
flutter_simple_webview: ^1.0.0
🧑💻 Usage
import 'package:flutter_simple_webview/flutter_simple_webview.dart';
FlutterSimpleWebView(
url: "https://rahulreza.com",
appBarTitle: "Rahul Reza",
showAppBar: true,
progressColor: Colors.blueAccent,
onPageStarted: (url) => print("Started: $url"),
onPageFinished: (url) => print("Finished: $url"),
onWebResourceError: (error) => print("Error: ${error.description}"),
)
✅ Android Permissions
Android (in example/android/app/src/main/AndroidManifest.xml
)
Inside the <manifest>
tag:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="tel" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="mailto" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="geo" />
</intent>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
</queries>
✅ iOS Permissions
iOS (in example/ios/Runner/Info.plist
)
<key>NSCameraUsageDescription</key>
<string>This app needs camera access to enable camera functionalities in the web view.</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app needs microphone access to enable audio recording in the web view.</string>