increase min sdk and apply new formatter

This commit is contained in:
Fabian Freund
2025-02-18 15:37:03 +01:00
parent f7885fc829
commit a1ee8bef35
266 changed files with 11329 additions and 10058 deletions
@@ -40,15 +40,16 @@ class SelectedBangData extends _$SelectedBangData {
@override
BangData? build({String? domain}) {
final repository = ref.watch(bangDataRepositoryProvider.notifier);
final selectedBangTrigger =
ref.watch(selectedBangTriggerProvider(domain: domain));
final subscription = repository.watchBang(selectedBangTrigger).listen(
(value) {
state = value;
},
final selectedBangTrigger = ref.watch(
selectedBangTriggerProvider(domain: domain),
);
final subscription = repository.watchBang(selectedBangTrigger).listen((
value,
) {
state = value;
});
ref.onDispose(() {
unawaited(subscription.cancel());
});
@@ -111,8 +112,9 @@ EquatableCollection<List<String>> availableTabIds(
ContainerFilter containerFilter,
) {
final containerTabs = ref.watch(
containerTabIdsProvider(containerFilter)
.select((value) => value.valueOrNull),
containerTabIdsProvider(
containerFilter,
).select((value) => value.valueOrNull),
);
final tabList = ref.watch(tabListProvider);
@@ -130,13 +132,10 @@ EquatableCollection<Map<String, TabState>> availableTabStates(
final availableTabs = ref.watch(availableTabIdsProvider(containerFilter));
final tabStates = ref.watch(tabStatesProvider);
return EquatableCollection(
{
for (final tabId in availableTabs.collection)
if (tabStates.containsKey(tabId)) tabId: tabStates[tabId]!,
},
immutable: true,
);
return EquatableCollection({
for (final tabId in availableTabs.collection)
if (tabStates.containsKey(tabId)) tabId: tabStates[tabId]!,
}, immutable: true);
}
@Riverpod()
@@ -145,16 +144,17 @@ EquatableCollection<List<String>> seamlessFilteredTabIds(
TabSearchPartition searchPartition,
ContainerFilter containerFilter,
) {
final tabSearchResults = ref
.watch(
tabSearchRepositoryProvider(searchPartition).select(
(value) => EquatableCollection(
value.valueOrNull?.map((tab) => tab.id).toList(),
immutable: true,
),
),
)
.collection;
final tabSearchResults =
ref
.watch(
tabSearchRepositoryProvider(searchPartition).select(
(value) => EquatableCollection(
value.valueOrNull?.map((tab) => tab.id).toList(),
immutable: true,
),
),
)
.collection;
final availableTabs = ref.watch(availableTabIdsProvider(containerFilter));
@@ -176,19 +176,19 @@ EquatableCollection<List<TabPreview>> seamlessFilteredTabPreviews(
TabSearchPartition searchPartition,
ContainerFilter containerFilter,
) {
final tabSearchResults = ref
.watch(
tabSearchRepositoryProvider(searchPartition).select(
(value) => EquatableCollection(
value.valueOrNull,
immutable: true,
),
),
)
.collection;
final tabSearchResults =
ref
.watch(
tabSearchRepositoryProvider(searchPartition).select(
(value) =>
EquatableCollection(value.valueOrNull, immutable: true),
),
)
.collection;
final availableTabStates =
ref.watch(availableTabStatesProvider(containerFilter));
final availableTabStates = ref.watch(
availableTabStatesProvider(containerFilter),
);
if (tabSearchResults == null) {
return EquatableCollection(
@@ -216,7 +216,8 @@ EquatableCollection<List<TabPreview>> seamlessFilteredTabPreviews(
id: tab.id,
title: tab.title ?? availableTabStates.collection[tab.id]!.title,
icon: null,
url: tab.cleanUrl.mapNotNull(Uri.tryParse) ??
url:
tab.cleanUrl.mapNotNull(Uri.tryParse) ??
availableTabStates.collection[tab.id]!.url,
highlightedUrl: tab.url,
content: tab.extractedContent ?? tab.fullContent,
@@ -39,21 +39,15 @@ class AvailableTabIdsFamily extends Family<EquatableCollection<List<String>>> {
const AvailableTabIdsFamily();
/// See also [availableTabIds].
AvailableTabIdsProvider call(
ContainerFilter containerFilter,
) {
return AvailableTabIdsProvider(
containerFilter,
);
AvailableTabIdsProvider call(ContainerFilter containerFilter) {
return AvailableTabIdsProvider(containerFilter);
}
@override
AvailableTabIdsProvider getProviderOverride(
covariant AvailableTabIdsProvider provider,
) {
return call(
provider.containerFilter,
);
return call(provider.containerFilter);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -75,24 +69,20 @@ class AvailableTabIdsFamily extends Family<EquatableCollection<List<String>>> {
class AvailableTabIdsProvider
extends AutoDisposeProvider<EquatableCollection<List<String>>> {
/// See also [availableTabIds].
AvailableTabIdsProvider(
ContainerFilter containerFilter,
) : this._internal(
(ref) => availableTabIds(
ref as AvailableTabIdsRef,
containerFilter,
),
from: availableTabIdsProvider,
name: r'availableTabIdsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$availableTabIdsHash,
dependencies: AvailableTabIdsFamily._dependencies,
allTransitiveDependencies:
AvailableTabIdsFamily._allTransitiveDependencies,
containerFilter: containerFilter,
);
AvailableTabIdsProvider(ContainerFilter containerFilter)
: this._internal(
(ref) => availableTabIds(ref as AvailableTabIdsRef, containerFilter),
from: availableTabIdsProvider,
name: r'availableTabIdsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$availableTabIdsHash,
dependencies: AvailableTabIdsFamily._dependencies,
allTransitiveDependencies:
AvailableTabIdsFamily._allTransitiveDependencies,
containerFilter: containerFilter,
);
AvailableTabIdsProvider._internal(
super._createNotifier, {
@@ -109,7 +99,7 @@ class AvailableTabIdsProvider
@override
Override overrideWith(
EquatableCollection<List<String>> Function(AvailableTabIdsRef provider)
create,
create,
) {
return ProviderOverride(
origin: this,
@@ -127,7 +117,7 @@ class AvailableTabIdsProvider
@override
AutoDisposeProviderElement<EquatableCollection<List<String>>>
createElement() {
createElement() {
return _AvailableTabIdsProviderElement(this);
}
@@ -178,21 +168,15 @@ class AvailableTabStatesFamily
const AvailableTabStatesFamily();
/// See also [availableTabStates].
AvailableTabStatesProvider call(
ContainerFilter containerFilter,
) {
return AvailableTabStatesProvider(
containerFilter,
);
AvailableTabStatesProvider call(ContainerFilter containerFilter) {
return AvailableTabStatesProvider(containerFilter);
}
@override
AvailableTabStatesProvider getProviderOverride(
covariant AvailableTabStatesProvider provider,
) {
return call(
provider.containerFilter,
);
return call(provider.containerFilter);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -214,24 +198,21 @@ class AvailableTabStatesFamily
class AvailableTabStatesProvider
extends AutoDisposeProvider<EquatableCollection<Map<String, TabState>>> {
/// See also [availableTabStates].
AvailableTabStatesProvider(
ContainerFilter containerFilter,
) : this._internal(
(ref) => availableTabStates(
ref as AvailableTabStatesRef,
containerFilter,
),
from: availableTabStatesProvider,
name: r'availableTabStatesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$availableTabStatesHash,
dependencies: AvailableTabStatesFamily._dependencies,
allTransitiveDependencies:
AvailableTabStatesFamily._allTransitiveDependencies,
containerFilter: containerFilter,
);
AvailableTabStatesProvider(ContainerFilter containerFilter)
: this._internal(
(ref) =>
availableTabStates(ref as AvailableTabStatesRef, containerFilter),
from: availableTabStatesProvider,
name: r'availableTabStatesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$availableTabStatesHash,
dependencies: AvailableTabStatesFamily._dependencies,
allTransitiveDependencies:
AvailableTabStatesFamily._allTransitiveDependencies,
containerFilter: containerFilter,
);
AvailableTabStatesProvider._internal(
super._createNotifier, {
@@ -248,8 +229,9 @@ class AvailableTabStatesProvider
@override
Override overrideWith(
EquatableCollection<Map<String, TabState>> Function(
AvailableTabStatesRef provider)
create,
AvailableTabStatesRef provider,
)
create,
) {
return ProviderOverride(
origin: this,
@@ -267,7 +249,7 @@ class AvailableTabStatesProvider
@override
AutoDisposeProviderElement<EquatableCollection<Map<String, TabState>>>
createElement() {
createElement() {
return _AvailableTabStatesProviderElement(this);
}
@@ -294,8 +276,10 @@ mixin AvailableTabStatesRef
ContainerFilter get containerFilter;
}
class _AvailableTabStatesProviderElement extends AutoDisposeProviderElement<
EquatableCollection<Map<String, TabState>>> with AvailableTabStatesRef {
class _AvailableTabStatesProviderElement
extends
AutoDisposeProviderElement<EquatableCollection<Map<String, TabState>>>
with AvailableTabStatesRef {
_AvailableTabStatesProviderElement(super.provider);
@override
@@ -321,20 +305,14 @@ class SeamlessFilteredTabIdsFamily
TabSearchPartition searchPartition,
ContainerFilter containerFilter,
) {
return SeamlessFilteredTabIdsProvider(
searchPartition,
containerFilter,
);
return SeamlessFilteredTabIdsProvider(searchPartition, containerFilter);
}
@override
SeamlessFilteredTabIdsProvider getProviderOverride(
covariant SeamlessFilteredTabIdsProvider provider,
) {
return call(
provider.searchPartition,
provider.containerFilter,
);
return call(provider.searchPartition, provider.containerFilter);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -360,23 +338,23 @@ class SeamlessFilteredTabIdsProvider
TabSearchPartition searchPartition,
ContainerFilter containerFilter,
) : this._internal(
(ref) => seamlessFilteredTabIds(
ref as SeamlessFilteredTabIdsRef,
searchPartition,
containerFilter,
),
from: seamlessFilteredTabIdsProvider,
name: r'seamlessFilteredTabIdsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$seamlessFilteredTabIdsHash,
dependencies: SeamlessFilteredTabIdsFamily._dependencies,
allTransitiveDependencies:
SeamlessFilteredTabIdsFamily._allTransitiveDependencies,
searchPartition: searchPartition,
containerFilter: containerFilter,
);
(ref) => seamlessFilteredTabIds(
ref as SeamlessFilteredTabIdsRef,
searchPartition,
containerFilter,
),
from: seamlessFilteredTabIdsProvider,
name: r'seamlessFilteredTabIdsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$seamlessFilteredTabIdsHash,
dependencies: SeamlessFilteredTabIdsFamily._dependencies,
allTransitiveDependencies:
SeamlessFilteredTabIdsFamily._allTransitiveDependencies,
searchPartition: searchPartition,
containerFilter: containerFilter,
);
SeamlessFilteredTabIdsProvider._internal(
super._createNotifier, {
@@ -395,8 +373,9 @@ class SeamlessFilteredTabIdsProvider
@override
Override overrideWith(
EquatableCollection<List<String>> Function(
SeamlessFilteredTabIdsRef provider)
create,
SeamlessFilteredTabIdsRef provider,
)
create,
) {
return ProviderOverride(
origin: this,
@@ -415,7 +394,7 @@ class SeamlessFilteredTabIdsProvider
@override
AutoDisposeProviderElement<EquatableCollection<List<String>>>
createElement() {
createElement() {
return _SeamlessFilteredTabIdsProviderElement(this);
}
@@ -488,10 +467,7 @@ class SeamlessFilteredTabPreviewsFamily
SeamlessFilteredTabPreviewsProvider getProviderOverride(
covariant SeamlessFilteredTabPreviewsProvider provider,
) {
return call(
provider.searchPartition,
provider.containerFilter,
);
return call(provider.searchPartition, provider.containerFilter);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -517,23 +493,23 @@ class SeamlessFilteredTabPreviewsProvider
TabSearchPartition searchPartition,
ContainerFilter containerFilter,
) : this._internal(
(ref) => seamlessFilteredTabPreviews(
ref as SeamlessFilteredTabPreviewsRef,
searchPartition,
containerFilter,
),
from: seamlessFilteredTabPreviewsProvider,
name: r'seamlessFilteredTabPreviewsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$seamlessFilteredTabPreviewsHash,
dependencies: SeamlessFilteredTabPreviewsFamily._dependencies,
allTransitiveDependencies:
SeamlessFilteredTabPreviewsFamily._allTransitiveDependencies,
searchPartition: searchPartition,
containerFilter: containerFilter,
);
(ref) => seamlessFilteredTabPreviews(
ref as SeamlessFilteredTabPreviewsRef,
searchPartition,
containerFilter,
),
from: seamlessFilteredTabPreviewsProvider,
name: r'seamlessFilteredTabPreviewsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$seamlessFilteredTabPreviewsHash,
dependencies: SeamlessFilteredTabPreviewsFamily._dependencies,
allTransitiveDependencies:
SeamlessFilteredTabPreviewsFamily._allTransitiveDependencies,
searchPartition: searchPartition,
containerFilter: containerFilter,
);
SeamlessFilteredTabPreviewsProvider._internal(
super._createNotifier, {
@@ -552,8 +528,9 @@ class SeamlessFilteredTabPreviewsProvider
@override
Override overrideWith(
EquatableCollection<List<TabPreview>> Function(
SeamlessFilteredTabPreviewsRef provider)
create,
SeamlessFilteredTabPreviewsRef provider,
)
create,
) {
return ProviderOverride(
origin: this,
@@ -572,7 +549,7 @@ class SeamlessFilteredTabPreviewsProvider
@override
AutoDisposeProviderElement<EquatableCollection<List<TabPreview>>>
createElement() {
createElement() {
return _SeamlessFilteredTabPreviewsProviderElement(this);
}
@@ -623,9 +600,7 @@ String _$selectedBangTriggerHash() =>
abstract class _$SelectedBangTrigger extends BuildlessNotifier<String?> {
late final String? domain;
String? build({
String? domain,
});
String? build({String? domain});
}
/// See also [SelectedBangTrigger].
@@ -638,21 +613,15 @@ class SelectedBangTriggerFamily extends Family<String?> {
const SelectedBangTriggerFamily();
/// See also [SelectedBangTrigger].
SelectedBangTriggerProvider call({
String? domain,
}) {
return SelectedBangTriggerProvider(
domain: domain,
);
SelectedBangTriggerProvider call({String? domain}) {
return SelectedBangTriggerProvider(domain: domain);
}
@override
SelectedBangTriggerProvider getProviderOverride(
covariant SelectedBangTriggerProvider provider,
) {
return call(
domain: provider.domain,
);
return call(domain: provider.domain);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -674,21 +643,20 @@ class SelectedBangTriggerFamily extends Family<String?> {
class SelectedBangTriggerProvider
extends NotifierProviderImpl<SelectedBangTrigger, String?> {
/// See also [SelectedBangTrigger].
SelectedBangTriggerProvider({
String? domain,
}) : this._internal(
() => SelectedBangTrigger()..domain = domain,
from: selectedBangTriggerProvider,
name: r'selectedBangTriggerProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$selectedBangTriggerHash,
dependencies: SelectedBangTriggerFamily._dependencies,
allTransitiveDependencies:
SelectedBangTriggerFamily._allTransitiveDependencies,
domain: domain,
);
SelectedBangTriggerProvider({String? domain})
: this._internal(
() => SelectedBangTrigger()..domain = domain,
from: selectedBangTriggerProvider,
name: r'selectedBangTriggerProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$selectedBangTriggerHash,
dependencies: SelectedBangTriggerFamily._dependencies,
allTransitiveDependencies:
SelectedBangTriggerFamily._allTransitiveDependencies,
domain: domain,
);
SelectedBangTriggerProvider._internal(
super._createNotifier, {
@@ -703,12 +671,8 @@ class SelectedBangTriggerProvider
final String? domain;
@override
String? runNotifierBuild(
covariant SelectedBangTrigger notifier,
) {
return notifier.build(
domain: domain,
);
String? runNotifierBuild(covariant SelectedBangTrigger notifier) {
return notifier.build(domain: domain);
}
@override
@@ -768,9 +732,7 @@ abstract class _$SelectedBangData
extends BuildlessAutoDisposeNotifier<BangData?> {
late final String? domain;
BangData? build({
String? domain,
});
BangData? build({String? domain});
}
/// See also [SelectedBangData].
@@ -783,21 +745,15 @@ class SelectedBangDataFamily extends Family<BangData?> {
const SelectedBangDataFamily();
/// See also [SelectedBangData].
SelectedBangDataProvider call({
String? domain,
}) {
return SelectedBangDataProvider(
domain: domain,
);
SelectedBangDataProvider call({String? domain}) {
return SelectedBangDataProvider(domain: domain);
}
@override
SelectedBangDataProvider getProviderOverride(
covariant SelectedBangDataProvider provider,
) {
return call(
domain: provider.domain,
);
return call(domain: provider.domain);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -819,21 +775,20 @@ class SelectedBangDataFamily extends Family<BangData?> {
class SelectedBangDataProvider
extends AutoDisposeNotifierProviderImpl<SelectedBangData, BangData?> {
/// See also [SelectedBangData].
SelectedBangDataProvider({
String? domain,
}) : this._internal(
() => SelectedBangData()..domain = domain,
from: selectedBangDataProvider,
name: r'selectedBangDataProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$selectedBangDataHash,
dependencies: SelectedBangDataFamily._dependencies,
allTransitiveDependencies:
SelectedBangDataFamily._allTransitiveDependencies,
domain: domain,
);
SelectedBangDataProvider({String? domain})
: this._internal(
() => SelectedBangData()..domain = domain,
from: selectedBangDataProvider,
name: r'selectedBangDataProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$selectedBangDataHash,
dependencies: SelectedBangDataFamily._dependencies,
allTransitiveDependencies:
SelectedBangDataFamily._allTransitiveDependencies,
domain: domain,
);
SelectedBangDataProvider._internal(
super._createNotifier, {
@@ -848,12 +803,8 @@ class SelectedBangDataProvider
final String? domain;
@override
BangData? runNotifierBuild(
covariant SelectedBangData notifier,
) {
return notifier.build(
domain: domain,
);
BangData? runNotifierBuild(covariant SelectedBangData notifier) {
return notifier.build(domain: domain);
}
@override
@@ -874,7 +825,7 @@ class SelectedBangDataProvider
@override
AutoDisposeNotifierProviderElement<SelectedBangData, BangData?>
createElement() {
createElement() {
return _SelectedBangDataProviderElement(this);
}
@@ -915,14 +866,15 @@ String _$lastUsedAssistantModeHash() =>
@ProviderFor(LastUsedAssistantMode)
final lastUsedAssistantModeProvider =
NotifierProvider<LastUsedAssistantMode, AssistantMode>.internal(
LastUsedAssistantMode.new,
name: r'lastUsedAssistantModeProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$lastUsedAssistantModeHash,
dependencies: null,
allTransitiveDependencies: null,
);
LastUsedAssistantMode.new,
name: r'lastUsedAssistantModeProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$lastUsedAssistantModeHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$LastUsedAssistantMode = Notifier<AssistantMode>;
String _$activeResearchVariantHash() =>
@@ -932,14 +884,15 @@ String _$activeResearchVariantHash() =>
@ProviderFor(ActiveResearchVariant)
final activeResearchVariantProvider =
NotifierProvider<ActiveResearchVariant, ResearchVariant>.internal(
ActiveResearchVariant.new,
name: r'activeResearchVariantProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$activeResearchVariantHash,
dependencies: null,
allTransitiveDependencies: null,
);
ActiveResearchVariant.new,
name: r'activeResearchVariantProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$activeResearchVariantHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$ActiveResearchVariant = Notifier<ResearchVariant>;
String _$activeChatModelHash() => r'675f406af8b4aa92699d59e37b5805a81d03a799';
@@ -948,14 +901,15 @@ String _$activeChatModelHash() => r'675f406af8b4aa92699d59e37b5805a81d03a799';
@ProviderFor(ActiveChatModel)
final activeChatModelProvider =
NotifierProvider<ActiveChatModel, ChatModel>.internal(
ActiveChatModel.new,
name: r'activeChatModelProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$activeChatModelHash,
dependencies: null,
allTransitiveDependencies: null,
);
ActiveChatModel.new,
name: r'activeChatModelProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$activeChatModelHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$ActiveChatModel = Notifier<ChatModel>;
String _$showFindInPageHash() => r'7ee5703f7d0c7e8a8dd6b0849d7b1e0a41fe24d9';
@@ -965,9 +919,10 @@ String _$showFindInPageHash() => r'7ee5703f7d0c7e8a8dd6b0849d7b1e0a41fe24d9';
final showFindInPageProvider = NotifierProvider<ShowFindInPage, bool>.internal(
ShowFindInPage.new,
name: r'showFindInPageProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$showFindInPageHash,
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$showFindInPageHash,
dependencies: null,
allTransitiveDependencies: null,
);
@@ -13,18 +13,19 @@ part 'create_tab.g.dart';
final _parameterToCreateTabSheetTransformer =
StreamTransformer<ReceivedParameter, CreateTabSheet>.fromHandlers(
handleData: (parameter, sink) {
final createTab = CreateTabSheet(
preferredTool: KagiTool.values
.firstWhereOrNull((tool) => tool.name == parameter.tool),
content: parameter.content,
);
handleData: (parameter, sink) {
final createTab = CreateTabSheet(
preferredTool: KagiTool.values.firstWhereOrNull(
(tool) => tool.name == parameter.tool,
),
content: parameter.content,
);
if (createTab.hasParameters) {
sink.add(createTab);
}
},
);
if (createTab.hasParameters) {
sink.add(createTab);
}
},
);
@Riverpod()
class CreateTabStream extends _$CreateTabStream {
@@ -12,14 +12,15 @@ String _$createTabStreamHash() => r'2e802a10ecaf1862074f32b76e89c26997bdd7b2';
@ProviderFor(CreateTabStream)
final createTabStreamProvider =
AutoDisposeStreamNotifierProvider<CreateTabStream, CreateTabSheet>.internal(
CreateTabStream.new,
name: r'createTabStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$createTabStreamHash,
dependencies: null,
allTransitiveDependencies: null,
);
CreateTabStream.new,
name: r'createTabStreamProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$createTabStreamHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$CreateTabStream = AutoDisposeStreamNotifier<CreateTabSheet>;
// ignore_for_file: type=lint
@@ -13,14 +13,15 @@ String _$deleteBrowserDataServiceHash() =>
@ProviderFor(DeleteBrowserDataService)
final deleteBrowserDataServiceProvider =
AutoDisposeNotifierProvider<DeleteBrowserDataService, void>.internal(
DeleteBrowserDataService.new,
name: r'deleteBrowserDataServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$deleteBrowserDataServiceHash,
dependencies: null,
allTransitiveDependencies: null,
);
DeleteBrowserDataService.new,
name: r'deleteBrowserDataServiceProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$deleteBrowserDataServiceHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$DeleteBrowserDataService = AutoDisposeNotifier<void>;
// ignore_for_file: type=lint
@@ -16,8 +16,9 @@ class EngineSettingsReplicationService
var initialSettingsSent = false;
ref.listen(
generalSettingsRepositoryProvider
.select((settings) => settings.themeMode),
generalSettingsRepositoryProvider.select(
(settings) => settings.themeMode,
),
(previous, next) async {
final theme = switch (next) {
ThemeMode.system => ColorScheme.system,
@@ -29,62 +30,63 @@ class EngineSettingsReplicationService
},
);
ref.listen(
engineSettingsRepositoryProvider,
(previous, next) async {
if (initialSettingsSent && previous != null) {
if (previous.javascriptEnabled != next.javascriptEnabled) {
await _service.javascriptEnabled(next.javascriptEnabled);
}
if (previous.trackingProtectionPolicy !=
next.trackingProtectionPolicy) {
await _service
.trackingProtectionPolicy(next.trackingProtectionPolicy);
}
if (previous.httpsOnlyMode != next.httpsOnlyMode) {
await _service.httpsOnlyMode(next.httpsOnlyMode);
}
if (previous.globalPrivacyControlEnabled !=
next.globalPrivacyControlEnabled) {
await _service
.globalPrivacyControlEnabled(next.globalPrivacyControlEnabled);
}
if (previous.preferredColorScheme != next.preferredColorScheme) {
await _service.preferredColorScheme(next.preferredColorScheme);
}
if (previous.cookieBannerHandlingMode !=
next.cookieBannerHandlingMode) {
await _service
.cookieBannerHandlingMode(next.cookieBannerHandlingMode);
}
if (previous.cookieBannerHandlingModePrivateBrowsing !=
next.cookieBannerHandlingModePrivateBrowsing) {
await _service.cookieBannerHandlingModePrivateBrowsing(
next.cookieBannerHandlingModePrivateBrowsing,
);
}
if (previous.cookieBannerHandlingGlobalRules !=
next.cookieBannerHandlingGlobalRules) {
await _service.cookieBannerHandlingGlobalRules(
next.cookieBannerHandlingGlobalRules,
);
}
if (previous.cookieBannerHandlingGlobalRulesSubFrames !=
next.cookieBannerHandlingGlobalRulesSubFrames) {
await _service.cookieBannerHandlingGlobalRulesSubFrames(
next.cookieBannerHandlingGlobalRulesSubFrames,
);
}
if (previous.webContentIsolationStrategy !=
next.webContentIsolationStrategy) {
await _service
.webContentIsolationStrategy(next.webContentIsolationStrategy);
}
} else {
await _service.setDefaultSettings(next);
initialSettingsSent = true;
ref.listen(engineSettingsRepositoryProvider, (previous, next) async {
if (initialSettingsSent && previous != null) {
if (previous.javascriptEnabled != next.javascriptEnabled) {
await _service.javascriptEnabled(next.javascriptEnabled);
}
},
);
if (previous.trackingProtectionPolicy !=
next.trackingProtectionPolicy) {
await _service.trackingProtectionPolicy(
next.trackingProtectionPolicy,
);
}
if (previous.httpsOnlyMode != next.httpsOnlyMode) {
await _service.httpsOnlyMode(next.httpsOnlyMode);
}
if (previous.globalPrivacyControlEnabled !=
next.globalPrivacyControlEnabled) {
await _service.globalPrivacyControlEnabled(
next.globalPrivacyControlEnabled,
);
}
if (previous.preferredColorScheme != next.preferredColorScheme) {
await _service.preferredColorScheme(next.preferredColorScheme);
}
if (previous.cookieBannerHandlingMode !=
next.cookieBannerHandlingMode) {
await _service.cookieBannerHandlingMode(
next.cookieBannerHandlingMode,
);
}
if (previous.cookieBannerHandlingModePrivateBrowsing !=
next.cookieBannerHandlingModePrivateBrowsing) {
await _service.cookieBannerHandlingModePrivateBrowsing(
next.cookieBannerHandlingModePrivateBrowsing,
);
}
if (previous.cookieBannerHandlingGlobalRules !=
next.cookieBannerHandlingGlobalRules) {
await _service.cookieBannerHandlingGlobalRules(
next.cookieBannerHandlingGlobalRules,
);
}
if (previous.cookieBannerHandlingGlobalRulesSubFrames !=
next.cookieBannerHandlingGlobalRulesSubFrames) {
await _service.cookieBannerHandlingGlobalRulesSubFrames(
next.cookieBannerHandlingGlobalRulesSubFrames,
);
}
if (previous.webContentIsolationStrategy !=
next.webContentIsolationStrategy) {
await _service.webContentIsolationStrategy(
next.webContentIsolationStrategy,
);
}
} else {
await _service.setDefaultSettings(next);
initialSettingsSent = true;
}
});
}
}
@@ -13,14 +13,15 @@ String _$engineSettingsReplicationServiceHash() =>
@ProviderFor(EngineSettingsReplicationService)
final engineSettingsReplicationServiceProvider =
NotifierProvider<EngineSettingsReplicationService, void>.internal(
EngineSettingsReplicationService.new,
name: r'engineSettingsReplicationServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$engineSettingsReplicationServiceHash,
dependencies: null,
allTransitiveDependencies: null,
);
EngineSettingsReplicationService.new,
name: r'engineSettingsReplicationServiceProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$engineSettingsReplicationServiceHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$EngineSettingsReplicationService = Notifier<void>;
// ignore_for_file: type=lint
@@ -12,14 +12,14 @@ class ProxySettingsReplucation extends _$ProxySettingsReplucation {
@override
void build() {
ref.listen(
torProxyServiceProvider.select((data) => data.valueOrNull),
(previous, next) async {
if (next != null) {
await _service.setProxyPort(next);
}
},
);
ref.listen(torProxyServiceProvider.select((data) => data.valueOrNull), (
previous,
next,
) async {
if (next != null) {
await _service.setProxyPort(next);
}
});
ref.listen(
containersWithCountProvider.select(
@@ -13,14 +13,15 @@ String _$proxySettingsReplucationHash() =>
@ProviderFor(ProxySettingsReplucation)
final proxySettingsReplucationProvider =
NotifierProvider<ProxySettingsReplucation, void>.internal(
ProxySettingsReplucation.new,
name: r'proxySettingsReplucationProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$proxySettingsReplucationHash,
dependencies: null,
allTransitiveDependencies: null,
);
ProxySettingsReplucation.new,
name: r'proxySettingsReplucationProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$proxySettingsReplucationHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$ProxySettingsReplucation = Notifier<void>;
// ignore_for_file: type=lint
@@ -36,11 +36,7 @@ class WebPageDialog extends HookConsumerWidget {
final Uri url;
final WebPageInfo? precachedInfo;
const WebPageDialog({
required this.url,
this.precachedInfo,
super.key,
});
const WebPageDialog({required this.url, this.precachedInfo, super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
@@ -63,8 +59,10 @@ class WebPageDialog extends HookConsumerWidget {
context: context,
removeBottom: true,
child: Dialog(
insetPadding:
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 64.0),
insetPadding: const EdgeInsets.symmetric(
horizontal: 16.0,
vertical: 64.0,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
@@ -79,26 +77,24 @@ class WebPageDialog extends HookConsumerWidget {
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: HookConsumer(
builder: (context, ref, child) {
final addressTextController =
useTextEditingController(text: url.toString());
final addressTextController = useTextEditingController(
text: url.toString(),
);
final addressTextFocusNode = useFocusNode();
final suggestion = useState<String?>(null);
useListenableCallback(
addressTextController,
() async {
if (addressTextController.text.isNotEmpty) {
final result = await ref
.read(engineSuggestionsProvider.notifier)
.getAutocompleteSuggestion(
addressTextController.text,
);
useListenableCallback(addressTextController, () async {
if (addressTextController.text.isNotEmpty) {
final result = await ref
.read(engineSuggestionsProvider.notifier)
.getAutocompleteSuggestion(
addressTextController.text,
);
suggestion.value = result;
}
},
);
suggestion.value = result;
}
});
return AutoSuggestTextField(
controller: addressTextController,
@@ -121,12 +117,15 @@ class WebPageDialog extends HookConsumerWidget {
},
onSubmitted: (value) async {
if (value.isNotEmpty) {
var newUrl =
uri_parser.tryParseUrl(value, eagerParsing: true);
var newUrl = uri_parser.tryParseUrl(
value,
eagerParsing: true,
);
if (newUrl == null) {
final defaultSearchBang = await ref
.read(defaultSearchBangDataProvider.future);
final defaultSearchBang = await ref.read(
defaultSearchBangDataProvider.future,
);
newUrl = defaultSearchBang?.getUrl(value);
}
@@ -147,9 +146,7 @@ class WebPageDialog extends HookConsumerWidget {
),
),
),
const SizedBox(
height: 4,
),
const SizedBox(height: 4),
const Divider(),
Flexible(
child: FadingScroll(
@@ -173,21 +170,23 @@ class WebPageDialog extends HookConsumerWidget {
availableBangs: availableBangs,
);
},
error: (error, stackTrace) => FailureWidget(
title: 'Could not load bangs',
exception: error,
),
loading: () => SiteSearch(
domain: url.host,
availableBangs: [
BangData(
websiteName: 'websiteName',
domain: 'domain',
trigger: 'trigger',
urlTemplate: 'urlTemplate',
error:
(error, stackTrace) => FailureWidget(
title: 'Could not load bangs',
exception: error,
),
loading:
() => SiteSearch(
domain: url.host,
availableBangs: [
BangData(
websiteName: 'websiteName',
domain: 'domain',
trigger: 'trigger',
urlTemplate: 'urlTemplate',
),
],
),
],
),
),
),
if (availableBangsAsync.isLoading ||
@@ -241,31 +240,30 @@ class WebPageDialog extends HookConsumerWidget {
leading: const Icon(Icons.mobile_screen_share),
title: const Text('Share screenshot'),
onTap: () async {
final screenshot = await ref
.read(selectedTabSessionNotifierProvider)
.requestScreenshot();
final screenshot =
await ref
.read(selectedTabSessionNotifierProvider)
.requestScreenshot();
if (screenshot != null) {
ui.decodeImageFromList(
screenshot,
(result) async {
final png = await result.toByteData(
format: ui.ImageByteFormat.png,
ui.decodeImageFromList(screenshot, (
result,
) async {
final png = await result.toByteData(
format: ui.ImageByteFormat.png,
);
if (png != null) {
final file = XFile.fromData(
png.buffer.asUint8List(),
mimeType: 'image/png',
);
if (png != null) {
final file = XFile.fromData(
png.buffer.asUint8List(),
mimeType: 'image/png',
);
await Share.shareXFiles(
[file],
subject: precachedInfo?.title,
);
}
},
);
await Share.shareXFiles([
file,
], subject: precachedInfo?.title);
}
});
}
if (context.mounted) {
@@ -53,8 +53,9 @@ class BrowserScreen extends HookConsumerWidget {
final displayedSheet = ref.watch(bottomSheetControllerProvider);
final displayedOverlayDialog = ref.watch(overlayDialogControllerProvider);
final selectedTabId =
ref.watch(selectedTabStateProvider.select((value) => value?.id));
final selectedTabId = ref.watch(
selectedTabStateProvider.select((value) => value?.id),
);
final trippleDotMenuController = useMenuController();
final tabMenuController = useMenuController();
@@ -65,16 +66,13 @@ class BrowserScreen extends HookConsumerWidget {
final activeKagiTool = useValueNotifier<KagiTool?>(null, [displayedSheet]);
ref.listen(
overlayDialogControllerProvider,
(previous, next) {
if (next != null) {
overlayController.show();
} else {
overlayController.hide();
}
},
);
ref.listen(overlayDialogControllerProvider, (previous, next) {
if (next != null) {
overlayController.show();
} else {
overlayController.hide();
}
});
// ref.listen(
// generalSettingsRepositoryProvider
@@ -96,8 +94,9 @@ class BrowserScreen extends HookConsumerWidget {
bottomNavigationBar: Consumer(
builder: (context, ref, child) {
final tabInFullScreen = ref.watch(
selectedTabStateProvider
.select((value) => value?.isFullScreen ?? false),
selectedTabStateProvider.select(
(value) => value?.isFullScreen ?? false,
),
);
return Visibility(
@@ -108,15 +107,17 @@ class BrowserScreen extends HookConsumerWidget {
child: AppBar(
automaticallyImplyLeading: false,
titleSpacing: 8.0,
title: (selectedTabId != null &&
displayedSheet is! ViewTabsSheet)
? Consumer(
builder: (context, ref, child) {
final tabState =
ref.watch(tabStateProvider(selectedTabId));
title:
(selectedTabId != null &&
displayedSheet is! ViewTabsSheet)
? Consumer(
builder: (context, ref, child) {
final tabState = ref.watch(
tabStateProvider(selectedTabId),
);
return (tabState != null)
? AppBarTitle(
return (tabState != null)
? AppBarTitle(
tab: tabState,
onTap: () async {
await context.push(
@@ -129,93 +130,95 @@ class BrowserScreen extends HookConsumerWidget {
onDoubleTap: () async {
final newUrl = await showDialog<Uri?>(
context: context,
builder: (context) => EditUrlDialog(
initialUrl: tabState.url,
),
builder:
(context) => EditUrlDialog(
initialUrl: tabState.url,
),
);
if (newUrl != null) {
await ref
.read(
tabSessionProvider(tabId: null)
.notifier,
tabSessionProvider(
tabId: null,
).notifier,
)
.loadUrl(url: newUrl);
}
},
)
: const SizedBox.shrink();
},
)
: HookBuilder(
builder: (context) {
// final activeTool = useListenableSelector(
// activeKagiTool,
// () {
// if (displayedSheet is CreateTabSheetWidget) {
// return null;
// }
: const SizedBox.shrink();
},
)
: HookBuilder(
builder: (context) {
// final activeTool = useListenableSelector(
// activeKagiTool,
// () {
// if (displayedSheet is CreateTabSheetWidget) {
// return null;
// }
// return activeKagiTool.value;
// },
// );
// return activeKagiTool.value;
// },
// );
return Row(
children: [
// IconButton(
// color: (activeTool == KagiTool.search)
// ? Theme.of(context).colorScheme.primary
// : null,
// onPressed: () async {
// // ref
// // .read(createTabStreamProvider.notifier)
// // .createTab(
// // CreateTabSheet(
// // preferredTool: KagiTool.search,
// // ),
// // );
// await context
// .push(const SearchRoute().location);
// },
// icon: Icon(KagiTool.search.icon),
// ),
// IconButton(
// color: (activeTool == KagiTool.summarizer)
// ? Theme.of(context).colorScheme.primary
// : null,
// onPressed: () {
// ref
// .read(createTabStreamProvider.notifier)
// .createTab(
// CreateTabSheet(
// preferredTool: KagiTool.summarizer,
// ),
// );
// },
// icon: Icon(KagiTool.summarizer.icon),
// ),
// if (showEarlyAccessFeatures)
// IconButton(
// color: (activeTool == KagiTool.assistant)
// ? Theme.of(context).colorScheme.primary
// : null,
// onPressed: () {
// ref
// .read(
// createTabStreamProvider.notifier,
// )
// .createTab(
// CreateTabSheet(
// preferredTool: KagiTool.assistant,
// ),
// );
// },
// icon: Icon(KagiTool.assistant.icon),
// ),
],
);
},
),
return Row(
children: [
// IconButton(
// color: (activeTool == KagiTool.search)
// ? Theme.of(context).colorScheme.primary
// : null,
// onPressed: () async {
// // ref
// // .read(createTabStreamProvider.notifier)
// // .createTab(
// // CreateTabSheet(
// // preferredTool: KagiTool.search,
// // ),
// // );
// await context
// .push(const SearchRoute().location);
// },
// icon: Icon(KagiTool.search.icon),
// ),
// IconButton(
// color: (activeTool == KagiTool.summarizer)
// ? Theme.of(context).colorScheme.primary
// : null,
// onPressed: () {
// ref
// .read(createTabStreamProvider.notifier)
// .createTab(
// CreateTabSheet(
// preferredTool: KagiTool.summarizer,
// ),
// );
// },
// icon: Icon(KagiTool.summarizer.icon),
// ),
// if (showEarlyAccessFeatures)
// IconButton(
// color: (activeTool == KagiTool.assistant)
// ? Theme.of(context).colorScheme.primary
// : null,
// onPressed: () {
// ref
// .read(
// createTabStreamProvider.notifier,
// )
// .createTab(
// CreateTabSheet(
// preferredTool: KagiTool.assistant,
// ),
// );
// },
// icon: Icon(KagiTool.assistant.icon),
// ),
],
);
},
),
actions: [
if (selectedTabId != null &&
displayedSheet is! ViewTabsSheet)
@@ -278,9 +281,7 @@ class BrowserScreen extends HookConsumerWidget {
MenuItemButton(
onPressed: () async {
await ref
.read(
tabRepositoryProvider.notifier,
)
.read(tabRepositoryProvider.notifier)
.closeTab(selectedTabId);
},
leadingIcon: const Icon(Icons.close),
@@ -488,8 +489,9 @@ class BrowserScreen extends HookConsumerWidget {
if (selectedTabId != null)
MenuItemButton(
onPressed: () async {
final tabState =
ref.read(tabStateProvider(selectedTabId));
final tabState = ref.read(
tabStateProvider(selectedTabId),
);
if (tabState?.url case final Uri url) {
await ui_helper.launchUrlFeedback(context, url);
@@ -501,8 +503,9 @@ class BrowserScreen extends HookConsumerWidget {
if (selectedTabId != null)
MenuItemButton(
onPressed: () async {
final tabState =
ref.read(tabStateProvider(selectedTabId));
final tabState = ref.read(
tabStateProvider(selectedTabId),
);
if (tabState?.url case final Uri url) {
await Share.shareUri(url);
@@ -530,8 +533,9 @@ class BrowserScreen extends HookConsumerWidget {
MenuItemButton(
onPressed: () async {
final controller = ref.read(
tabSessionProvider(tabId: selectedTabId)
.notifier,
tabSessionProvider(
tabId: selectedTabId,
).notifier,
);
await controller.reload();
@@ -545,39 +549,45 @@ class BrowserScreen extends HookConsumerWidget {
Consumer(
builder: (context, ref, child) {
final history = ref.watch(
tabStateProvider(selectedTabId)
.select((value) => value?.historyState),
tabStateProvider(
selectedTabId,
).select((value) => value?.historyState),
);
return Row(
children: [
Expanded(
child: (history?.canGoBack == true)
? IconButton(
onPressed: () async {
final controller = ref.read(
tabSessionProvider(
tabId: selectedTabId,
).notifier,
);
child:
(history?.canGoBack == true)
? IconButton(
onPressed: () async {
final controller = ref.read(
tabSessionProvider(
tabId: selectedTabId,
).notifier,
);
await controller.goBack();
trippleDotMenuController.close();
},
icon: const Icon(Icons.arrow_back),
)
: IconButton(
onPressed: () async {
await ref
.read(
tabRepositoryProvider
.notifier,
)
.closeTab(selectedTabId);
trippleDotMenuController.close();
},
icon: const Icon(Icons.close),
),
await controller.goBack();
trippleDotMenuController
.close();
},
icon: const Icon(
Icons.arrow_back,
),
)
: IconButton(
onPressed: () async {
await ref
.read(
tabRepositoryProvider
.notifier,
)
.closeTab(selectedTabId);
trippleDotMenuController
.close();
},
icon: const Icon(Icons.close),
),
),
const SizedBox(
height: 48,
@@ -585,18 +595,20 @@ class BrowserScreen extends HookConsumerWidget {
),
Expanded(
child: IconButton(
onPressed: (history?.canGoForward == true)
? () async {
final controller = ref.read(
tabSessionProvider(
tabId: selectedTabId,
).notifier,
);
onPressed:
(history?.canGoForward == true)
? () async {
final controller = ref.read(
tabSessionProvider(
tabId: selectedTabId,
).notifier,
);
await controller.goForward();
trippleDotMenuController.close();
}
: null,
await controller.goForward();
trippleDotMenuController
.close();
}
: null,
icon: const Icon(Icons.arrow_forward),
),
),
@@ -640,20 +652,22 @@ class BrowserScreen extends HookConsumerWidget {
return displayedOverlayDialog!;
},
child: Listener(
onPointerDown: (displayedSheet != null)
? (_) {
ref
.read(bottomSheetControllerProvider.notifier)
.dismiss();
}
: null,
onPointerDown:
(displayedSheet != null)
? (_) {
ref
.read(bottomSheetControllerProvider.notifier)
.dismiss();
}
: null,
child: HookConsumer(
builder: (context, ref, child) {
return BackButtonListener(
onBackButtonPressed: () async {
final tabState = (selectedTabId != null)
? ref.read(tabStateProvider(selectedTabId))
: null;
final tabState =
(selectedTabId != null)
? ref.read(tabStateProvider(selectedTabId))
: null;
final tabCount = ref.read(
tabListProvider.select((tabs) => tabs.length),
@@ -698,8 +712,9 @@ class BrowserScreen extends HookConsumerWidget {
}
if (lastBackButtonPress.value != null &&
DateTime.now()
.difference(lastBackButtonPress.value!) <
DateTime.now().difference(
lastBackButtonPress.value!,
) <
const Duration(seconds: 2)) {
lastBackButtonPress.value = null;
@@ -718,13 +733,14 @@ class BrowserScreen extends HookConsumerWidget {
..clearSnackBars()
..showSnackBar(
SnackBar(
content: (tabCount > 1)
? const Text(
'Please click BACK again to close current tab',
)
: const Text(
'Please click BACK again to exit app',
),
content:
(tabCount > 1)
? const Text(
'Please click BACK again to close current tab',
)
: const Text(
'Please click BACK again to exit app',
),
),
);
@@ -744,16 +760,16 @@ class BrowserScreen extends HookConsumerWidget {
child: Consumer(
builder: (context, ref, child) {
final value = ref.watch(
selectedTabStateProvider.select(
(state) {
if (state?.isLoading == true) {
return state?.progress ?? 100;
}
selectedTabStateProvider.select((
state,
) {
if (state?.isLoading == true) {
return state?.progress ?? 100;
}
//When not loading we assumed finished
return 100;
},
),
//When not loading we assumed finished
return 100;
}),
);
return Visibility(
@@ -774,11 +790,13 @@ class BrowserScreen extends HookConsumerWidget {
final value = ref.watch(
selectedTabStateProvider.select(
(state) => EdgeInsets.only(
bottom: (state?.isLoading == true &&
state?.progress != null &&
state!.progress < 100)
? 4.0
: 0.0,
bottom:
(state?.isLoading == true &&
state?.progress !=
null &&
state!.progress < 100)
? 4.0
: 0.0,
),
),
);
@@ -794,7 +812,7 @@ class BrowserScreen extends HookConsumerWidget {
ModalBarrier(
color:
Theme.of(context).dialogTheme.barrierColor ??
Colors.black54,
Colors.black54,
),
],
),
@@ -806,22 +824,25 @@ class BrowserScreen extends HookConsumerWidget {
},
),
floatingActionButton: ReaderAppearanceButton(),
bottomSheet: (displayedSheet != null)
? NotificationListener<DraggableScrollableNotification>(
onNotification: (notification) {
if (notification.extent <= 0.1) {
ref.read(bottomSheetControllerProvider.notifier).dismiss();
return true;
} else {
ref
.read(bottomSheetExtendProvider.notifier)
.add(notification.extent);
}
bottomSheet:
(displayedSheet != null)
? NotificationListener<DraggableScrollableNotification>(
onNotification: (notification) {
if (notification.extent <= 0.1) {
ref
.read(bottomSheetControllerProvider.notifier)
.dismiss();
return true;
} else {
ref
.read(bottomSheetExtendProvider.notifier)
.add(notification.extent);
}
return false;
},
child: switch (displayedSheet) {
ViewTabsSheet() => HookBuilder(
return false;
},
child: switch (displayedSheet) {
ViewTabsSheet() => HookBuilder(
builder: (localContext) {
final draggableScrollableController =
useDraggableScrollableController();
@@ -855,7 +876,7 @@ class BrowserScreen extends HookConsumerWidget {
);
},
),
final CreateTabSheet parameter => DraggableScrollableSheet(
final CreateTabSheet parameter => DraggableScrollableSheet(
key: ValueKey(displayedSheet),
expand: false,
initialChildSize: 0.8,
@@ -883,7 +904,7 @@ class BrowserScreen extends HookConsumerWidget {
);
},
),
final TabQaChatSheet parameter => HookBuilder(
final TabQaChatSheet parameter => HookBuilder(
builder: (localContext) {
final draggableScrollableController =
useDraggableScrollableController();
@@ -937,9 +958,9 @@ class BrowserScreen extends HookConsumerWidget {
);
},
),
},
)
: null,
},
)
: null,
),
);
}
@@ -31,15 +31,9 @@ class AppBarTitle extends StatelessWidget {
size: 14,
);
} else if (!tab.isLoading) {
return const Icon(
MdiIcons.lock,
size: 14,
);
return const Icon(MdiIcons.lock, size: 14);
} else {
return const Icon(
MdiIcons.timerSand,
size: 14,
);
return const Icon(MdiIcons.timerSand, size: 14);
}
}
@@ -54,19 +48,11 @@ class AppBarTitle extends StatelessWidget {
Skeletonizer(
enabled: tab.icon == null,
child: Skeleton.replace(
replacement: const Bone.icon(
size: 16,
),
child: RawImage(
image: tab.icon?.value,
height: 16,
width: 16,
),
replacement: const Bone.icon(size: 16),
child: RawImage(image: tab.icon?.value, height: 16, width: 16),
),
),
const SizedBox(
width: 8,
),
const SizedBox(width: 8),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -82,8 +68,9 @@ class AppBarTitle extends StatelessWidget {
child: TextScroll(
key: ValueKey(tab.title),
tab.title,
style: theme.textTheme.bodyLarge
?.copyWith(color: theme.colorScheme.onSurface),
style: theme.textTheme.bodyLarge?.copyWith(
color: theme.colorScheme.onSurface,
),
// mode: TextScrollMode.bouncing,
velocity: const Velocity(pixelsPerSecond: Offset(75, 0)),
delayBefore: const Duration(milliseconds: 500),
@@ -99,14 +86,13 @@ class AppBarTitle extends StatelessWidget {
Row(
children: [
_securityStatusIcon(context),
const SizedBox(
width: 4,
),
const SizedBox(width: 4),
Expanded(
child: Text(
tab.url.authority,
style: theme.textTheme.bodyMedium
?.copyWith(color: theme.colorScheme.onSurface),
style: theme.textTheme.bodyMedium?.copyWith(
color: theme.colorScheme.onSurface,
),
),
),
],
@@ -42,17 +42,18 @@ class _BrowserViewState extends ConsumerState<BrowserView>
.read(selectedTabSessionNotifierProvider)
.requestScreenshot(requireImageResult: false)
.onError((error, stackTrace) {
logger.e(error, stackTrace: stackTrace);
timer.cancel();
logger.e(error, stackTrace: stackTrace);
timer.cancel();
return null;
});
return null;
});
}
@override
Widget build(BuildContext context) {
final hasTab =
ref.watch(selectedTabProvider.select((value) => value != null));
final hasTab = ref.watch(
selectedTabProvider.select((value) => value != null),
);
ref.listen(
selectedTabStateProvider.select(
@@ -68,43 +69,41 @@ class _BrowserViewState extends ConsumerState<BrowserView>
if (next.isLoading == false &&
(_periodicScreenshotUpdate?.isActive ?? false) == false) {
_timerPaused = false;
_periodicScreenshotUpdate =
Timer.periodic(widget.screenshotPeriod, _timerTick);
_periodicScreenshotUpdate = Timer.periodic(
widget.screenshotPeriod,
_timerTick,
);
}
},
);
return Visibility(
visible: hasTab,
replacement: SizedBox.expand(
child: Container(
color: Colors.grey[800],
),
),
replacement: SizedBox.expand(child: Container(color: Colors.grey[800])),
child: GeckoView(
preInitializationStep: () async {
await ref
.read(generalSettingsRepositoryProvider.notifier)
.fetch()
.then((settings) {
ref
.read(deleteBrowserDataServiceProvider.notifier)
.deleteData(settings.deleteBrowsingDataOnQuit);
});
ref
.read(deleteBrowserDataServiceProvider.notifier)
.deleteData(settings.deleteBrowsingDataOnQuit);
});
await ref
.read(eventServiceProvider)
.viewReadyStateEvents
.firstWhere((state) => state == true)
.timeout(
const Duration(seconds: 3),
onTimeout: () {
logger.e(
'Browser fragement not reported ready, trying to intitialize anyways',
const Duration(seconds: 3),
onTimeout: () {
logger.e(
'Browser fragement not reported ready, trying to intitialize anyways',
);
return true;
},
);
return true;
},
);
},
postInitializationStep: () async {
await widget.postInitializationStep?.call();
@@ -123,10 +122,7 @@ class _BrowserViewState extends ConsumerState<BrowserView>
ref.listenManual(tabRepositoryProvider, (previous, next) {});
ref.listenManual(documentRepositoryProvider, (previous, next) {});
ref.listenManual(
selectionActionServiceProvider,
(previous, next) {},
);
ref.listenManual(selectionActionServiceProvider, (previous, next) {});
ref.listenManual(
webExtensionsStateProvider(WebExtensionActionType.browser),
@@ -138,20 +134,14 @@ class _BrowserViewState extends ConsumerState<BrowserView>
(previous, next) {},
);
ref.listenManual(
cacheRepositoryProvider,
(previous, next) {},
);
ref.listenManual(cacheRepositoryProvider, (previous, next) {});
ref.listenManual(
engineSettingsReplicationServiceProvider,
(previous, next) {},
);
ref.listenManual(
proxySettingsReplucationProvider,
(previous, next) {},
);
ref.listenManual(proxySettingsReplucationProvider, (previous, next) {});
}
@override
@@ -173,8 +163,10 @@ class _BrowserViewState extends ConsumerState<BrowserView>
.evictCacheOnBackground();
case AppLifecycleState.resumed:
if (_timerPaused) {
_periodicScreenshotUpdate =
Timer.periodic(widget.screenshotPeriod, _timerTick);
_periodicScreenshotUpdate = Timer.periodic(
widget.screenshotPeriod,
_timerTick,
);
_timerPaused = false;
}
}
@@ -18,12 +18,7 @@ class DraggableScrollableHeader extends StatelessWidget {
onVerticalDragUpdate: (details) {
// Use the DraggableScrollableSheet's controller
controller.jumpTo(
min(
1,
controller.pixelsToSize(
controller.pixels - details.delta.dy,
),
),
min(1, controller.pixelsToSize(controller.pixels - details.delta.dy)),
);
},
child: child,
@@ -20,9 +20,7 @@ class EditUrlDialog extends HookWidget {
controller: urlController,
maxLines: null,
keyboardType: TextInputType.url,
decoration: const InputDecoration(
hintText: 'Enter URL',
),
decoration: const InputDecoration(hintText: 'Enter URL'),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter a URL';
@@ -25,9 +25,7 @@ class ErrorContainer extends StatelessWidget {
color: theme.colorScheme.onErrorContainer,
),
),
Expanded(
child: content,
),
Expanded(child: content),
],
),
);
@@ -15,11 +15,7 @@ class ExtensionBadgeIcon extends StatelessWidget {
label: hasBadge ? Text(state.badgeText!) : null,
textColor: state.badgeTextColor,
backgroundColor: state.badgeBackgroundColor,
child: RawImage(
image: state.icon?.value,
width: 24,
height: 24,
),
child: RawImage(image: state.icon?.value, width: 24, height: 24),
);
}
}
@@ -28,7 +28,8 @@ class LandingAction extends HookConsumerWidget {
await context.push(SettingsRoute().location);
}
},
data: '## No Kagi Session Provided\n'
data:
'## No Kagi Session Provided\n'
'Please navigate to [Settings](settings) and enter your Kagi Session Token.\n'
"You must provide a valid session in order to use Kagi's features.",
),
@@ -33,8 +33,9 @@ class LandingContent extends HookConsumerWidget {
children: [
Text(
'Lensai',
style:
textTheme.titleLarge?.copyWith(fontWeight: FontWeight.bold),
style: textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
Padding(
@@ -52,16 +53,17 @@ class LandingContent extends HookConsumerWidget {
const LandingAction(),
Consumer(
builder: (context, ref, child) {
final errors = ref
.watch(
appInitializationServiceProvider.select(
(result) => EquatableCollection(
result.valueOrNull?.errors,
immutable: false,
),
),
)
.collection;
final errors =
ref
.watch(
appInitializationServiceProvider.select(
(result) => EquatableCollection(
result.valueOrNull?.errors,
immutable: false,
),
),
)
.collection;
if (errors == null || errors.isEmpty) {
return const SizedBox.shrink();
@@ -70,35 +72,31 @@ class LandingContent extends HookConsumerWidget {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
...errors.map(
(error) {
final theme = Theme.of(context);
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: ErrorContainer(
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Error during App Initialization!',
style: theme.textTheme.titleMedium,
),
Text(
error.message,
style: theme.textTheme.titleSmall,
),
if (error.details != null)
Text(error.details.toString()),
],
),
...errors.map((error) {
final theme = Theme.of(context);
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: ErrorContainer(
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Error during App Initialization!',
style: theme.textTheme.titleMedium,
),
Text(
error.message,
style: theme.textTheme.titleSmall,
),
if (error.details != null)
Text(error.details.toString()),
],
),
);
},
),
const SizedBox(
height: 8,
),
),
);
}),
const SizedBox(height: 8),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: SizedBox(
@@ -138,14 +136,12 @@ class LandingContent extends HookConsumerWidget {
),
Text(
'Changelog',
style:
textTheme.titleLarge?.copyWith(fontWeight: FontWeight.bold),
style: textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
MarkdownBody(
data: changelogAsset.data ?? '',
selectable: true,
),
MarkdownBody(data: changelogAsset.data ?? '', selectable: true),
],
),
);
@@ -25,8 +25,9 @@ class CreateTabSheetWidget extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final sharedContent = useMemoized(
() => parameter.content
.mapNotNull((content) => SharedContent.parse(content)),
() => parameter.content.mapNotNull(
(content) => SharedContent.parse(content),
),
[parameter],
);
@@ -34,13 +35,12 @@ class CreateTabSheetWidget extends HookConsumerWidget {
() =>
parameter.preferredTool?.index ??
switch (sharedContent) {
SharedText(text: final _) => KagiTool.search.index
SharedText(text: final _) => KagiTool.search.index,
// (showEarlyAccessFeatures && text.length > 25)
// ? KagiTool.assistant.index
// : KagiTool.search.index,
,
SharedUrl() => KagiTool.summarizer.index,
null => KagiTool.search.index
null => KagiTool.search.index,
// showEarlyAccessFeatures
// ? KagiTool.assistant.index
// : KagiTool.search.index,
@@ -62,15 +62,12 @@ class CreateTabSheetWidget extends HookConsumerWidget {
},
);
useEffect(
() {
WidgetsBinding.instance.addPostFrameCallback((_) {
onActiveToolChanged?.call(KagiTool.values[initialIndex]);
});
return null;
},
[initialIndex],
);
useEffect(() {
WidgetsBinding.instance.addPostFrameCallback((_) {
onActiveToolChanged?.call(KagiTool.values[initialIndex]);
});
return null;
}, [initialIndex]);
return Column(
mainAxisSize: MainAxisSize.min,
@@ -82,10 +79,7 @@ class CreateTabSheetWidget extends HookConsumerWidget {
// icon: Icon(KagiTool.search.icon),
// text: 'Search',
// ),
Tab(
icon: Icon(KagiTool.summarizer.icon),
text: 'Summarize',
),
Tab(icon: Icon(KagiTool.summarizer.icon), text: 'Summarize'),
// if (showEarlyAccessFeatures)
// Tab(
// icon: Icon(KagiTool.assistant.icon),
@@ -102,10 +96,7 @@ class CreateTabSheetWidget extends HookConsumerWidget {
// sharedContent: sharedContent,
// onSubmit: onSubmit,
// ),
SummarizeTab(
sharedContent: sharedContent,
onSubmit: onSubmit,
),
SummarizeTab(sharedContent: sharedContent, onSubmit: onSubmit),
// if (showEarlyAccessFeatures)
// AssistantTab(
// sharedContent: sharedContent,
@@ -91,26 +91,19 @@ class _Tab extends HookConsumerWidget {
() => searchTextController.text.isNotEmpty,
);
useListenableCallback(
searchTextController,
() async {
await ref
.read(
tabSearchRepositoryProvider(TabSearchPartition.preview).notifier,
)
.addQuery(searchTextController.text);
},
);
useListenableCallback(searchTextController, () async {
await ref
.read(
tabSearchRepositoryProvider(TabSearchPartition.preview).notifier,
)
.addQuery(searchTextController.text);
});
return Material(
//Fix layout issue https://github.com/flutter/flutter/issues/78748#issuecomment-1194680555
child: Align(
child: Padding(
padding: const EdgeInsets.only(
right: 8.0,
left: 8.0,
top: 8.0,
),
padding: const EdgeInsets.only(right: 8.0, left: 8.0, top: 8.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
@@ -175,8 +168,9 @@ class _Tab extends HookConsumerWidget {
child: Consumer(
builder: (context, ref, child) {
final selectedContainer = ref.watch(
selectedContainerDataProvider
.select((value) => value.valueOrNull),
selectedContainerDataProvider.select(
(value) => value.valueOrNull,
),
);
return ContainerChips(
@@ -280,89 +274,79 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
[MediaQuery.of(context).size.width],
);
useEffect(
() {
final index = filteredTabIds.collection
.indexWhere((webView) => webView == activeTab);
useEffect(() {
final index = filteredTabIds.collection.indexWhere(
(webView) => webView == activeTab,
);
if (index > -1) {
final offset = (index ~/ 2) * itemHeight;
if (index > -1) {
final offset = (index ~/ 2) * itemHeight;
if (offset != sheetScrollController.offset) {
unawaited(
sheetScrollController.animateTo(
offset,
duration: const Duration(milliseconds: 200),
curve: Curves.easeInOut,
),
);
}
if (offset != sheetScrollController.offset) {
unawaited(
sheetScrollController.animateTo(
offset,
duration: const Duration(milliseconds: 200),
curve: Curves.easeInOut,
),
);
}
}
return null;
},
[filteredTabIds, activeTab],
);
return null;
}, [filteredTabIds, activeTab]);
final tabs = useMemoized(
() {
return filteredTabIds.collection
.mapIndexed(
(index, tabId) => CustomDraggable(
key: Key(tabId),
data: TabDragData(tabId),
child: Consumer(
child: _TabDraggable(
tabId: tabId,
activeTabId: activeTab,
onClose: onClose,
),
builder: (context, ref, child) {
final dragData = ref.watch(
willAcceptDropProvider.select((value) {
final dragTabId = switch (value) {
ContainerDropData() => value.tabId,
DeleteDropData() => value.tabId,
null => null,
};
return (dragTabId == tabId)
? value
: null;
}),
);
return switch (dragData) {
ContainerDropData() => Opacity(
opacity: 0.3,
child: Transform.scale(
scale: 0.9,
child: child,
),
),
DeleteDropData() => Opacity(
opacity: 0.3,
child: ColorFiltered(
colorFilter: const ColorFilter.mode(
Colors.red,
BlendMode.modulate,
),
child: child,
),
),
null => child!,
};
},
final tabs = useMemoized(() {
return filteredTabIds.collection
.mapIndexed(
(index, tabId) => CustomDraggable(
key: Key(tabId),
data: TabDragData(tabId),
child: Consumer(
child: _TabDraggable(
tabId: tabId,
activeTabId: activeTab,
onClose: onClose,
),
builder: (context, ref, child) {
final dragData = ref.watch(
willAcceptDropProvider.select((value) {
final dragTabId = switch (value) {
ContainerDropData() => value.tabId,
DeleteDropData() => value.tabId,
null => null,
};
return (dragTabId == tabId) ? value : null;
}),
);
return switch (dragData) {
ContainerDropData() => Opacity(
opacity: 0.3,
child: Transform.scale(
scale: 0.9,
child: child,
),
),
DeleteDropData() => Opacity(
opacity: 0.3,
child: ColorFiltered(
colorFilter: const ColorFilter.mode(
Colors.red,
BlendMode.modulate,
),
child: child,
),
),
null => child!,
};
},
),
)
.toList();
},
[
filteredTabIds,
activeTab,
],
);
),
)
.toList();
}, [filteredTabIds, activeTab]);
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 4.0),
@@ -381,8 +365,9 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
final oldIndex = positions.first.oldIndex;
final newIndex = positions.first.newIndex;
final containerRepository =
ref.read(containerRepositoryProvider.notifier);
final containerRepository = ref.read(
containerRepositoryProvider.notifier,
);
final tabId = filteredTabIds.collection[oldIndex];
final containerId = await ref
@@ -391,12 +376,14 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
final String key;
if (newIndex <= 0) {
key = await containerRepository
.getLeadingOrderKey(containerId);
key = await containerRepository.getLeadingOrderKey(
containerId,
);
} else if (newIndex >=
filteredTabIds.collection.length - 1) {
key = await containerRepository
.getTrailingOrderKey(containerId);
key = await containerRepository.getTrailingOrderKey(
containerId,
);
} else {
final orderAfterIndex = newIndex;
key = await containerRepository.getOrderKeyAfterTab(
@@ -414,12 +401,12 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
controller: sheetScrollController,
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
//Sync values for itemHeight calculation _calculateItemHeight
childAspectRatio: 0.75,
mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0,
crossAxisCount: 2,
),
//Sync values for itemHeight calculation _calculateItemHeight
childAspectRatio: 0.75,
mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0,
crossAxisCount: 2,
),
itemCount: children.length,
itemBuilder: (context, index) => children[index],
);
@@ -432,10 +419,7 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
],
),
Padding(
padding: const EdgeInsets.only(
top: _Tab.headerSize + 4,
right: 4,
),
padding: const EdgeInsets.only(top: _Tab.headerSize + 4, right: 4),
child: FloatingActionButton.small(
onPressed: () async {
await context.push(const SearchRoute().location);
@@ -51,8 +51,10 @@ class TabPreview extends StatelessWidget {
),
),
IconButton(
visualDensity:
const VisualDensity(horizontal: -4.0, vertical: -4.0),
visualDensity: const VisualDensity(
horizontal: -4.0,
vertical: -4.0,
),
onPressed: onDelete,
icon: const Icon(Icons.close),
),
@@ -60,17 +62,9 @@ class TabPreview extends StatelessWidget {
),
Row(
children: [
const SizedBox(
width: 6.0,
),
RawImage(
image: tab.icon?.value,
height: 16,
width: 16,
),
const SizedBox(
width: 6.0,
),
const SizedBox(width: 6.0),
RawImage(image: tab.icon?.value, height: 16, width: 16),
const SizedBox(width: 6.0),
Expanded(
child: Text(
tab.url.authority,
@@ -79,9 +73,7 @@ class TabPreview extends StatelessWidget {
),
],
),
const SizedBox(
height: 6,
),
const SizedBox(height: 6),
if (tab.thumbnail != null)
Expanded(
child: ClipRRect(
@@ -24,17 +24,15 @@ class TabsActionButton extends HookConsumerWidget {
onTap: onTap,
onLongPress: onLongPress,
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 8.0,
vertical: 15.0,
),
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 15.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(
width: 2.0,
color: isActive
? theme.colorScheme.primary
: DefaultTextStyle.of(context).style.color!,
color:
isActive
? theme.colorScheme.primary
: DefaultTextStyle.of(context).style.color!,
),
borderRadius: BorderRadius.circular(5.0),
),