git-touch-android-ios-app/lib/providers/user.dart

64 lines
1.2 KiB
Dart

import 'dart:async';
import 'package:flutter/widgets.dart';
import 'package:rxdart/subjects.dart';
import 'package:rxdart/rxdart.dart';
import 'package:git_touch/utils/utils.dart';
Future queryUser(String login) async {
var data = await query('''
{
user(login: "$login") {
name
avatarUrl
bio
email
repositories {
totalCount
}
starredRepositories {
totalCount
}
followers {
totalCount
}
following {
totalCount
}
}
}
''');
return data['user'];
}
class UserBloc {
Map<String, dynamic> _userDict = {};
final _user = BehaviorSubject(seedValue: null);
fetchUser(String login) async {
var user = await queryUser(login);
_userDict[login] = user;
return user;
}
UserBloc() {}
}
class UserProvider extends InheritedWidget {
final UserBloc bloc;
UserProvider({
Key key,
Widget child,
@required UserBloc bloc,
}) : bloc = bloc,
super(key: key, child: child);
@override
bool updateShouldNotify(InheritedWidget oldWidget) => true;
static UserBloc of(BuildContext context) =>
(context.inheritFromWidgetOfExactType(UserProvider) as UserProvider).bloc;
}