123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- import 'dart:async';
- import 'dart:developer';
- import 'package:flutter/material.dart';
- import 'package:photos/core/event_bus.dart';
- import 'package:photos/events/photo_upload_event.dart';
- import 'package:photos/photo_sync_manager.dart';
- import 'package:pull_to_refresh/pull_to_refresh.dart';
- class SyncIndicator extends StatefulWidget {
- final RefreshController refreshController;
- const SyncIndicator(this.refreshController, {Key key}) : super(key: key);
- @override
- _SyncIndicatorState createState() => _SyncIndicatorState();
- }
- class _SyncIndicatorState extends State<SyncIndicator> {
- PhotoUploadEvent _event;
- StreamSubscription<PhotoUploadEvent> _subscription;
- String _completeText = "Sync completed.";
- @override
- void initState() {
- _subscription = Bus.instance.on<PhotoUploadEvent>().listen((event) {
- setState(() {
- _event = event;
- });
- });
- super.initState();
- }
- @override
- void dispose() {
- _subscription.cancel();
- super.dispose();
- }
- @override
- Widget build(BuildContext context) {
- return ClassicHeader(
- idleText: "Pull down to sync.",
- refreshingText: _getRefreshingText(),
- releaseText: "Release to sync.",
- completeText: _completeText,
- failedText: "Sync unsuccessful.",
- completeDuration: const Duration(milliseconds: 1000),
- refreshStyle: RefreshStyle.UnFollow,
- refreshingIcon: Container(
- width: 24,
- height: 24,
- child: GestureDetector(
- onTap: () {
- AlertDialog alert = AlertDialog(
- title: Text("Pause?"),
- content: Text(
- "Are you sure that you want to pause backing up your memories?"),
- actions: [
- FlatButton(
- child: Text("NO"),
- onPressed: () {
- Navigator.of(context).pop();
- },
- ),
- FlatButton(
- child: Text("YES"),
- onPressed: () {
- Navigator.of(context).pop();
- PhotoSyncManager.instance.stopSync();
- _completeText = "Sync stopped.";
- setState(() {});
- widget.refreshController.refreshCompleted();
- },
- ),
- ],
- );
- showDialog(
- context: context,
- builder: (BuildContext context) {
- return alert;
- },
- );
- },
- child: Stack(
- children: [
- Icon(
- Icons.pause_circle_outline,
- size: 24,
- color: Colors.pink,
- ),
- CircularProgressIndicator(strokeWidth: 2),
- ],
- ),
- ),
- ),
- );
- }
- String _getRefreshingText() {
- if (_event == null) {
- return "Syncing...";
- } else {
- var s;
- if (_event.hasError) {
- widget.refreshController.refreshFailed();
- s = "Upload failed.";
- } else if (_event.wasStopped) {
- s = "Sync stopped.";
- } else {
- s = "Backing up " +
- _event.completed.toString() +
- "/" +
- _event.total.toString();
- }
- _event = null;
- return s;
- }
- }
- }
|