offline_webview 1.0.1 copy "offline_webview: ^1.0.1" to clipboard
offline_webview: ^1.0.1 copied to clipboard

A lightweight high-performance Flutter SDK for offline web package loading. Features: offline package management, URL matching, flow pipeline, WebView integration, monitoring and reporting. Supports i [...]

example/lib/main.dart

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:offline_webview/offline_webview.dart';

import 'config.dart';
import 'local_server.dart';
import 'pages/home_page.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 启动本地服务器并等待其就绪
  await startLocalServer();

  // 构建带预下载的配置
  final config = OfflineConfigBuilder()
      .isOpen(true)
      .addPreDownload(AppConfig.testBisName)
      .build();

  // 构建参数
  final params = OfflineParams()
      .config(config)
      .isDebug(true)
      .logBlock((level, message) {
        debugPrint(message);
      })
      .reportBlock((event, bisName, params) {
        debugPrint('[OffWeb|Report] event=$event bisName=$bisName params=$params');
      })
      .monitorBlock((type, data) {
        debugPrint('[OffWeb|Monitor] type=$type data=$data');
      })
      .requestServer(LocalServerRequest());

  // 初始化 SDK
  await OfflineWebClient.init(params);

  runApp(const DemoApp());
}

/// 自定义的 IOfflineRequest 实现,调用本地服务器.
class LocalServerRequest extends IOfflineRequest {
  @override
  void requestPackageInfo(
    String bisName,
    String version,
    RequestCallback<OfflinePackageInfo> callback,
  ) async {
    try {
      final url = Uri.parse(AppConfig.queryUrl).replace(
        queryParameters: {'bisName': bisName, 'offlineZipVer': version},
      );

      final response = await http.get(url);

      if (response.statusCode == 200) {
        final json = jsonDecode(response.body) as Map<String, dynamic>;
        final packageInfo = OfflinePackageInfo.fromJson(json);
        callback.onSuccess(packageInfo);
      } else {
        callback.onFail(
          Exception(
            'Server returned status ${response.statusCode}: ${response.body}',
          ),
        );
      }
    } catch (e) {
      callback.onFail(e);
    }
  }
}

/// 根应用组件.
class DemoApp extends StatelessWidget {
  const DemoApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'OfflineWebView Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
        useMaterial3: true,
      ),
      home: OfflineWebViewPreWarmer(
        child: const HomePage(),
      ),
    );
  }
}
1
likes
0
points
21
downloads

Publisher

unverified uploader

Weekly Downloads

A lightweight high-performance Flutter SDK for offline web package loading. Features: offline package management, URL matching, flow pipeline, WebView integration, monitoring and reporting. Supports iOS WKWebView and Android WebView.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

archive, flutter, flutter_inappwebview, http, mime, path, path_provider

More

Packages that depend on offline_webview