fix: event item tap screen

This commit is contained in:
Rongjian Zhang 2019-02-10 19:32:30 +08:00
parent ce11da379a
commit d476018092
3 changed files with 70 additions and 47 deletions

View File

@ -126,16 +126,16 @@ TextSpan createLinkSpan(BuildContext context, String text, Function handle) {
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
// decoration: TextDecoration.underline, // decoration: TextDecoration.underline,
), ),
recognizer: TapGestureRecognizer() // recognizer: TapGestureRecognizer()
..onTap = () { // ..onTap = () {
Navigator.of(context).push( // Navigator.of(context).push(
CupertinoPageRoute( // CupertinoPageRoute(
builder: (context) { // builder: (context) {
return handle(); // return handle();
}, // },
), // ),
); // );
}, // },
); );
} }

View File

@ -23,6 +23,7 @@ class Avatar extends StatelessWidget {
backgroundImage: NetworkImage(url), backgroundImage: NetworkImage(url),
radius: size, radius: size,
), ),
material: false,
); );
} }
} }

View File

@ -3,7 +3,9 @@ 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 '../screens/repo.dart';
import 'avatar.dart'; import 'avatar.dart';
import 'link.dart';
import '../utils/utils.dart'; import '../utils/utils.dart';
class EventPayload { class EventPayload {
@ -56,6 +58,7 @@ class EventItem extends StatelessWidget {
@required List<TextSpan> spans, @required List<TextSpan> spans,
String detail, String detail,
IconData iconData = Octicons.octoface, IconData iconData = Octicons.octoface,
WidgetBuilder screenBuilder,
}) { }) {
var _spans = [ var _spans = [
createLinkSpan( createLinkSpan(
@ -63,45 +66,48 @@ class EventItem extends StatelessWidget {
]; ];
_spans.addAll(spans); _spans.addAll(spans);
return Container( return Link(
padding: EdgeInsets.all(8), screenBuilder: screenBuilder,
child: Column( child: Container(
crossAxisAlignment: CrossAxisAlignment.start, padding: EdgeInsets.all(8),
children: <Widget>[ child: Column(
Row( crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Avatar(login: event.actorLogin, url: event.actorAvatarUrl), Row(
Padding(padding: EdgeInsets.only(left: 10)), children: <Widget>[
Expanded( Avatar(login: event.actorLogin, url: event.actorAvatarUrl),
child: RichText( Padding(padding: EdgeInsets.only(left: 10)),
text: TextSpan( Expanded(
style: TextStyle( child: RichText(
color: Colors.black, height: 1.3, fontSize: 15), text: TextSpan(
children: _spans, style: TextStyle(
), color: Colors.black, height: 1.3, fontSize: 15),
), children: _spans,
),
Padding(padding: EdgeInsets.only(left: 8)),
Icon(iconData, color: Colors.black45, size: 22),
],
),
detail == null
? Container()
: Container(
padding: EdgeInsets.only(left: 46, top: 6),
child: Text(
detail,
overflow: TextOverflow.ellipsis,
maxLines: 3,
style: TextStyle(
color: Colors.black87,
fontSize: 14,
height: 1.2,
fontWeight: FontWeight.w300,
), ),
), ),
) ),
], Padding(padding: EdgeInsets.only(left: 8)),
Icon(iconData, color: Colors.black45, size: 22),
],
),
detail == null
? Container()
: Container(
padding: EdgeInsets.only(left: 46, top: 6),
child: Text(
detail,
overflow: TextOverflow.ellipsis,
maxLines: 3,
style: TextStyle(
color: Colors.black87,
fontSize: 14,
height: 1.2,
fontWeight: FontWeight.w300,
),
),
)
],
),
), ),
); );
} }
@ -175,6 +181,10 @@ class EventItem extends StatelessWidget {
], ],
detail: event.payload['comment']['body'], detail: event.payload['comment']['body'],
iconData: Octicons.comment_discussion, iconData: Octicons.comment_discussion,
screenBuilder: (_) => IssueScreen.fromFullName(
number: event.payload['issue']['number'],
fullName: event.repoFullName,
),
); );
case 'IssuesEvent': case 'IssuesEvent':
return _buildItem( return _buildItem(
@ -187,6 +197,10 @@ class EventItem extends StatelessWidget {
], ],
iconData: Octicons.issue_opened, iconData: Octicons.issue_opened,
detail: event.payload['issue']['title'], detail: event.payload['issue']['title'],
screenBuilder: (_) => IssueScreen.fromFullName(
number: event.payload['issue']['number'],
fullName: event.repoFullName,
),
); );
case 'LabelEvent': case 'LabelEvent':
case 'MarketplacePurchaseEvent': case 'MarketplacePurchaseEvent':
@ -213,6 +227,10 @@ class EventItem extends StatelessWidget {
], ],
iconData: Octicons.git_pull_request, iconData: Octicons.git_pull_request,
detail: event.payload['pull_request']['title'], detail: event.payload['pull_request']['title'],
screenBuilder: (_) => PullRequestScreen.fromFullName(
number: event.payload['pull_request']['number'],
fullName: event.repoFullName,
),
); );
case 'PullRequestReviewEvent': case 'PullRequestReviewEvent':
// TODO: // TODO:
@ -227,6 +245,10 @@ class EventItem extends StatelessWidget {
_buildRepo(context), _buildRepo(context),
], ],
detail: event.payload['comment']['body'], detail: event.payload['comment']['body'],
screenBuilder: (_) => PullRequestScreen.fromFullName(
number: event.payload['pull_request']['number'],
fullName: event.repoFullName,
),
); );
case 'PushEvent': case 'PushEvent':
return _buildItem( return _buildItem(