refactor: launch url

This commit is contained in:
Rongjian Zhang 2019-09-29 13:32:53 +08:00
parent 3506609024
commit 2ce2384578
8 changed files with 24 additions and 21 deletions

View File

@ -237,7 +237,7 @@ class AuthModel with ChangeNotifier {
void redirectToGithubOauth() {
_oauthState = nanoid();
var scope = Uri.encodeComponent('user,repo,read:org');
launch(
launchUrl(
'https://github.com/login/oauth/authorize?client_id=$clientId&redirect_uri=gittouch://login&scope=$scope&state=$_oauthState',
);
}

View File

@ -4,7 +4,6 @@ import 'package:git_touch/models/auth.dart';
import 'package:primer/primer.dart';
import 'package:provider/provider.dart';
import 'package:share/share.dart';
import 'package:url_launcher/url_launcher.dart';
import '../utils/utils.dart';
import '../scaffolds/long_list.dart';
import '../widgets/timeline_item.dart';
@ -354,7 +353,7 @@ mutation {
MyAction(
text: 'Open in Browser',
onPress: () {
launch(payload['url']);
launchUrl(payload['url']);
},
),
],

View File

@ -8,7 +8,6 @@ import 'package:git_touch/widgets/entry_item.dart';
import 'package:git_touch/widgets/repository_item.dart';
import 'package:git_touch/widgets/table_view.dart';
import 'package:git_touch/widgets/user_item.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:share/share.dart';
import 'package:git_touch/models/auth.dart';
import 'package:provider/provider.dart';
@ -107,7 +106,7 @@ class OrganizationScreen extends StatelessWidget {
text: 'Open in Browser',
onPress: () {
if (payload != null) {
launch(payload['url']);
launchUrl(payload['url']);
}
},
),
@ -147,7 +146,7 @@ class OrganizationScreen extends StatelessWidget {
leftIconData: Octicons.location,
text: Text(payload['location']),
onTap: () {
launch('https://www.google.com/maps/place/' +
launchUrl('https://www.google.com/maps/place/' +
(payload['location'] as String)
.replaceAll(RegExp(r'\s+'), ''));
},
@ -157,7 +156,7 @@ class OrganizationScreen extends StatelessWidget {
leftIconData: Octicons.mail,
text: Text(payload['email']),
onTap: () {
launch('mailto:' + payload['email']);
launchUrl('mailto:' + payload['email']);
},
),
if (isNotNullOrEmpty(payload['websiteUrl']))
@ -169,7 +168,7 @@ class OrganizationScreen extends StatelessWidget {
if (!url.startsWith('http')) {
url = 'http://$url';
}
launch(url);
launchUrl(url);
},
),
],

View File

@ -14,7 +14,6 @@ import 'package:git_touch/models/theme.dart';
import 'package:git_touch/screens/commits.dart';
import 'package:git_touch/screens/object.dart';
import 'package:share/share.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:git_touch/widgets/repository_item.dart';
import '../widgets/entry_item.dart';
import '../screens/issues.dart';
@ -213,7 +212,7 @@ class RepositoryScreen extends StatelessWidget {
text: 'Open in Browser',
onPress: () {
if (data != null) {
launch(data[0]['url']);
launchUrl(data[0]['url']);
}
},
),

View File

@ -9,14 +9,12 @@ import 'package:git_touch/widgets/table_view.dart';
import 'package:git_touch/widgets/text_contains_organization.dart';
import 'package:git_touch/widgets/user_item.dart';
import 'package:primer/primer.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:share/share.dart';
import 'package:github_contributions/github_contributions.dart';
import 'package:git_touch/models/auth.dart';
import 'package:provider/provider.dart';
import '../widgets/entry_item.dart';
import 'package:git_touch/widgets/repository_item.dart';
import '../widgets/link.dart';
import '../widgets/action.dart';
import '../screens/users.dart';
import '../screens/settings.dart';
@ -191,7 +189,7 @@ class UserScreen extends StatelessWidget {
text: 'Open in Browser',
onPress: () {
if (data[0] != null) {
launch(data[0]['url']);
launchUrl(data[0]['url']);
}
},
),
@ -252,7 +250,7 @@ class UserScreen extends StatelessWidget {
leftIconData: Octicons.location,
text: Text(payload['location']),
onTap: () {
launch('https://www.google.com/maps/place/' +
launchUrl('https://www.google.com/maps/place/' +
(payload['location'] as String)
.replaceAll(RegExp(r'\s+'), ''));
},
@ -262,7 +260,7 @@ class UserScreen extends StatelessWidget {
leftIconData: Octicons.mail,
text: Text(payload['email']),
onTap: () {
launch('mailto:' + payload['email']);
launchUrl('mailto:' + payload['email']);
},
),
if (isNotNullOrEmpty(payload['websiteUrl']))
@ -274,7 +272,7 @@ class UserScreen extends StatelessWidget {
if (!url.startsWith('http')) {
url = 'http://$url';
}
launch(url);
launchUrl(url);
},
),
],

View File

@ -184,3 +184,13 @@ class PrimerBranchName extends StatelessWidget {
);
}
}
launchUrl(String url) async {
if (url == null) return;
if (await canLaunch(url)) {
await launch(url);
} else {
// TODO: fallback
}
}

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/utils/utils.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:git_touch/models/theme.dart';
class Link extends StatelessWidget {
@ -27,7 +27,7 @@ class Link extends StatelessWidget {
return Provider.of<ThemeModel>(context).pushRoute(context, screenBuilder);
}
if (url != null) {
launch(url);
launchUrl(url);
}
}

View File

@ -3,10 +3,8 @@ import 'package:flutter/cupertino.dart';
import 'package:git_touch/models/notification.dart';
import 'package:git_touch/models/theme.dart';
import 'package:primer/primer.dart';
import 'package:url_launcher/url_launcher.dart';
import '../utils/utils.dart';
import '../screens/issue.dart';
// import '../screens/not_found.dart';
import 'package:git_touch/models/auth.dart';
import 'package:provider/provider.dart';
import 'link.dart';
@ -115,7 +113,7 @@ class _NotificationItemState extends State<NotificationItem> {
break;
case 'Release':
launch(
launchUrl(
'https://github.com/${payload.owner}/${payload.name}/releases/tag/${payload.title}');
break;
case 'Commit':