Changed the dropdown in the new image screen to listend to a string for its value
This commit is contained in:
parent
caee24297b
commit
73809d9eed
2 changed files with 26 additions and 30 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,10 +107,13 @@ class _NewImageScreenState extends State<NewImageScreen> {
|
|||
events = snap.data.events;
|
||||
}
|
||||
|
||||
return StreamBuilder(
|
||||
stream: bloc.eventName,
|
||||
builder: (BuildContext context, AsyncSnapshot<String> snap) {
|
||||
return CustomDropdownButton(
|
||||
isExpanded: true,
|
||||
value: dropdownValue,
|
||||
onChanged: (String value) => onDropdownChanged(value),
|
||||
value: snap.data,
|
||||
onChanged: bloc.changeEventName,
|
||||
hint: Text('Event'),
|
||||
items: events.map((String event) {
|
||||
return CustomDropdownMenuItem(
|
||||
|
|
@ -124,19 +126,14 @@ class _NewImageScreenState extends State<NewImageScreen> {
|
|||
}).toList(),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
void onDropdownChanged(String value) {
|
||||
bloc.setEvent(value);
|
||||
setState(() {
|
||||
dropdownValue = value;
|
||||
});
|
||||
}
|
||||
|
||||
void onSubmit() async {
|
||||
await bloc.submit();
|
||||
Navigator.of(context).pop();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue