From 5101b2554f0f8a6d5e5a1bfd0a6ff099eef619d4 Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Sun, 4 Oct 2020 21:04:23 +0800 Subject: [PATCH] feat(gh): add events screen --- lib/router.dart | 3 +++ lib/screens/gh_events.dart | 36 ++++++++++++++++++++++++++++++++++++ lib/screens/gh_user.dart | 17 ++++++++++++++--- 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 lib/screens/gh_events.dart diff --git a/lib/router.dart b/lib/router.dart index 091cca9..8d48d39 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -8,6 +8,7 @@ import 'package:git_touch/screens/bb_user.dart'; import 'package:git_touch/screens/code_theme.dart'; import 'package:git_touch/screens/gh_commits.dart'; import 'package:git_touch/screens/gh_contributors.dart'; +import 'package:git_touch/screens/gh_events.dart'; import 'package:git_touch/screens/gh_files.dart'; import 'package:git_touch/screens/gh_gists_files.dart'; import 'package:git_touch/screens/gh_org_repos.dart'; @@ -106,6 +107,8 @@ class GithubRouter { return GhUserOrganizationScreen(login); case 'gists': return GhGistsScreen(login); + case 'events': + return GhEventsScreen(login); default: return GhUserScreen(login); } diff --git a/lib/screens/gh_events.dart b/lib/screens/gh_events.dart new file mode 100644 index 0000000..84e9ebb --- /dev/null +++ b/lib/screens/gh_events.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:git_touch/models/github.dart'; +import 'package:git_touch/scaffolds/list_stateful.dart'; +import 'package:git_touch/utils/utils.dart'; +import 'package:git_touch/widgets/app_bar_title.dart'; +import 'package:provider/provider.dart'; +import 'package:git_touch/widgets/event_item.dart'; +import 'package:git_touch/models/auth.dart'; + +class GhEventsScreen extends StatelessWidget { + final String login; + GhEventsScreen(this.login); + + Future> fetchEvents(BuildContext context, + [int page = 1]) async { + final events = await context.read().ghClient.getJSON( + '/users/$login/events?page=$page&per_page=$pageSize', + convert: (vs) => [for (var v in vs) GithubEvent.fromJson(v)]); + return ListPayload( + cursor: page + 1, + hasMore: events.length == pageSize, + items: events, + ); + } + + @override + Widget build(context) { + return ListStatefulScaffold( + title: AppBarTitle('Events'), + itemBuilder: (payload) => EventItem(payload), + onRefresh: () => fetchEvents(context), + onLoadMore: (page) => fetchEvents(context, page), + ); + } +} diff --git a/lib/screens/gh_user.dart b/lib/screens/gh_user.dart index cd99b45..c956d65 100644 --- a/lib/screens/gh_user.dart +++ b/lib/screens/gh_user.dart @@ -149,9 +149,15 @@ class GhUserScreen extends StatelessWidget { hasIcon: true, items: [ TableViewItem( - leftIconData: Octicons.book, - text: Text('Gists'), - url: '/github/$login?tab=gists'), + leftIconData: Icons.rss_feed, + text: Text('Events'), + url: '/github/$login?tab=events', + ), + TableViewItem( + leftIconData: Octicons.book, + text: Text('Gists'), + url: '/github/$login?tab=gists', + ), TableViewItem( leftIconData: Octicons.home, text: Text('Organizations'), @@ -252,6 +258,11 @@ class GhUserScreen extends StatelessWidget { TableView( hasIcon: true, items: [ + TableViewItem( + leftIconData: Icons.rss_feed, + text: Text('Events'), + url: '/github/$login?tab=events', + ), if (isNotNullOrEmpty(p.location)) TableViewItem( leftIconData: Octicons.location,