baseline for handling a lot of stuff
This commit is contained in:
parent
c5e90346fe
commit
83f4f61952
|
@ -1,6 +1,72 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart' as ul;
|
import 'package:url_launcher/url_launcher.dart' as ul;
|
||||||
|
|
||||||
Future<void> urlLauncher(String url) async {
|
import 'stores/accounts_store.dart';
|
||||||
|
|
||||||
|
Future<void> urlLauncher(BuildContext c, String url) async {
|
||||||
|
final instances = c.read<AccountsStore>().users.keys.toList();
|
||||||
|
print(instances);
|
||||||
|
|
||||||
|
// CHECK IF LINK TO USER
|
||||||
|
|
||||||
|
// TODO: link to user
|
||||||
|
|
||||||
|
// CHECK IF LINK TO COMMUNITY
|
||||||
|
|
||||||
|
// TODO; link to community
|
||||||
|
|
||||||
|
// CHECK IF REDIRECTS TO A PAGE ON ONE OF ADDED INSTANCES
|
||||||
|
|
||||||
|
final instanceRegex = RegExp(r'^(?:https?:\/\/)?([\w\.-]+)(.+)$');
|
||||||
|
final match = instanceRegex.firstMatch(url);
|
||||||
|
|
||||||
|
final matchedDomain = match.group(1);
|
||||||
|
final rest = match.group(2);
|
||||||
|
|
||||||
|
print('matched domain: $matchedDomain, rest: $rest');
|
||||||
|
print(rest.length);
|
||||||
|
|
||||||
|
if (instances.any((e) => e == match.group(1))) {
|
||||||
|
switch (rest.split('/')[1]) {
|
||||||
|
case 'c':
|
||||||
|
print('comunity');
|
||||||
|
return;
|
||||||
|
case 'u':
|
||||||
|
print('user');
|
||||||
|
return;
|
||||||
|
case 'post':
|
||||||
|
print('post');
|
||||||
|
return;
|
||||||
|
case 'pictrs':
|
||||||
|
print('pictures');
|
||||||
|
return;
|
||||||
|
case 'communities':
|
||||||
|
print('communities');
|
||||||
|
return;
|
||||||
|
case 'modlog':
|
||||||
|
print('modlog');
|
||||||
|
return;
|
||||||
|
case 'inbox':
|
||||||
|
print('inbox');
|
||||||
|
return;
|
||||||
|
case 'create_post':
|
||||||
|
case 'create_community':
|
||||||
|
case 'sponsors':
|
||||||
|
case 'instances':
|
||||||
|
case 'docs':
|
||||||
|
openInBrowser(url);
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// REGULAR LINK STUFF
|
||||||
|
|
||||||
|
openInBrowser(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
void openInBrowser(String url) async {
|
||||||
if (await ul.canLaunch(url)) {
|
if (await ul.canLaunch(url)) {
|
||||||
await ul.launch(url);
|
await ul.launch(url);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -14,7 +14,7 @@ class MarkdownText extends StatelessWidget {
|
||||||
data: text,
|
data: text,
|
||||||
extensionSet: md.ExtensionSet.gitHubWeb,
|
extensionSet: md.ExtensionSet.gitHubWeb,
|
||||||
onTapLink: (href) {
|
onTapLink: (href) {
|
||||||
urlLauncher(href)
|
urlLauncher(context, href)
|
||||||
.catchError((e) => Scaffold.of(context).showSnackBar(SnackBar(
|
.catchError((e) => Scaffold.of(context).showSnackBar(SnackBar(
|
||||||
content: Row(
|
content: Row(
|
||||||
children: [
|
children: [
|
||||||
|
|
|
@ -40,8 +40,6 @@ class Post extends StatelessWidget {
|
||||||
|
|
||||||
// == ACTIONS ==
|
// == ACTIONS ==
|
||||||
|
|
||||||
void _openLink() => urlLauncher(post.url);
|
|
||||||
|
|
||||||
void _openFullImage() {
|
void _openFullImage() {
|
||||||
// TODO: fullscreen media view
|
// TODO: fullscreen media view
|
||||||
print('OPEN FULL IMAGE');
|
print('OPEN FULL IMAGE');
|
||||||
|
@ -146,6 +144,7 @@ class Post extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
void _openLink() => urlLauncher(context, post.url);
|
||||||
|
|
||||||
final urlDomain = () {
|
final urlDomain = () {
|
||||||
if (post.url == null) return null;
|
if (post.url == null) return null;
|
||||||
|
|
Loading…
Reference in New Issue