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> { 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 settings = SettingsProvider.of(context);
var login = settings.activeLogin; var login = settings.activeLogin;
List data = await settings.getWithCredentials( List data = await settings.getWithCredentials(
'/users/$login/received_events?page=$page&per_page=$pageSize'); '/users/$login/received_events?page=$page&per_page=$pageSize');
// print(data); // print(data);
return data.map<Event>((item) => Event.fromJSON(item)).toList(); return data
.map<EventPayload>((item) => EventPayload.fromJson(item))
.toList();
} }
@override @override

View File

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

View File

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

View File

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