feat: custom event payload type

This commit is contained in:
Rongjian Zhang 2019-02-10 12:54:48 +08:00
parent 55356315c4
commit 6aa65b857f
4 changed files with 36 additions and 13 deletions

View File

@ -11,13 +11,15 @@ class NewsScreen extends StatefulWidget {
}
class NewsScreenState extends State<NewsScreen> {
Future<List<Event>> fetchEvents(int page) async {
Future<List<EventPayload>> fetchEvents(int page) async {
var settings = SettingsProvider.of(context);
var login = settings.activeLogin;
List data = await settings.getWithCredentials(
'/users/$login/received_events?page=$page&per_page=$pageSize');
// print(data);
return data.map<Event>((item) => Event.fromJSON(item)).toList();
return data
.map<EventPayload>((item) => EventPayload.fromJson(item))
.toList();
}
@override

View File

@ -3,7 +3,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import '../providers/settings.dart';
import '../screens/repo.dart';
export 'package:github/server.dart';
export 'octicons.dart';
export 'timeago.dart';

View File

@ -3,25 +3,43 @@ import 'package:flutter/cupertino.dart';
import '../screens/issue.dart';
import '../screens/pull_request.dart';
import '../screens/user.dart';
// import 'link.dart';
import 'avatar.dart';
import '../utils/utils.dart';
class EventPayload {
String actorLogin;
String actorAvatarUrl;
String type;
String repoFullName;
Map<String, dynamic> payload;
EventPayload.fromJson(input) {
actorLogin = input['actor']['login'];
actorAvatarUrl = input['actor']['avatar_url'];
type = input['type'];
payload = input['payload'];
repoFullName = input['repo']['name'];
}
}
class EventItem extends StatelessWidget {
final Event event;
final EventPayload event;
EventItem(this.event);
TextSpan _buildRepo(BuildContext context) {
String name = event.repo.name;
String name = event.repoFullName;
var arr = name.split('/');
return createRepoLinkSpan(context, arr[0], arr[1]);
}
TextSpan _buildIssue(BuildContext context) {
int id = event.payload['issue']['number'];
return createLinkSpan(context, '#' + id.toString(),
() => IssueScreen.fromFullName(number: id, fullName: event.repo.name));
return createLinkSpan(
context,
'#' + id.toString(),
() =>
IssueScreen.fromFullName(number: id, fullName: event.repoFullName));
}
TextSpan _buildPullRequest(BuildContext context, int number) {
@ -29,7 +47,7 @@ class EventItem extends StatelessWidget {
context,
'#' + number.toString(),
() => PullRequestScreen.fromFullName(
number: number, fullName: event.repo.name),
number: number, fullName: event.repoFullName),
);
}
@ -41,7 +59,7 @@ class EventItem extends StatelessWidget {
}) {
var _spans = [
createLinkSpan(
context, event.actor.login, () => UserScreen(event.actor.login))
context, event.actorLogin, () => UserScreen(event.actorLogin))
];
_spans.addAll(spans);
@ -52,7 +70,7 @@ class EventItem extends StatelessWidget {
children: <Widget>[
Row(
children: <Widget>[
Avatar(login: event.actor.login, url: event.actor.avatarUrl),
Avatar(login: event.actorLogin, url: event.actorAvatarUrl),
Padding(padding: EdgeInsets.only(left: 10)),
Expanded(
child: RichText(
@ -92,7 +110,12 @@ class EventItem extends StatelessWidget {
build(BuildContext context) {
var defaultItem = _buildItem(
context: context,
spans: [TextSpan(text: ' This is a ' + event.type)],
spans: [
TextSpan(
text: ' ' + event.type,
style: TextStyle(color: Colors.blueAccent),
)
],
iconData: Octicons.octoface,
detail: 'Woops, ${event.type} not implemented yet',
);

View File

@ -18,7 +18,6 @@ dependencies:
http: ^0.11.3
rxdart: ^0.20.0
uri: ^0.11.3
github: ^4.1.0
intl: ^0.15.7
url_launcher: ^4.2.0
uni_links: ^0.1.4