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
|
ndkVersion = flutter.ndkVersion
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "1.8"
|
jvmTarget = "17"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,16 @@
|
|||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
</intent-filter>
|
</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>
|
</activity>
|
||||||
<!-- Don't delete the meta-data below.
|
<!-- Don't delete the meta-data below.
|
||||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||||
|
|||||||
@@ -18,15 +18,21 @@ subprojects {
|
|||||||
project.layout.buildDirectory.value(newSubprojectBuildDir)
|
project.layout.buildDirectory.value(newSubprojectBuildDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Java ve Kotlin'i 1.8'e zorla
|
// Java ve Kotlin'i 17'ye zorla
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
afterEvaluate {
|
||||||
sourceCompatibility = "1.8"
|
if (project.hasProperty("android")) {
|
||||||
targetCompatibility = "1.8"
|
configure<com.android.build.gradle.BaseExtension> {
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile>().configureEach {
|
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile>().configureEach {
|
||||||
compilerOptions {
|
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 '../../../../core/theme/app_colors.dart';
|
||||||
import '../../../discovery/presentation/providers/discovery_providers.dart';
|
import '../../../discovery/presentation/providers/discovery_providers.dart';
|
||||||
import '../providers/sender_providers.dart';
|
import '../providers/sender_providers.dart';
|
||||||
|
import '../providers/share_handler_provider.dart';
|
||||||
|
|
||||||
class MobileSenderScreen extends ConsumerStatefulWidget {
|
class MobileSenderScreen extends ConsumerStatefulWidget {
|
||||||
const MobileSenderScreen({super.key});
|
const MobileSenderScreen({super.key});
|
||||||
@@ -14,6 +15,11 @@ class MobileSenderScreen extends ConsumerStatefulWidget {
|
|||||||
class _MobileSenderScreenState extends ConsumerState<MobileSenderScreen> {
|
class _MobileSenderScreenState extends ConsumerState<MobileSenderScreen> {
|
||||||
final _urlController = TextEditingController();
|
final _urlController = TextEditingController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_urlController.dispose();
|
_urlController.dispose();
|
||||||
@@ -22,6 +28,9 @@ class _MobileSenderScreenState extends ConsumerState<MobileSenderScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
// Initialize share handler
|
||||||
|
ref.watch(shareHandlerProvider);
|
||||||
|
|
||||||
final devicesAsync = ref.watch(discoveredDevicesProvider);
|
final devicesAsync = ref.watch(discoveredDevicesProvider);
|
||||||
final senderState = ref.watch(senderProvider);
|
final senderState = ref.watch(senderProvider);
|
||||||
|
|
||||||
|
|||||||
+32
-8
@@ -744,14 +744,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
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:
|
record_use:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -776,6 +768,38 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
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:
|
shared_preferences:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
+1
-1
@@ -39,13 +39,13 @@ dependencies:
|
|||||||
media_kit: ^1.2.6
|
media_kit: ^1.2.6
|
||||||
media_kit_video: ^2.0.1
|
media_kit_video: ^2.0.1
|
||||||
media_kit_libs_video: ^1.0.7
|
media_kit_libs_video: ^1.0.7
|
||||||
receive_sharing_intent: ^1.8.1
|
|
||||||
flutter_inappwebview: ^6.1.5
|
flutter_inappwebview: ^6.1.5
|
||||||
shared_preferences: ^2.5.5
|
shared_preferences: ^2.5.5
|
||||||
google_fonts: ^8.1.0
|
google_fonts: ^8.1.0
|
||||||
flutter_svg: ^2.2.4
|
flutter_svg: ^2.2.4
|
||||||
path_provider: ^2.1.5
|
path_provider: ^2.1.5
|
||||||
dio: ^5.9.2
|
dio: ^5.9.2
|
||||||
|
share_handler: ^0.0.25
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user