From 73809d9eed928d30a5641edf3756557d0a88219b Mon Sep 17 00:00:00 2001 From: AYM1607 Date: Thu, 4 Apr 2019 02:31:16 -0600 Subject: [PATCH] Changed the dropdown in the new image screen to listend to a string for its value --- lib/src/blocs/new_image_bloc.dart | 15 +++++----- lib/src/screens/new_image_screen.dart | 41 +++++++++++++-------------- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/lib/src/blocs/new_image_bloc.dart b/lib/src/blocs/new_image_bloc.dart index 7b09795..0574e9c 100644 --- a/lib/src/blocs/new_image_bloc.dart +++ b/lib/src/blocs/new_image_bloc.dart @@ -17,8 +17,7 @@ class NewImageBloc { final FirebaseStorageProvider _storage = storageProvider; final _picture = BehaviorSubject(); final _user = BehaviorSubject(); - - String eventName; + final _eventName = BehaviorSubject(); NewImageBloc() { setCurrentUser(); @@ -27,9 +26,11 @@ class NewImageBloc { //Stream getters. Observable get picture => _picture.stream; Observable get userModelStream => _user.stream; + Observable get eventName => _eventName.stream; //Sink getters. - Function(File) get addPicture => _picture.sink.add; + Function(File) get changePicture => _picture.sink.add; + Function(String) get changeEventName => _eventName.sink.add; Future setCurrentUser() async { final user = await _auth.currentUser; @@ -37,22 +38,20 @@ class NewImageBloc { _user.add(userModel); } - void setEvent(String newEventName) { - eventName = newEventName; - } - Future submit() async { final user = _user.value; final StorageUploadTask uploadTask = _storage.uploadFile(_picture.value, folder: '${user.id}/'); final storageSnapshot = await uploadTask.onComplete; final imagePath = storageSnapshot.ref.path; - EventModel event = await _firestore.getEvent(user.id, eventName: eventName); + EventModel event = + await _firestore.getEvent(user.id, eventName: _eventName.value); final newMediaList = List.from(event.media)..add(imagePath); await _firestore.updateEvent(user.id, event.id, media: newMediaList); } void dispose() { + _eventName.close(); _picture.close(); } } diff --git a/lib/src/screens/new_image_screen.dart b/lib/src/screens/new_image_screen.dart index 388b718..586fcbb 100644 --- a/lib/src/screens/new_image_screen.dart +++ b/lib/src/screens/new_image_screen.dart @@ -18,7 +18,6 @@ class NewImageScreen extends StatefulWidget { class _NewImageScreenState extends State { final NewImageBloc bloc = NewImageBloc(); - String dropdownValue; Widget build(BuildContext context) { return Scaffold( @@ -86,7 +85,7 @@ class _NewImageScreenState extends State { final File imgFile = await ImagePicker.pickImage( source: ImageSource.camera, ); - bloc.addPicture(imgFile); + bloc.changePicture(imgFile); } Widget buildEventSection(NewImageBloc bloc) { @@ -108,20 +107,25 @@ class _NewImageScreenState extends State { events = snap.data.events; } - return CustomDropdownButton( - isExpanded: true, - value: dropdownValue, - onChanged: (String value) => onDropdownChanged(value), - hint: Text('Event'), - items: events.map((String event) { - return CustomDropdownMenuItem( - value: event, - child: Text( - event, - style: TextStyle(color: Colors.white), - ), + return StreamBuilder( + stream: bloc.eventName, + builder: (BuildContext context, AsyncSnapshot snap) { + return CustomDropdownButton( + isExpanded: true, + value: snap.data, + onChanged: bloc.changeEventName, + hint: Text('Event'), + items: events.map((String event) { + return CustomDropdownMenuItem( + value: event, + child: Text( + event, + style: TextStyle(color: Colors.white), + ), + ); + }).toList(), ); - }).toList(), + }, ); }, ), @@ -130,13 +134,6 @@ class _NewImageScreenState extends State { ); } - void onDropdownChanged(String value) { - bloc.setEvent(value); - setState(() { - dropdownValue = value; - }); - } - void onSubmit() async { await bloc.submit(); Navigator.of(context).pop();