Added missing comments for the snackbar code, extracted snackbar related code from the screens constructors to a method

This commit is contained in:
Mariano Uvalle 2019-04-24 15:20:55 -05:00
parent 10aabed07e
commit 6abfc0beac
4 changed files with 38 additions and 23 deletions

View file

@ -22,11 +22,17 @@ mixin UploadStatusMixin {
/// An observable of the status of files being uploaded. /// An observable of the status of files being uploaded.
Observable<UploadStatus> get uploadStatus => uploadStatusSer.status; Observable<UploadStatus> get uploadStatus => uploadStatusSer.status;
/// Disposes instance variables that are part of the mixin.
Future<void> disposeUploadStatusMixin() async { Future<void> disposeUploadStatusMixin() async {
await snackBarStatusSubject.drain(); await snackBarStatusSubject.drain();
snackBarStatusSubject.close(); 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() { void initializeSnackBarStatus() {
uploadStatusService.status uploadStatusService.status
.transform(StreamTransformer<UploadStatus, bool>.fromHandlers( .transform(StreamTransformer<UploadStatus, bool>.fromHandlers(

View file

@ -41,6 +41,7 @@ class _EventScreenState extends State<EventScreen>
/// Needed for showing snackbars. /// Needed for showing snackbars.
BuildContext _scaffoldContext; BuildContext _scaffoldContext;
/// A stream subscription to the snackbar status.
StreamSubscription _snackBarStatusSubscription; StreamSubscription _snackBarStatusSubscription;
initState() { initState() {
@ -49,17 +50,7 @@ class _EventScreenState extends State<EventScreen>
bloc.fetchTasks(); bloc.fetchTasks();
bloc.fetchImagesPaths(); bloc.fetchImagesPaths();
_tabController = TabController(vsync: this, length: 2); _tabController = TabController(vsync: this, length: 2);
_snackBarStatusSubscription = bloc.snackBarStatus.listen((bool visible) { initializeSnackBarListener();
if (visible) {
showUploadStatusSnackBar(
_scaffoldContext,
bloc.uploadStatus,
bloc.updateSnackBarStatus,
);
} else {
Scaffold.of(_scaffoldContext).hideCurrentSnackBar();
}
});
} }
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -204,6 +195,20 @@ class _EventScreenState extends State<EventScreen>
); );
} }
void initializeSnackBarListener() {
_snackBarStatusSubscription = bloc.snackBarStatus.listen((bool visible) {
if (visible) {
showUploadStatusSnackBar(
_scaffoldContext,
bloc.uploadStatus,
bloc.updateSnackBarStatus,
);
} else {
Scaffold.of(_scaffoldContext).hideCurrentSnackBar();
}
});
}
void dispose() { void dispose() {
_snackBarStatusSubscription.cancel(); _snackBarStatusSubscription.cancel();
bloc.dispose(); bloc.dispose();

View file

@ -28,23 +28,14 @@ class _HomeScreenState extends State<HomeScreen> {
/// Needed for showing snackbars. /// Needed for showing snackbars.
BuildContext _scaffoldContext; BuildContext _scaffoldContext;
/// A stream subscription to the snackbar status.
StreamSubscription _snackBarStatusSubscription; StreamSubscription _snackBarStatusSubscription;
@override @override
initState() { initState() {
super.initState(); super.initState();
bloc.fetchTasks(); bloc.fetchTasks();
_snackBarStatusSubscription = bloc.snackBarStatus.listen((bool visible) { initializeSnackBarListener();
if (visible) {
showUploadStatusSnackBar(
_scaffoldContext,
bloc.uploadStatus,
bloc.updateSnackBarStatus,
);
} else {
Scaffold.of(_scaffoldContext).hideCurrentSnackBar();
}
});
} }
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -138,6 +129,20 @@ class _HomeScreenState extends State<HomeScreen> {
); );
} }
void initializeSnackBarListener() {
_snackBarStatusSubscription = bloc.snackBarStatus.listen((bool visible) {
if (visible) {
showUploadStatusSnackBar(
_scaffoldContext,
bloc.uploadStatus,
bloc.updateSnackBarStatus,
);
} else {
Scaffold.of(_scaffoldContext).hideCurrentSnackBar();
}
});
}
@override @override
void dispose() { void dispose() {
_snackBarStatusSubscription.cancel(); _snackBarStatusSubscription.cancel();

View file

@ -1,5 +1,4 @@
import 'dart:async'; import 'dart:async';
import 'dart:collection';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';