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,45 @@
import 'dart:collection';
import 'package:flutter/foundation.dart';
import 'package:kagi_bang_bang/features/web_view/presentation/widgets/web_view.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'web_view.g.dart';
@Riverpod(keepAlive: true)
class WebViewTabController extends _$WebViewTabController {
late Map<Key, WebView> _webViewTabs;
@override
WebView? build() {
_webViewTabs = ref.watch(webViewRepositoryProvider);
return (stateOrNull != null)
? _webViewTabs[stateOrNull!.page.value.key] ??
_webViewTabs.values.lastOrNull
: null;
}
void showTab(Key? key) {
state = (key != null) ? _webViewTabs[key] : null;
}
}
@Riverpod(keepAlive: true)
class WebViewRepository extends _$WebViewRepository {
@override
Map<Key, WebView> build() {
return stateOrNull ?? {};
}
void addTab(WebView webView) {
state = {...state, webView.page.value.key: webView};
}
Future<void> closeTab(Key key) async {
state = Map.of(state)..remove(key);
}
Future<void> closeAllTabs() async {
state = {};
}
}
@@ -0,0 +1,43 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'web_view.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$webViewTabControllerHash() =>
r'45eaa10e6032b04717e8ba08b8dce8ed22764f46';
/// See also [WebViewTabController].
@ProviderFor(WebViewTabController)
final webViewTabControllerProvider =
NotifierProvider<WebViewTabController, WebView?>.internal(
WebViewTabController.new,
name: r'webViewTabControllerProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$webViewTabControllerHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$WebViewTabController = Notifier<WebView?>;
String _$webViewRepositoryHash() => r'96c14f599df30f6828ecaae584a509225b10e2f1';
/// See also [WebViewRepository].
@ProviderFor(WebViewRepository)
final webViewRepositoryProvider =
NotifierProvider<WebViewRepository, Map<Key, WebView>>.internal(
WebViewRepository.new,
name: r'webViewRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$webViewRepositoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$WebViewRepository = Notifier<Map<Key, WebView>>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member