diff --git a/lib/controllers/client_controller.dart b/lib/controllers/client_controller.dart index 066c618..71fc0ee 100644 --- a/lib/controllers/client_controller.dart +++ b/lib/controllers/client_controller.dart @@ -1,33 +1,33 @@ -import "dart:io"; +// import "dart:io"; -import "package:matrix/matrix.dart"; -import "package:nexusbot/controllers/settings_controller.dart"; -import "package:riverpod/riverpod.dart"; -import "package:sqflite_common_ffi/sqflite_ffi.dart"; +// import "package:matrix/matrix.dart"; +// import "package:nexusbot/controllers/settings_controller.dart"; +// import "package:riverpod/riverpod.dart"; +// import "package:sqflite_common_ffi/sqflite_ffi.dart"; -class ClientController extends AsyncNotifier { - @override - Future build() async { - final settings = ref.watch(SettingsController.provider)!; - final client = Client( - "nexusbot", - database: await MatrixSdkDatabase.init( - "NexusBot", - database: await databaseFactoryFfi.openDatabase(inMemoryDatabasePath), - ), - ); +// class ClientController extends AsyncNotifier { +// @override +// Future build() async { +// final settings = ref.watch(SettingsController.provider)!; +// final client = Client( +// "nexusbot", +// database: await MatrixSdkDatabase.init( +// "NexusBot", +// database: await databaseFactoryFfi.openDatabase(inMemoryDatabasePath), +// ), +// ); - await client.checkHomeserver(settings.homeserver); - await client.login( - LoginType.mLoginPassword, - identifier: AuthenticationUserIdentifier(user: settings.name), - password: (await File(settings.botPasswordFile).readAsString()).trim(), - ); +// await client.checkHomeserver(settings.homeserver); +// await client.login( +// LoginType.mLoginPassword, +// identifier: AuthenticationUserIdentifier(user: settings.name), +// password: (await File(settings.botPasswordFile).readAsString()).trim(), +// ); - return client; - } +// return client; +// } - static final provider = AsyncNotifierProvider( - ClientController.new, - ); -} +// static final provider = AsyncNotifierProvider( +// ClientController.new, +// ); +// } diff --git a/lib/helpers/launch_helper.dart b/lib/helpers/launch_helper.dart new file mode 100644 index 0000000..215433a --- /dev/null +++ b/lib/helpers/launch_helper.dart @@ -0,0 +1,23 @@ +import "package:flutter/services.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:url_launcher/url_launcher.dart" as ul; + +class LaunchHelper { + final Ref ref; + LaunchHelper(this.ref); + + Future launchUrl(Uri url, {bool useWebview = false}) async { + try { + await ul.launchUrl( + url, + mode: useWebview + ? ul.LaunchMode.inAppBrowserView + : ul.LaunchMode.externalApplication, + ); + } on PlatformException catch (_) { + // Ignore missing intent handler error + } + } + + static final provider = Provider(LaunchHelper.new); +} diff --git a/lib/widgets/room_chat.dart b/lib/widgets/room_chat.dart index 926fae3..fc836d9 100644 --- a/lib/widgets/room_chat.dart +++ b/lib/widgets/room_chat.dart @@ -7,6 +7,7 @@ import "package:flyer_chat_system_message/flyer_chat_system_message.dart"; import "package:flyer_chat_text_message/flyer_chat_text_message.dart"; import "package:hooks_riverpod/hooks_riverpod.dart"; import "package:nexus/controllers/room_chat_controller.dart"; +import "package:nexus/helpers/launch_helper.dart"; class RoomChat extends HookConsumerWidget { const RoomChat({super.key}); @@ -42,7 +43,11 @@ class RoomChat extends HookConsumerWidget { ), ), index: index, + onLinkTap: (url, _) => + ref.watch(LaunchHelper.provider).launchUrl(Uri.parse(url)), linksDecoration: TextDecoration.underline, + sentLinksColor: Colors.blue, + receivedLinksColor: Colors.blue, ), linkPreviewBuilder: (_, message, isSentByMe) { return LinkPreview(