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>