[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-9386":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},9386,"flutter_offline","jogboms\u002Fflutter_offline","jogboms","✈️ A tidy utility to handle offline\u002Fonline connectivity like a Boss","",null,"Dart",1314,128,11,6,0,1,5,19.33,"MIT License",false,"master",[24,25,26,27,28,29,30,31,32,33],"android","connectivity","connectivity-manager","dart-library","dartlang","flutter","flutter-package","flutter-widget","ios","network","2026-06-12 02:02:06","# ✈️ Flutter Offline\n\n[![Format, Analyze and Test](https:\u002F\u002Fgithub.com\u002Fjogboms\u002Fflutter_offline\u002Factions\u002Fworkflows\u002Fmain.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fjogboms\u002Fflutter_offline\u002Factions\u002Fworkflows\u002Fmain.yml) [![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fjogboms\u002Fflutter_offline\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fjogboms\u002Fflutter_offline) [![pub package](https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fflutter_offline.svg)](https:\u002F\u002Fpub.dartlang.org\u002Fpackages\u002Fflutter_offline)\n\nA tidy utility to handle offline\u002Fonline connectivity like a Boss. It provides support for all platforms (iOS, Android, Web, macOS, Linux, and Windows).\n\n## 🎖 Installing\n\n```yaml\ndependencies:\n  flutter_offline: \"^6.0.0\"\n```\n\n### ⚡️ Import\n\n```dart\nimport 'package:flutter_offline\u002Fflutter_offline.dart';\n```\n\n### ✔ Add Permission to Manifest\n\n```dart\n\u003Cuses-permission android:name=\"android.permission.INTERNET\"\u002F>\n```\n\n## 🎮 How To Use\n\n```dart\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:flutter_offline\u002Fflutter_offline.dart';\n\nclass DemoPage extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return new Scaffold(\n      appBar: new AppBar(\n        title: new Text(\"Offline Demo\"),\n      ),\n      body: OfflineBuilder(\n        connectivityBuilder: (\n          BuildContext context,\n          List\u003CConnectivityResult> connectivity,\n          Widget child,\n        ) {\n          final bool connected = !connectivity.contains(ConnectivityResult.none);\n          return new Stack(\n            fit: StackFit.expand,\n            children: [\n              Positioned(\n                height: 24.0,\n                left: 0.0,\n                right: 0.0,\n                child: Container(\n                  color: connected ? Color(0xFF00EE44) : Color(0xFFEE4400),\n                  child: Center(\n                    child: Text(\"${connected ? 'ONLINE' : 'OFFLINE'}\"),\n                  ),\n                ),\n              ),\n              Center(\n                child: new Text(\n                  'Yay!',\n                ),\n              ),\n            ],\n          );\n        },\n        child: Column(\n          mainAxisAlignment: MainAxisAlignment.center,\n          children: \u003CWidget>[\n            new Text(\n              'There are no bottons to push :)',\n            ),\n            new Text(\n              'Just turn off your internet.',\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n```\n\nFor more info, please, refer to the `main.dart` in the example.\n\n## 🔄 Retry Functionality\n\nManually retry connectivity checks with exponential backoff:\n\n```dart\nclass MyWidget extends StatefulWidget {\n  @override\n  State\u003CMyWidget> createState() => _MyWidgetState();\n}\n\nclass _MyWidgetState extends State\u003CMyWidget> {\n  late final OfflineRetryController _retryController;\n\n  @override\n  void initState() {\n    super.initState();\n    _retryController = OfflineRetryController(\n      maxRetries: 5,\n      retryCooldown: const Duration(seconds: 2),\n    );\n    _retryController.addListener(() => setState(() {}));\n  }\n\n  @override\n  void dispose() {\n    _retryController.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return OfflineBuilder(\n      retryController: _retryController,\n      connectivityBuilder: (context, connectivity, child) {\n        final connected = !connectivity.contains(ConnectivityResult.none);\n        return Column(\n          children: [\n            Text(connected ? 'ONLINE' : 'OFFLINE'),\n            if (!connected)\n              ElevatedButton(\n                onPressed: _retryController.canRetry ? _retryController.retry : null,\n                child: Text('Retry (${_retryController.retryCount}\u002F5)'),\n              ),\n          ],\n        );\n      },\n    );\n  }\n}\n```\n\n### Custom Retry Logic\n\nOverride `onRetry()` or `onRetryError()` for custom behavior:\n\n```dart\nclass CustomRetryController extends OfflineRetryController {\n  CustomRetryController() : super(maxRetries: 3);\n\n  @override\n  Future\u003Cvoid> onRetry() async {\n    print('Retrying connection...');\n  }\n\n  @override\n  void onRetryError(Object error, StackTrace stackTrace) {\n    print('Retry failed: $error');\n  }\n}\n```\n\n**Features:**\n- Exponential backoff (1s, 2s, 4s, 8s, 16s)\n- Configurable retry limits and cooldown\n- Auto-reset on reconnection\n- Extends `ChangeNotifier` for reactive UI updates\n\n## 🧪 Testing\n\nRun tests with:\n```bash\nflutter test\n```\n\n## 📷 Screenshots\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fjogboms\u002Fflutter_offline\u002Fmaster\u002Fscreenshots\u002Fdemo_1.gif\" width=\"250px\">\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fjogboms\u002Fflutter_offline\u002Fmaster\u002Fscreenshots\u002Fdemo_2.gif\" width=\"250px\">\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fjogboms\u002Fflutter_offline\u002Fmaster\u002Fscreenshots\u002Fdemo_3.gif\" width=\"250px\">\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## 🐛 Bugs\u002FRequests\n\nIf you encounter any problems feel free to open an issue. If you feel the library is\nmissing a feature, please raise a ticket on Github and I'll look into it.\nPull request are also welcome.\n\n### ❗️ Note\n\nFor help getting started with Flutter, view our online\n[documentation](https:\u002F\u002Fflutter.io\u002F).\n\nFor help on editing plugin code, view the [documentation](https:\u002F\u002Fflutter.io\u002Fplatform-plugins\u002F#edit-code).\n\n### 🤓 Mentions\n\nSimon Lightfoot ([@slightfoot](https:\u002F\u002Fgithub.com\u002Fslightfoot)) is just awesome 👍.\n\n## ⭐️ License\n\nMIT License\n","flutter_offline 是一个用于处理应用在线\u002F离线连接状态的 Flutter 插件。它支持包括 iOS、Android、Web、macOS、Linux 和 Windows 在内的所有平台，能够帮助开发者轻松实现网络连接状态检测，并提供相应的UI反馈。通过简单的配置和代码集成，用户可以利用 OfflineBuilder 等组件来构建响应式界面，当设备从离线转为在线或反之亦然时自动更新显示内容。此外，该库还提供了重试机制，允许以指数退避方式自动尝试重新连接。此项目非常适合需要在网络条件变化时保持良好用户体验的应用场景，如移动应用程序、桌面客户端等。",2,"2026-06-11 03:22:25","top_language"]