From 7b40cbf65fdf0df8272eead7ae342aad93f03006 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Thu, 26 Dec 2019 20:55:56 +0100 Subject: [PATCH] SyncButton: Disable if no connectivity --- lib/widgets/sync_button.dart | 35 ++++++++++++++++++++++++++++++++++- pubspec.lock | 7 +++++++ pubspec.yaml | 1 + 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/widgets/sync_button.dart b/lib/widgets/sync_button.dart index fa8c80cb..f5dcf950 100644 --- a/lib/widgets/sync_button.dart +++ b/lib/widgets/sync_button.dart @@ -1,7 +1,10 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; +import 'package:connectivity/connectivity.dart'; + import 'package:git_bindings/git_bindings.dart'; import 'package:gitjournal/appstate.dart'; - import 'package:gitjournal/utils.dart'; import 'package:gitjournal/state_container.dart'; @@ -11,14 +14,44 @@ class SyncButton extends StatefulWidget { } class _SyncButtonState extends State { + StreamSubscription subscription; + ConnectivityResult _connectivity; + + @override + void initState() { + super.initState(); + subscription = Connectivity() + .onConnectivityChanged + .listen((ConnectivityResult result) { + setState(() { + _connectivity = result; + }); + }); + } + + @override + void dispose() { + subscription.cancel(); + super.dispose(); + } + @override Widget build(BuildContext context) { final container = StateContainer.of(context); final appState = container.appState; + if (_connectivity == ConnectivityResult.none) { + return IconButton( + icon: Icon(Icons.signal_wifi_off), + onPressed: () async { + _syncRepo(); + }, + ); + } if (appState.syncStatus == SyncStatus.Loading) { return RotatingIcon(); } + return IconButton( icon: Icon(_syncStatusIcon()), onPressed: () async { diff --git a/pubspec.lock b/pubspec.lock index 705e0ba8..0d39748d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -71,6 +71,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.14.11" + connectivity: + dependency: "direct main" + description: + name: connectivity + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.6+1" convert: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index c628a3f8..9778a8b9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -33,6 +33,7 @@ dependencies: git_bindings: ^0.0.6 fetch_app_logs: ^0.0.2 flutter_runtime_env: ^0.0.1 + connectivity: ^0.4.6+1 dev_dependencies: flutter_launcher_icons: "^0.7.2"