Changed the dropdown in the new image screen to listend to a string for its value

This commit is contained in:
Mariano Uvalle 2019-04-04 02:31:16 -06:00
parent caee24297b
commit 73809d9eed
2 changed files with 26 additions and 30 deletions

View file

@ -17,8 +17,7 @@ class NewImageBloc {
final FirebaseStorageProvider _storage = storageProvider;
final _picture = BehaviorSubject<File>();
final _user = BehaviorSubject<UserModel>();
String eventName;
final _eventName = BehaviorSubject<String>();
NewImageBloc() {
setCurrentUser();
@ -27,9 +26,11 @@ class NewImageBloc {
//Stream getters.
Observable<File> get picture => _picture.stream;
Observable<UserModel> get userModelStream => _user.stream;
Observable<String> 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<void> setCurrentUser() async {
final user = await _auth.currentUser;
@ -37,22 +38,20 @@ class NewImageBloc {
_user.add(userModel);
}
void setEvent(String newEventName) {
eventName = newEventName;
}
Future<void> 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<String>.from(event.media)..add(imagePath);
await _firestore.updateEvent(user.id, event.id, media: newMediaList);
}
void dispose() {
_eventName.close();
_picture.close();
}
}

View file

@ -18,7 +18,6 @@ class NewImageScreen extends StatefulWidget {
class _NewImageScreenState extends State<NewImageScreen> {
final NewImageBloc bloc = NewImageBloc();
String dropdownValue;
Widget build(BuildContext context) {
return Scaffold(
@ -86,7 +85,7 @@ class _NewImageScreenState extends State<NewImageScreen> {
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<NewImageScreen> {
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<String> 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<NewImageScreen> {
);
}
void onDropdownChanged(String value) {
bloc.setEvent(value);
setState(() {
dropdownValue = value;
});
}
void onSubmit() async {
await bloc.submit();
Navigator.of(context).pop();