Hooked up the new task screen with the bloc to allow for the creatin of a new task

This commit is contained in:
Mariano Uvalle 2019-04-01 01:33:12 -06:00
parent 41298ae655
commit 4e355d7817
2 changed files with 84 additions and 37 deletions

View file

@ -3,16 +3,20 @@ import 'dart:async';
import 'package:rxdart/rxdart.dart';
import '../models/task_model.dart';
import '../models/user_model.dart';
import '../resources/authService.dart';
import '../resources/firestore_provider.dart';
class NewTaskBloc {
final AuthService _auth = authService;
FirebaseUser currentUser;
final FirestoreProvider _firestore = firestoreProvider;
final _user = BehaviorSubject<UserModel>();
String text;
TaskPriority priority;
String event;
String text = '';
TaskPriority priority = TaskPriority.high;
String event = '';
Observable<UserModel> get userModelStream => _user.stream;
NewTaskBloc() {
setCurrentUser();
@ -26,8 +30,24 @@ class NewTaskBloc {
priority = newPriority;
}
void setEvent(String newEvent) {
event = newEvent;
}
Future<void> submit() {
final newTask = TaskModel(
text: text,
priority: priority,
event: event,
ownerUsername: _user.value.username,
done: false,
);
return _firestore.addTask(newTask);
}
Future<void> setCurrentUser() async {
final user = await _auth.currentUser;
currentUser = user;
final userModel = await _firestore.getUser(username: user.email);
_user.add(userModel);
}
}

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import '../blocs/new_task_bloc.dart';
import '../models/user_model.dart';
import '../widgets/custom_app_bar.dart';
import '../widgets/custom_dropdown.dart';
import '../widgets/big_text_input.dart';
@ -25,13 +26,23 @@ class _NewTaskScreenState extends State<NewTaskScreen> {
);
final NewTaskBloc bloc = NewTaskBloc();
String dropdownValue;
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
title: 'Add task',
),
body: Padding(
body: StreamBuilder(
stream: bloc.userModelStream,
builder: (BuildContext context, AsyncSnapshot<UserModel> snap) {
List<String> events = [];
if (snap.hasData) {
events = snap.data.events;
}
return Padding(
padding: const EdgeInsets.only(top: 15.0, left: 20.0, right: 20.0),
child: Column(
children: <Widget>[
@ -42,7 +53,7 @@ class _NewTaskScreenState extends State<NewTaskScreen> {
SizedBox(
height: 15,
),
buildDropdownSection(),
buildDropdownSection(events),
SizedBox(
height: 15,
),
@ -54,6 +65,7 @@ class _NewTaskScreenState extends State<NewTaskScreen> {
height: 40,
width: 330,
radius: 8,
onTap: () => onSubmit(context, bloc),
child: Text(
'Submit',
style: kButtonStyle,
@ -61,11 +73,13 @@ class _NewTaskScreenState extends State<NewTaskScreen> {
),
],
),
);
},
),
);
}
Widget buildDropdownSection() {
Widget buildDropdownSection(List<String> events) {
return Row(
children: <Widget>[
Text(
@ -74,10 +88,11 @@ class _NewTaskScreenState extends State<NewTaskScreen> {
),
Spacer(),
CustomDropdownButton(
value: dropdownValue,
onChanged: (String value) => onDropdownChanged(bloc, value),
width: 230,
hint: Text('Event'),
onChanged: (item) {},
items: ['Math', 'Lenguajes', 'Redes'].map((String name) {
items: events.map((String name) {
return CustomDropdownMenuItem(
value: name,
child: Text(
@ -106,4 +121,16 @@ class _NewTaskScreenState extends State<NewTaskScreen> {
],
);
}
void onDropdownChanged(NewTaskBloc bloc, String newValue) {
bloc.setEvent(newValue);
setState(() {
dropdownValue = newValue;
});
}
void onSubmit(BuildContext context, NewTaskBloc bloc) async {
await bloc.submit();
Navigator.of(context).pop();
}
}