diff --git a/lib/main.dart b/lib/main.dart index 71dafd1..b50f81e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,6 +9,7 @@ import 'screens/me.dart'; import 'screens/login.dart'; import 'screens/pull_request.dart'; import 'screens/issue.dart'; +import 'screens/repos.dart'; class Home extends StatefulWidget { @override @@ -62,6 +63,7 @@ class _HomeState extends State { _buildScreen(int index) { // return IssueScreen(number: 29, owner: 'reactjs', name: 'rfcs'); + // return ReposScreen('pd4d10'); switch (index) { case 0: return NewsScreen(); diff --git a/lib/screens/repos.dart b/lib/screens/repos.dart index c73f9d0..c80a5e0 100644 --- a/lib/screens/repos.dart +++ b/lib/screens/repos.dart @@ -1,14 +1,55 @@ import 'package:flutter/material.dart'; +import '../scaffolds/list.dart'; +import '../providers/settings.dart'; +import '../utils/utils.dart'; +import '../widgets/repo_item.dart'; /// Repos of user class ReposScreen extends StatefulWidget { + final String login; + + ReposScreen(this.login); + @override _ReposScreenState createState() => _ReposScreenState(); } class _ReposScreenState extends State { + get login => widget.login; + + Future _queryRepos([String cursor]) async { + var cursorChunk = cursor == null ? '' : ', after: "$cursor"'; + var data = await SettingsProvider.of(context).query(''' +{ + user(login: "$login") { + repositories(first: $pageSize$cursorChunk, orderBy: {field: UPDATED_AT, direction: DESC}) { + pageInfo { + hasNextPage + endCursor + } + nodes { + $repoChunk + } + } + } +} + '''); + var repo = data["user"]["repositories"]; + + return ListPayload( + cursor: repo["pageInfo"]["endCursor"], + items: repo["nodes"], + end: repo['pageInfo']['hasNextPage'], + ); + } + @override Widget build(BuildContext context) { - return Container(); + return ListScaffold( + title: Text('$login\'s repositories'), + onRefresh: () => _queryRepos(), + onLoadMore: (cursor) => _queryRepos(cursor), + itemBuilder: (payload) => RepoItem(payload), + ); } } diff --git a/lib/screens/user.dart b/lib/screens/user.dart index 998adc4..eb9f49e 100644 --- a/lib/screens/user.dart +++ b/lib/screens/user.dart @@ -13,26 +13,6 @@ import '../screens/users.dart'; import '../screens/settings.dart'; import '../utils/utils.dart'; -var repoChunk = ''' -owner { - login -} -name -description -isPrivate -isFork -stargazers { - totalCount -} -forks { - totalCount -} -primaryLanguage { - color - name -} -'''; - class UserScreen extends StatefulWidget { final String login; final bool showSettings; @@ -205,12 +185,12 @@ class _UserScreenState extends State { EntryItem( count: payload['repositories']['totalCount'], text: 'Repositories', - screenBuilder: (context) => ReposScreen(), + screenBuilder: (context) => ReposScreen(widget.login), ), EntryItem( count: payload['starredRepositories']['totalCount'], text: 'Stars', - screenBuilder: (context) => ReposScreen(), + screenBuilder: (context) => ReposScreen(widget.login), ), EntryItem( count: payload['followers']['totalCount'], diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 10d6c3a..c2a197d 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -155,7 +155,7 @@ class Palette { static const gray = Color(0xff959da5); } -final pageSize = 5; +final pageSize = 20; final graphqlChunk1 = ''' title @@ -316,3 +316,23 @@ var createWarning = (String text) => Text(text, style: TextStyle(color: Colors.redAccent)); var warningSpan = TextSpan(text: 'xxx', style: TextStyle(color: Colors.redAccent)); + +var repoChunk = ''' +owner { + login +} +name +description +isPrivate +isFork +stargazers { + totalCount +} +forks { + totalCount +} +primaryLanguage { + color + name +} +''';