1
0
mirror of https://github.com/git-touch/git-touch synced 2025-03-25 15:40:09 +01:00

feat(bb): commits screen

This commit is contained in:
Rongjian Zhang 2020-02-03 14:40:56 +08:00
parent 8f9ed5469d
commit f856a1bfee
5 changed files with 107 additions and 1 deletions

View File

@ -74,3 +74,23 @@ class BbTree {
BbTree();
factory BbTree.fromJson(Map<String, dynamic> json) => _$BbTreeFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class BbCommit {
String message;
DateTime date;
String hash;
BbCommitAuthor author;
BbCommit();
factory BbCommit.fromJson(Map<String, dynamic> json) =>
_$BbCommitFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class BbCommitAuthor {
String raw;
BbRepoOwner user;
BbCommitAuthor();
factory BbCommitAuthor.fromJson(Map<String, dynamic> json) =>
_$BbCommitAuthorFromJson(json);
}

View File

@ -132,3 +132,35 @@ Map<String, dynamic> _$BbTreeToJson(BbTree instance) => <String, dynamic>{
'size': instance.size,
'links': instance.links,
};
BbCommit _$BbCommitFromJson(Map<String, dynamic> json) {
return BbCommit()
..message = json['message'] as String
..date =
json['date'] == null ? null : DateTime.parse(json['date'] as String)
..hash = json['hash'] as String
..author = json['author'] == null
? null
: BbCommitAuthor.fromJson(json['author'] as Map<String, dynamic>);
}
Map<String, dynamic> _$BbCommitToJson(BbCommit instance) => <String, dynamic>{
'message': instance.message,
'date': instance.date?.toIso8601String(),
'hash': instance.hash,
'author': instance.author,
};
BbCommitAuthor _$BbCommitAuthorFromJson(Map<String, dynamic> json) {
return BbCommitAuthor()
..raw = json['raw'] as String
..user = json['user'] == null
? null
: BbRepoOwner.fromJson(json['user'] as Map<String, dynamic>);
}
Map<String, dynamic> _$BbCommitAuthorToJson(BbCommitAuthor instance) =>
<String, dynamic>{
'raw': instance.raw,
'user': instance.user,
};

View File

@ -1,4 +1,5 @@
import 'package:fluro/fluro.dart';
import 'package:git_touch/screens/bb_commits.dart';
import 'package:git_touch/screens/bb_object.dart';
import 'package:git_touch/screens/bb_repo.dart';
import 'package:git_touch/screens/bb_user.dart';
@ -242,6 +243,7 @@ class BitbucketRouter {
BitbucketRouter.user,
BitbucketRouter.repo,
BitbucketRouter.object,
BitbucketRouter.commits,
];
static final user = RouterScreen(
'/:login',
@ -261,4 +263,8 @@ class BitbucketRouter {
path: params['path']?.first,
),
);
static final commits = RouterScreen(
'/:owner/:name/commits/:ref',
(_, p) =>
BbCommitsScreen(p['owner'].first, p['name'].first, p['ref'].first));
}

View File

@ -0,0 +1,48 @@
import 'package:flutter/material.dart';
import 'package:git_touch/models/auth.dart';
import 'package:git_touch/models/bitbucket.dart';
import 'package:git_touch/scaffolds/list_stateful.dart';
import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:git_touch/widgets/commit_item.dart';
import 'package:git_touch/widgets/user_item.dart';
import 'package:provider/provider.dart';
import 'package:timeago/timeago.dart' as timeago;
class BbCommitsScreen extends StatelessWidget {
final String owner;
final String name;
final String ref;
BbCommitsScreen(this.owner, this.name, this.ref);
Future<ListPayload<BbCommit, String>> _query(BuildContext context,
[String nextUrl]) async {
final auth = Provider.of<AuthModel>(context);
final res = await auth
.fetchBbWithPage(nextUrl ?? '/repositories/$owner/$name/commits/$ref');
return ListPayload(
cursor: res.cursor,
hasMore: res.hasMore,
items: <BbCommit>[
for (var v in res.data) BbCommit.fromJson(v),
],
);
}
@override
Widget build(BuildContext context) {
return ListStatefulScaffold<BbCommit, String>(
title: AppBarTitle('Commits'),
onRefresh: () => _query(context),
onLoadMore: (page) => _query(context, page),
itemBuilder: (v) {
return CommitItem(
url: '/bitbucket/$owner/$name/commits/$ref',
avatarUrl: v.author.user?.avatarUrl,
author: v.author.raw.replaceFirst(RegExp(r' <.*>'), ''),
createdAt: v.date,
message: v.message,
);
},
);
}
}

View File

@ -60,7 +60,7 @@ class BbRepoScreen extends StatelessWidget {
TableViewItem(
leftIconData: Octicons.history,
text: Text('Commits'),
url: '/bitbucket/$owner/$name/commits',
url: '/bitbucket/$owner/$name/commits/${p.mainbranch.name}',
),
],
),