diff --git a/lib/screens/repo.dart b/lib/screens/repo.dart index 349bc93..847afa7 100644 --- a/lib/screens/repo.dart +++ b/lib/screens/repo.dart @@ -16,21 +16,15 @@ import '../screens/issues.dart'; import '../screens/user.dart'; import '../screens/organization.dart'; import '../widgets/action.dart'; -import '../utils/utils.dart'; -class RepoScreen extends StatefulWidget { +class RepoScreen extends StatelessWidget { final String owner; final String name; RepoScreen(this.owner, this.name); - - @override - _RepoScreenState createState() => _RepoScreenState(); -} - -class _RepoScreenState extends State { - String get owner => widget.owner; - String get name => widget.name; + RepoScreen.fromFullName(String fullName) + : owner = fullName.split('/')[0], + name = fullName.split('/')[1]; Future queryRepo(BuildContext context) async { var data = await Provider.of(context).query(''' @@ -83,8 +77,6 @@ class _RepoScreenState extends State { } Future fetchReadme(BuildContext context) async { - var owner = widget.owner; - var name = widget.name; var data = await Provider.of(context) .getWithCredentials('/repos/$owner/$name/readme'); @@ -100,7 +92,7 @@ class _RepoScreenState extends State { @override Widget build(BuildContext context) { return RefreshScaffold( - title: Text(widget.owner + '/' + widget.name), + title: Text(owner + '/' + name), trailingBuilder: (data) { var payload = data[0]; @@ -180,33 +172,25 @@ class _RepoScreenState extends State { EntryItem( count: payload['issues']['totalCount'], text: 'Issues', - screenBuilder: (context) => IssuesScreen( - owner: widget.owner, - name: widget.name, - ), + screenBuilder: (context) => + IssuesScreen(owner: owner, name: name), ), EntryItem( count: payload['pullRequests']['totalCount'], text: 'Pull Requests', screenBuilder: (context) => IssuesScreen( - owner: widget.owner, - name: widget.name, - isPullRequest: true, - ), + owner: owner, name: name, isPullRequest: true), ), EntryItem( text: 'Files', - screenBuilder: (context) => ObjectScreen( - owner: widget.owner, - name: widget.name, - ), + screenBuilder: (context) => + ObjectScreen(owner: owner, name: name), ), EntryItem( count: payload['defaultBranchRef']['target']['history'] ['totalCount'], text: 'Commits', - screenBuilder: (context) => - CommitsScreen(widget.owner, widget.name), + screenBuilder: (context) => CommitsScreen(owner, name), ), ], ), diff --git a/lib/widgets/event_item.dart b/lib/widgets/event_item.dart index 1bdfd92..75ff21e 100644 --- a/lib/widgets/event_item.dart +++ b/lib/widgets/event_item.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; -import 'package:url_launcher/url_launcher.dart'; +import 'package:git_touch/screens/repo.dart'; import 'package:timeago/timeago.dart' as timeago; import 'package:primer/primer.dart'; import '../screens/issue.dart'; @@ -59,6 +59,7 @@ class EventItem extends StatelessWidget { Widget detailWidget, IconData iconData = Octicons.octoface, WidgetBuilder screenBuilder, + String url, }) { if (detailWidget == null && detail != null) { detailWidget = @@ -67,6 +68,7 @@ class EventItem extends StatelessWidget { return Link( screenBuilder: screenBuilder, + url: url, child: Container( padding: EdgeInsets.all(10), child: Column( @@ -84,7 +86,7 @@ class EventItem extends StatelessWidget { Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: join(SizedBox(height: 6), [ + children: join(SizedBox(height: 8), [ RichText( text: TextSpan( style: TextStyle( @@ -170,6 +172,9 @@ class EventItem extends StatelessWidget { _buildRepo(context), ], iconData: Octicons.repo_forked, + screenBuilder: (_) => RepoScreen( + event.payload['forkee']['owner']['login'], + event.payload['forkee']['name']), ); case 'ForkApplyEvent': case 'GitHubAppAuthorizationEvent': @@ -298,40 +303,36 @@ class EventItem extends StatelessWidget { _buildRepo(context) ], iconData: Octicons.repo_push, - detailWidget: Link( - onTap: () { - launch('https://github.com/' + - event.repoFullName + - '/compare/' + - event.payload['before'] + - '...' + - event.payload['head']); - }, - child: Column( - children: commits.map((commit) { - return Row(children: [ - Text( - (commit['sha'] as String).substring(0, 7), - style: TextStyle( - color: PrimerColors.blue500, - fontSize: 13, - fontFamily: 'Menlo', - fontFamilyFallback: ['Menlo', 'Roboto Mono'], - ), + detailWidget: Column( + children: commits.map((commit) { + return Row(children: [ + Text( + (commit['sha'] as String).substring(0, 7), + style: TextStyle( + color: PrimerColors.blue500, + fontSize: 13, + fontFamily: 'Menlo', + fontFamilyFallback: ['Menlo', 'Roboto Mono'], ), - SizedBox(width: 6), - Expanded( - child: Text( - commit['message'], - style: TextStyle(color: Colors.black54, fontSize: 14), - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - ) - ]); - }).toList(), - ), + ), + SizedBox(width: 6), + Expanded( + child: Text( + commit['message'], + style: TextStyle(color: Colors.black54, fontSize: 14), + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ) + ]); + }).toList(), ), + url: 'https://github.com/' + + event.repoFullName + + '/compare/' + + event.payload['before'] + + '...' + + event.payload['head'], ); case 'ReleaseEvent': case 'RepositoryEvent': @@ -348,6 +349,7 @@ class EventItem extends StatelessWidget { context: context, spans: [TextSpan(text: ' starred '), _buildRepo(context)], iconData: Octicons.star, + screenBuilder: (_) => RepoScreen.fromFullName(event.repoFullName), ); default: return defaultItem;