搜索插件、代码仓与 APP 分类

flutter_offline 封面
插件详情v6.0.0

flutter_offline

一个整洁的工具,可像老板一样处理离线/在线连接。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
5500
喜欢数
680
Pub 分数
140

安装插件

flutter pub add flutter_offline

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

flutter_offline 是一个轻量且直观的包,可简化 Flutter 应用程序中的网络连接状态监控。它提供实时在线和离线状态检测,使开发者能够构建响应式 UI,无缝适应不断变化的网络状况。通过最少的设置和跨平台的一致行为,它确保在 Android、iOS、Web、macOS、Windows 和 Linux 上实现可靠的连接检查。该包可无缝集成到现有应用中,提供简洁的 API 来高效处理网络状态变化。

适合场景

  • 处理离线数据缓存
  • 显示网络状态指示器
  • 启用离线优先的应用体验
  • 在连接丢失期间优雅地管理API请求
  • 构建具有弹性的用户界面

主要特点

  • 实时在线/离线状态检测
  • 跨平台兼容性
  • 简单而干净的 API
  • 自动连接监控
  • 支持移动和桌面平台

适合对象

  • 需要强大网络感知能力的应用程序
  • 离线优先的应用程序开发
  • 面向用户的连接反馈
  • 依赖网络的业务逻辑
  • 寻求最小集成开销的开发人员

使用建议

  • 不自动处理重连重试
  • 需要手动实现重试策略
  • 仅限连接状态,不包括数据同步
  • 没有内置的离线数据持久化功能
  • 依赖于可能因平台而异的系统级网络API

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

✈️ Flutter Offline

Format, Analyze and Test codecov pub package

A tidy utility to handle offline/online connectivity like a Boss. It provides support for all platforms (iOS, Android, Web, macOS, Linux, and Windows).

🎖 Installing

dependencies:
  flutter_offline: "^6.0.0"
⚡️ Import
import 'package:flutter_offline/flutter_offline.dart';
✔ Add Permission to Manifest
<uses-permission android:name="android.permission.INTERNET"/>

🎮 How To Use

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

class DemoPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Offline Demo"),
      ),
      body: OfflineBuilder(
        connectivityBuilder: (
          BuildContext context,
          List<ConnectivityResult> connectivity,
          Widget child,
        ) {
          final bool connected = !connectivity.contains(ConnectivityResult.none);
          return new Stack(
            fit: StackFit.expand,
            children: [
              Positioned(
                height: 24.0,
                left: 0.0,
                right: 0.0,
                child: Container(
                  color: connected ? Color(0xFF00EE44) : Color(0xFFEE4400),
                  child: Center(
                    child: Text("${connected ? 'ONLINE' : 'OFFLINE'}"),
                  ),
                ),
              ),
              Center(
                child: new Text(
                  'Yay!',
                ),
              ),
            ],
          );
        },
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(
              'There are no bottons to push :)',
            ),
            new Text(
              'Just turn off your internet.',
            ),
          ],
        ),
      ),
    );
  }
}

For more info, please, refer to the main.dart in the example.

🔄 Retry Functionality

Manually retry connectivity checks with exponential backoff:

class MyWidget extends StatefulWidget {
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late final OfflineRetryController _retryController;

  @override
  void initState() {
    super.initState();
    _retryController = OfflineRetryController(
      maxRetries: 5,
      retryCooldown: const Duration(seconds: 2),
    );
    _retryController.addListener(() => setState(() {}));
  }

  @override
  void dispose() {
    _retryController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return OfflineBuilder(
      retryController: _retryController,
      connectivityBuilder: (context, connectivity, child) {
        final connected = !connectivity.contains(ConnectivityResult.none);
        return Column(
          children: [
            Text(connected ? 'ONLINE' : 'OFFLINE'),
            if (!connected)
              ElevatedButton(
                onPressed: _retryController.canRetry ? _retryController.retry : null,
                child: Text('Retry (${_retryController.retryCount}/5)'),
              ),
          ],
        );
      },
    );
  }
}
Custom Retry Logic

Override onRetry() or onRetryError() for custom behavior:

class CustomRetryController extends OfflineRetryController {
  CustomRetryController() : super(maxRetries: 3);

  @override
  Future<void> onRetry() async {
    print('Retrying connection...');
  }

  @override
  void onRetryError(Object error, StackTrace stackTrace) {
    print('Retry failed: $error');
  }
}

Features:

  • Exponential backoff (1s, 2s, 4s, 8s, 16s)
  • Configurable retry limits and cooldown
  • Auto-reset on reconnection
  • Extends ChangeNotifier for reactive UI updates

🧪 Testing

Run tests with:

flutter test

📷 Screenshots

🐛 Bugs/Requests

If you encounter any problems feel free to open an issue. If you feel the library is missing a feature, please raise a ticket on Github and I'll look into it. Pull request are also welcome.

❗️ Note

For help getting started with Flutter, view our online documentation.

For help on editing plugin code, view the documentation.

🤓 Mentions

Simon Lightfoot (@slightfoot) is just awesome 👍.

⭐️ License

MIT License

所属分类

依赖

依赖清单 2 项

源码仓库

使用此插件的项目

暂无相关数据。