atomic_webview 0.1.6 copy "atomic_webview: ^0.1.6" to clipboard
atomic_webview: ^0.1.6 copied to clipboard

A cross-platform WebView for Android, iOS, macOS, Linux, Windows, and Web, with unified controller support.

example/lib/main.dart

import 'dart:async';

import 'package:atomic_webview/atomic_webview.dart';
import 'package:flutter/material.dart';

void main(List<String> args) {
  if (runWebViewTitleBarWidget(args)) {
    return;
  }
  runApp(const AtomicWebViewExample());
}

class AtomicWebViewExample extends StatelessWidget {
  const AtomicWebViewExample({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: WebViewPage());
  }
}

class WebViewPage extends StatefulWidget {
  const WebViewPage({super.key});

  @override
  State<WebViewPage> createState() => _WebViewPageState();
}

class _WebViewPageState extends State<WebViewPage> {
  late final WebViewController _controller;
  String? _error;

  @override
  void initState() {
    super.initState();
    _controller = WebViewController(
      onLoadError: (error) {
        if (mounted) {
          setState(() => _error = error.description);
        }
      },
    );
    WidgetsBinding.instance.addPostFrameCallback((_) => _initialize());
  }

  Future<void> _initialize() async {
    try {
      await _controller.init(
        context: context,
        setState: setState,
        uri: Uri.parse('https://flutter.dev'),
      );
    } on Object catch (error) {
      if (mounted) {
        setState(() => _error = error.toString());
      }
    }
  }

  @override
  void dispose() {
    unawaited(_controller.dispose());
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Atomic Webview'),
        actions: [
          IconButton(
            tooltip: 'Back',
            onPressed: _controller.is_init ? _controller.goBack : null,
            icon: const Icon(Icons.arrow_back),
          ),
          IconButton(
            tooltip: 'Forward',
            onPressed: _controller.is_init ? _controller.goForward : null,
            icon: const Icon(Icons.arrow_forward),
          ),
          IconButton(
            tooltip: 'Reload',
            onPressed: _controller.is_init ? _controller.reload : null,
            icon: const Icon(Icons.refresh),
          ),
          IconButton(
            tooltip: 'Load bundled HTML',
            onPressed: _controller.is_init
                ? () => _controller.loadAsset('assets/example.html')
                : null,
            icon: const Icon(Icons.folder_open),
          ),
        ],
      ),
      body: _error == null
          ? WebView(controller: _controller)
          : Center(child: SelectableText(_error!)),
    );
  }
}
8
likes
150
points
202
downloads

Documentation

API reference

Publisher

verified publisherworkforceanalytics.co.za

Weekly Downloads

A cross-platform WebView for Android, iOS, macOS, Linux, Windows, and Web, with unified controller support.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, path, universal_io, webview_flutter, webview_flutter_web, webview_flutter_wkwebview

More

Packages that depend on atomic_webview

Packages that implement atomic_webview