feat: implement mobile UI, Android build configuration, and share intent handling using share_handler
This commit is contained in:
@@ -11,12 +11,12 @@ android {
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
jvmTarget = "17"
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -24,6 +24,16 @@
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="text/plain" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="video/*" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
|
||||
@@ -18,15 +18,21 @@ subprojects {
|
||||
project.layout.buildDirectory.value(newSubprojectBuildDir)
|
||||
}
|
||||
|
||||
// Java ve Kotlin'i 1.8'e zorla
|
||||
tasks.withType<JavaCompile>().configureEach {
|
||||
sourceCompatibility = "1.8"
|
||||
targetCompatibility = "1.8"
|
||||
// Java ve Kotlin'i 17'ye zorla
|
||||
afterEvaluate {
|
||||
if (project.hasProperty("android")) {
|
||||
configure<com.android.build.gradle.BaseExtension> {
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile>().configureEach {
|
||||
compilerOptions {
|
||||
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8)
|
||||
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:share_handler/share_handler.dart';
|
||||
import 'sender_providers.dart';
|
||||
|
||||
final shareHandlerProvider = Provider<void>((ref) {
|
||||
final handler = ShareHandler.instance;
|
||||
|
||||
// Listen for background shares
|
||||
handler.sharedMediaStream.listen((SharedMedia media) {
|
||||
_handleMedia(media, ref);
|
||||
});
|
||||
|
||||
// Check for initial share (app opened via share)
|
||||
handler.getInitialSharedMedia().then((media) {
|
||||
if (media != null) {
|
||||
_handleMedia(media, ref);
|
||||
}
|
||||
});
|
||||
|
||||
return;
|
||||
});
|
||||
|
||||
void _handleMedia(SharedMedia media, Ref ref) {
|
||||
final content = media.content;
|
||||
if (content != null && content.isNotEmpty) {
|
||||
// If it's a URL or contains a URL, send it
|
||||
if (content.startsWith('http')) {
|
||||
ref.read(senderProvider.notifier).sendLink(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import '../../../../core/theme/app_colors.dart';
|
||||
import '../../../discovery/presentation/providers/discovery_providers.dart';
|
||||
import '../providers/sender_providers.dart';
|
||||
import '../providers/share_handler_provider.dart';
|
||||
|
||||
class MobileSenderScreen extends ConsumerStatefulWidget {
|
||||
const MobileSenderScreen({super.key});
|
||||
@@ -14,6 +15,11 @@ class MobileSenderScreen extends ConsumerStatefulWidget {
|
||||
class _MobileSenderScreenState extends ConsumerState<MobileSenderScreen> {
|
||||
final _urlController = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_urlController.dispose();
|
||||
@@ -22,6 +28,9 @@ class _MobileSenderScreenState extends ConsumerState<MobileSenderScreen> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// Initialize share handler
|
||||
ref.watch(shareHandlerProvider);
|
||||
|
||||
final devicesAsync = ref.watch(discoveredDevicesProvider);
|
||||
final senderState = ref.watch(senderProvider);
|
||||
|
||||
|
||||
+32
-8
@@ -744,14 +744,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
receive_sharing_intent:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: receive_sharing_intent
|
||||
sha256: ec76056e4d258ad708e76d85591d933678625318e411564dcb9059048ca3a593
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.8.1"
|
||||
record_use:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -776,6 +768,38 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.3"
|
||||
share_handler:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: share_handler
|
||||
sha256: "0a6d007f0e44fbee27164adcd159ecbc88238864313f4e5c58161cae2180328d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.25"
|
||||
share_handler_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: share_handler_android
|
||||
sha256: caf555b933dc72783aa37fef75688c7b86bd6f7bc17d80fbf585bc42f123cc8d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.11"
|
||||
share_handler_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: share_handler_ios
|
||||
sha256: cdc21f88f336a944157a8e9ceb191525cee3b082d6eb6c2082488e4f09dc3ece
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.15"
|
||||
share_handler_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: share_handler_platform_interface
|
||||
sha256: "7a4df95a87b326b2f07458d937f2281874567c364b7b7ebe4e7d50efaae5f106"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.6"
|
||||
shared_preferences:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
||||
+1
-1
@@ -39,13 +39,13 @@ dependencies:
|
||||
media_kit: ^1.2.6
|
||||
media_kit_video: ^2.0.1
|
||||
media_kit_libs_video: ^1.0.7
|
||||
receive_sharing_intent: ^1.8.1
|
||||
flutter_inappwebview: ^6.1.5
|
||||
shared_preferences: ^2.5.5
|
||||
google_fonts: ^8.1.0
|
||||
flutter_svg: ^2.2.4
|
||||
path_provider: ^2.1.5
|
||||
dio: ^5.9.2
|
||||
share_handler: ^0.0.25
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user