1
0
mirror of https://github.com/git-touch/git-touch synced 2025-02-01 08:26:53 +01:00

refactor: handle global url

This commit is contained in:
Rongjian Zhang 2019-12-26 14:10:52 +08:00
parent 1ef1a5182e
commit 785c4368b6
2 changed files with 25 additions and 36 deletions

View File

@ -7,25 +7,16 @@ class Link extends StatelessWidget {
final Widget child;
final String url;
final Function onTap;
final VoidCallback onLongPress;
Link({
this.child,
this.url,
this.onTap,
this.onLongPress,
});
void _onTap(BuildContext context) {
if (onTap != null) {
return onTap();
}
Provider.of<ThemeModel>(context).push(context, url);
}
@override
Widget build(BuildContext context) {
final theme = Provider.of<ThemeModel>(context).theme;
final theme = Provider.of<ThemeModel>(context);
return Material(
child: Ink(
@ -33,9 +24,13 @@ class Link extends StatelessWidget {
child: InkWell(
child: child,
splashColor:
theme == AppThemeType.cupertino ? Colors.transparent : null,
onTap: () => _onTap(context),
onLongPress: onLongPress,
theme.theme == AppThemeType.cupertino ? Colors.transparent : null,
onTap: () async {
if (onTap != null) {
await onTap();
}
theme.push(context, url);
},
),
),
);

View File

@ -2,7 +2,6 @@ import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/models/notification.dart';
import 'package:git_touch/models/theme.dart';
import 'package:git_touch/widgets/issue_icon.dart';
import '../utils/utils.dart';
import 'package:git_touch/models/auth.dart';
@ -93,31 +92,26 @@ class _NotificationItemState extends State<NotificationItem> {
}
}
String get _url {
switch (payload.type) {
case 'Issue':
case 'PullRequest':
final resource = payload.type == 'PullRequest' ? 'pulls' : 'issues';
return '/${payload.owner}/${payload.name}/$resource/${payload.number}';
case 'Release':
return 'https://github.com/${payload.owner}/${payload.name}/releases/tag/${payload.title}';
case 'Commit':
return '';
default:
return null;
}
}
@override
Widget build(BuildContext context) {
return Link(
onTap: () {
_markAsRead();
switch (payload.type) {
case 'Issue':
case 'PullRequest':
final resource = payload.type == 'PullRequest' ? 'pulls' : 'issues';
Provider.of<ThemeModel>(context).push(context,
'/${payload.owner}/${payload.name}/$resource/${payload.number}');
break;
case 'Release':
launchUrl(
'https://github.com/${payload.owner}/${payload.name}/releases/tag/${payload.title}');
break;
case 'Commit':
// TODO:
// onTap = () {
// launch('urlString');
// };
break;
}
},
url: _url,
onTap: _markAsRead,
child: Opacity(
opacity: payload.unread ? 1 : 0.5,
child: Container(