first implementation finished

This commit is contained in:
Fabian Freund
2024-04-22 11:21:01 +02:00
parent 1a13ca0795
commit 0e1972242a
102 changed files with 7192 additions and 55 deletions
@@ -0,0 +1,31 @@
import 'package:kagi_bang_bang/utils/uri_parser.dart' as uri_parser;
sealed class SharedContent {
const SharedContent();
factory SharedContent.parse(String content) {
if (uri_parser.tryParseUrl(content) case final Uri uri) {
return SharedUrl(uri);
} else {
return SharedText(content);
}
}
}
final class SharedUrl extends SharedContent {
final Uri url;
const SharedUrl(this.url);
@override
String toString() => url.toString();
}
final class SharedText extends SharedContent {
final String text;
const SharedText(this.text);
@override
String toString() => text;
}
@@ -0,0 +1,39 @@
import 'dart:async';
import 'package:collection/collection.dart';
import 'package:flutter_sharing_intent/flutter_sharing_intent.dart';
import 'package:flutter_sharing_intent/model/sharing_file.dart';
import 'package:kagi_bang_bang/domain/entities/received_parameter.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:rxdart/rxdart.dart';
part 'sharing_intent.g.dart';
@riverpod
Raw<Stream<ReceivedParameter>> sharingIntentStream(SharingIntentStreamRef ref) {
final initialStream = FlutterSharingIntent.instance
// ignore: discarded_futures
.getInitialSharing()
// ignore: discarded_futures
.then((event) async {
FlutterSharingIntent.instance.reset();
return event;
}).asStream();
return ConcatStream(
[initialStream, FlutterSharingIntent.instance.getMediaStream()],
)
.map(
(event) => event
.where(
(shared) =>
shared.type == SharedMediaType.TEXT ||
shared.type == SharedMediaType.URL,
)
.map((shared) => shared.value)
.whereNotNull()
.firstOrNull,
)
.whereNotNull()
.map((content) => ReceivedParameter(content, null));
}
@@ -0,0 +1,28 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'sharing_intent.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$sharingIntentStreamHash() =>
r'6fca6ca6b4ac983397245a09cb61144cd5a4715d';
/// See also [sharingIntentStream].
@ProviderFor(sharingIntentStream)
final sharingIntentStreamProvider =
AutoDisposeProvider<Raw<Stream<ReceivedParameter>>>.internal(
sharingIntentStream,
name: r'sharingIntentStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$sharingIntentStreamHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef SharingIntentStreamRef
= AutoDisposeProviderRef<Raw<Stream<ReceivedParameter>>>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member