2019-03-20 22:57:44 -06:00
|
|
|
import 'dart:async';
|
|
|
|
|
|
2019-03-09 20:34:09 -06:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
2019-03-11 23:55:02 -06:00
|
|
|
import '../models/task_model.dart';
|
2019-03-13 21:51:42 -06:00
|
|
|
import '../blocs/home_bloc.dart';
|
2019-03-20 22:57:44 -06:00
|
|
|
import '../widgets/home_app_bar.dart';
|
2019-03-11 23:38:00 -06:00
|
|
|
import '../widgets/task_list_tile.dart';
|
2019-03-12 21:23:35 -06:00
|
|
|
import '../widgets/loading_indicator.dart';
|
2019-03-09 21:47:04 -06:00
|
|
|
|
2019-03-13 21:51:42 -06:00
|
|
|
class HomeScreen extends StatefulWidget {
|
|
|
|
|
createState() => _HomeScreenState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _HomeScreenState extends State<HomeScreen> {
|
|
|
|
|
final HomeBloc bloc = HomeBloc();
|
2019-03-20 22:57:44 -06:00
|
|
|
String avatarUrl;
|
|
|
|
|
String userDisplayName;
|
2019-03-13 21:51:42 -06:00
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
initState() {
|
|
|
|
|
super.initState();
|
|
|
|
|
bloc.fetchTasks();
|
2019-03-20 22:57:44 -06:00
|
|
|
setUserAttributes();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> setUserAttributes() async {
|
|
|
|
|
final url = await bloc.getUserAvatarUrl();
|
|
|
|
|
final name = await bloc.getUserDisplayName();
|
|
|
|
|
setState(() {
|
|
|
|
|
avatarUrl = url;
|
|
|
|
|
userDisplayName = name;
|
|
|
|
|
});
|
2019-03-13 21:51:42 -06:00
|
|
|
}
|
2019-03-09 21:47:04 -06:00
|
|
|
|
2019-03-09 20:34:09 -06:00
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Scaffold(
|
2019-03-20 22:57:44 -06:00
|
|
|
appBar: HomeAppBar(
|
|
|
|
|
avatarUrl: avatarUrl,
|
|
|
|
|
subtitle: 'Hello $userDisplayName!',
|
2019-03-09 20:34:09 -06:00
|
|
|
),
|
2019-03-20 19:02:22 -06:00
|
|
|
body: StreamBuilder(
|
|
|
|
|
stream: bloc.userTasks,
|
|
|
|
|
builder: (BuildContext context, AsyncSnapshot<List<TaskModel>> snap) {
|
|
|
|
|
if (!snap.hasData) {
|
|
|
|
|
return Center(
|
|
|
|
|
child: LoadingIndicator(),
|
2019-03-12 21:23:35 -06:00
|
|
|
);
|
2019-03-20 19:02:22 -06:00
|
|
|
}
|
|
|
|
|
return ListView(
|
|
|
|
|
padding: EdgeInsets.zero,
|
|
|
|
|
children: snap.data
|
|
|
|
|
.map((task) => Container(
|
|
|
|
|
child: TaskListTile(
|
|
|
|
|
task: task,
|
|
|
|
|
onDone: () => bloc.markTaskAsDone(task),
|
|
|
|
|
),
|
|
|
|
|
padding: EdgeInsets.only(bottom: 12),
|
|
|
|
|
))
|
|
|
|
|
.toList(),
|
|
|
|
|
);
|
|
|
|
|
},
|
2019-03-12 21:23:35 -06:00
|
|
|
),
|
2019-03-09 20:34:09 -06:00
|
|
|
);
|
|
|
|
|
}
|
2019-03-13 21:51:42 -06:00
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void dispose() {
|
|
|
|
|
bloc.dispose();
|
|
|
|
|
super.dispose();
|
|
|
|
|
}
|
2019-03-09 20:34:09 -06:00
|
|
|
}
|