url launch support
This commit is contained in:
parent
40bad1e06e
commit
dca9ee1939
3 changed files with 56 additions and 28 deletions
|
|
@ -1,33 +1,33 @@
|
||||||
import "dart:io";
|
// import "dart:io";
|
||||||
|
|
||||||
import "package:matrix/matrix.dart";
|
// import "package:matrix/matrix.dart";
|
||||||
import "package:nexusbot/controllers/settings_controller.dart";
|
// import "package:nexusbot/controllers/settings_controller.dart";
|
||||||
import "package:riverpod/riverpod.dart";
|
// import "package:riverpod/riverpod.dart";
|
||||||
import "package:sqflite_common_ffi/sqflite_ffi.dart";
|
// import "package:sqflite_common_ffi/sqflite_ffi.dart";
|
||||||
|
|
||||||
class ClientController extends AsyncNotifier<Client> {
|
// class ClientController extends AsyncNotifier<Client> {
|
||||||
@override
|
// @override
|
||||||
Future<Client> build() async {
|
// Future<Client> build() async {
|
||||||
final settings = ref.watch(SettingsController.provider)!;
|
// final settings = ref.watch(SettingsController.provider)!;
|
||||||
final client = Client(
|
// final client = Client(
|
||||||
"nexusbot",
|
// "nexusbot",
|
||||||
database: await MatrixSdkDatabase.init(
|
// database: await MatrixSdkDatabase.init(
|
||||||
"NexusBot",
|
// "NexusBot",
|
||||||
database: await databaseFactoryFfi.openDatabase(inMemoryDatabasePath),
|
// database: await databaseFactoryFfi.openDatabase(inMemoryDatabasePath),
|
||||||
),
|
// ),
|
||||||
);
|
// );
|
||||||
|
|
||||||
await client.checkHomeserver(settings.homeserver);
|
// await client.checkHomeserver(settings.homeserver);
|
||||||
await client.login(
|
// await client.login(
|
||||||
LoginType.mLoginPassword,
|
// LoginType.mLoginPassword,
|
||||||
identifier: AuthenticationUserIdentifier(user: settings.name),
|
// identifier: AuthenticationUserIdentifier(user: settings.name),
|
||||||
password: (await File(settings.botPasswordFile).readAsString()).trim(),
|
// password: (await File(settings.botPasswordFile).readAsString()).trim(),
|
||||||
);
|
// );
|
||||||
|
|
||||||
return client;
|
// return client;
|
||||||
}
|
// }
|
||||||
|
|
||||||
static final provider = AsyncNotifierProvider<ClientController, Client>(
|
// static final provider = AsyncNotifierProvider<ClientController, Client>(
|
||||||
ClientController.new,
|
// ClientController.new,
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
|
|
|
||||||
23
lib/helpers/launch_helper.dart
Normal file
23
lib/helpers/launch_helper.dart
Normal file
|
|
@ -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<void> 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>(LaunchHelper.new);
|
||||||
|
}
|
||||||
|
|
@ -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:flyer_chat_text_message/flyer_chat_text_message.dart";
|
||||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||||
import "package:nexus/controllers/room_chat_controller.dart";
|
import "package:nexus/controllers/room_chat_controller.dart";
|
||||||
|
import "package:nexus/helpers/launch_helper.dart";
|
||||||
|
|
||||||
class RoomChat extends HookConsumerWidget {
|
class RoomChat extends HookConsumerWidget {
|
||||||
const RoomChat({super.key});
|
const RoomChat({super.key});
|
||||||
|
|
@ -42,7 +43,11 @@ class RoomChat extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
index: index,
|
index: index,
|
||||||
|
onLinkTap: (url, _) =>
|
||||||
|
ref.watch(LaunchHelper.provider).launchUrl(Uri.parse(url)),
|
||||||
linksDecoration: TextDecoration.underline,
|
linksDecoration: TextDecoration.underline,
|
||||||
|
sentLinksColor: Colors.blue,
|
||||||
|
receivedLinksColor: Colors.blue,
|
||||||
),
|
),
|
||||||
linkPreviewBuilder: (_, message, isSentByMe) {
|
linkPreviewBuilder: (_, message, isSentByMe) {
|
||||||
return LinkPreview(
|
return LinkPreview(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue