From 6abfc0beac1d3117f48b8b124ab3857a692d355f Mon Sep 17 00:00:00 2001 From: AYM1607 Date: Wed, 24 Apr 2019 15:20:55 -0500 Subject: [PATCH] Added missing comments for the snackbar code, extracted snackbar related code from the screens constructors to a method --- lib/src/mixins/upload_status_mixin.dart | 6 ++++++ lib/src/screens/event_screen.dart | 27 +++++++++++++++---------- lib/src/screens/home_screen.dart | 27 +++++++++++++++---------- lib/src/utils.dart | 1 - 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/lib/src/mixins/upload_status_mixin.dart b/lib/src/mixins/upload_status_mixin.dart index b60ac8b..0e902ba 100644 --- a/lib/src/mixins/upload_status_mixin.dart +++ b/lib/src/mixins/upload_status_mixin.dart @@ -22,11 +22,17 @@ mixin UploadStatusMixin { /// An observable of the status of files being uploaded. Observable get uploadStatus => uploadStatusSer.status; + /// Disposes instance variables that are part of the mixin. Future disposeUploadStatusMixin() async { await snackBarStatusSubject.drain(); snackBarStatusSubject.close(); } + /// Initializes the [snacBarStatusSubject]. + /// + /// The raw status coming from the [UploadStatusService] is transformed and + /// turned into a stream that emits [true] when the snackbar should be visible + /// and false otherwise. This is piped to [the snackBarStatusSubject]. void initializeSnackBarStatus() { uploadStatusService.status .transform(StreamTransformer.fromHandlers( diff --git a/lib/src/screens/event_screen.dart b/lib/src/screens/event_screen.dart index 88f32a2..a709430 100644 --- a/lib/src/screens/event_screen.dart +++ b/lib/src/screens/event_screen.dart @@ -41,6 +41,7 @@ class _EventScreenState extends State /// Needed for showing snackbars. BuildContext _scaffoldContext; + /// A stream subscription to the snackbar status. StreamSubscription _snackBarStatusSubscription; initState() { @@ -49,17 +50,7 @@ class _EventScreenState extends State bloc.fetchTasks(); bloc.fetchImagesPaths(); _tabController = TabController(vsync: this, length: 2); - _snackBarStatusSubscription = bloc.snackBarStatus.listen((bool visible) { - if (visible) { - showUploadStatusSnackBar( - _scaffoldContext, - bloc.uploadStatus, - bloc.updateSnackBarStatus, - ); - } else { - Scaffold.of(_scaffoldContext).hideCurrentSnackBar(); - } - }); + initializeSnackBarListener(); } Widget build(BuildContext context) { @@ -204,6 +195,20 @@ class _EventScreenState extends State ); } + void initializeSnackBarListener() { + _snackBarStatusSubscription = bloc.snackBarStatus.listen((bool visible) { + if (visible) { + showUploadStatusSnackBar( + _scaffoldContext, + bloc.uploadStatus, + bloc.updateSnackBarStatus, + ); + } else { + Scaffold.of(_scaffoldContext).hideCurrentSnackBar(); + } + }); + } + void dispose() { _snackBarStatusSubscription.cancel(); bloc.dispose(); diff --git a/lib/src/screens/home_screen.dart b/lib/src/screens/home_screen.dart index 38808c3..77b5c54 100644 --- a/lib/src/screens/home_screen.dart +++ b/lib/src/screens/home_screen.dart @@ -28,23 +28,14 @@ class _HomeScreenState extends State { /// Needed for showing snackbars. BuildContext _scaffoldContext; + /// A stream subscription to the snackbar status. StreamSubscription _snackBarStatusSubscription; @override initState() { super.initState(); bloc.fetchTasks(); - _snackBarStatusSubscription = bloc.snackBarStatus.listen((bool visible) { - if (visible) { - showUploadStatusSnackBar( - _scaffoldContext, - bloc.uploadStatus, - bloc.updateSnackBarStatus, - ); - } else { - Scaffold.of(_scaffoldContext).hideCurrentSnackBar(); - } - }); + initializeSnackBarListener(); } Widget build(BuildContext context) { @@ -138,6 +129,20 @@ class _HomeScreenState extends State { ); } + void initializeSnackBarListener() { + _snackBarStatusSubscription = bloc.snackBarStatus.listen((bool visible) { + if (visible) { + showUploadStatusSnackBar( + _scaffoldContext, + bloc.uploadStatus, + bloc.updateSnackBarStatus, + ); + } else { + Scaffold.of(_scaffoldContext).hideCurrentSnackBar(); + } + }); + } + @override void dispose() { _snackBarStatusSubscription.cancel(); diff --git a/lib/src/utils.dart b/lib/src/utils.dart index c106b54..59b4c6f 100644 --- a/lib/src/utils.dart +++ b/lib/src/utils.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:collection'; import 'package:flutter/material.dart'; import 'package:rxdart/rxdart.dart';