import 'dart:async'; import 'package:flutter/widgets.dart'; import 'package:rxdart/subjects.dart'; import 'package:rxdart/rxdart.dart'; import '../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 _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; }