feat(gh): add events screen

This commit is contained in:
Rongjian Zhang 2020-10-04 21:04:23 +08:00
parent 15ccf72a27
commit 5101b2554f
3 changed files with 53 additions and 3 deletions

View File

@ -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);
}

View File

@ -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<ListPayload<GithubEvent, int>> fetchEvents(BuildContext context,
[int page = 1]) async {
final events = await context.read<AuthModel>().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<GithubEvent, int>(
title: AppBarTitle('Events'),
itemBuilder: (payload) => EventItem(payload),
onRefresh: () => fetchEvents(context),
onLoadMore: (page) => fetchEvents(context, page),
);
}
}

View File

@ -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,