avoid overflow of suggestions
This commit is contained in:
@@ -6,7 +6,7 @@ part of 'chat.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$kagiChatServiceHash() => r'80ead208a1d7ca0da98bd20f11c99efd0d682c8f';
|
String _$kagiChatServiceHash() => r'fda3874c955812fa62d555afaca352a3776dd692';
|
||||||
|
|
||||||
/// See also [KagiChatService].
|
/// See also [KagiChatService].
|
||||||
@ProviderFor(KagiChatService)
|
@ProviderFor(KagiChatService)
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
// ignore_for_file: use_setters_to_change_properties
|
// ignore_for_file: use_setters_to_change_properties
|
||||||
|
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:bang_navigator/features/search_browser/domain/entities/sheet.dart';
|
import 'package:bang_navigator/features/search_browser/domain/entities/sheet.dart';
|
||||||
import 'package:bang_navigator/features/search_browser/domain/services/create_tab.dart';
|
import 'package:bang_navigator/features/search_browser/domain/services/create_tab.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
import 'package:rxdart/rxdart.dart';
|
||||||
|
|
||||||
part 'providers.g.dart';
|
part 'providers.g.dart';
|
||||||
|
|
||||||
@@ -42,3 +45,23 @@ class BottomSheet extends _$BottomSheet {
|
|||||||
state = null;
|
state = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Riverpod(keepAlive: true)
|
||||||
|
class BottomSheetExtend extends _$BottomSheetExtend {
|
||||||
|
late StreamController<double> _extentStreamController;
|
||||||
|
|
||||||
|
void add(double extent) {
|
||||||
|
_extentStreamController.add(extent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Stream<double> build() {
|
||||||
|
_extentStreamController = StreamController();
|
||||||
|
ref.onDispose(() async {
|
||||||
|
await _extentStreamController.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
return _extentStreamController.stream
|
||||||
|
.sampleTime(const Duration(milliseconds: 50));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -37,5 +37,21 @@ final bottomSheetProvider =
|
|||||||
);
|
);
|
||||||
|
|
||||||
typedef _$BottomSheet = AutoDisposeNotifier<Sheet?>;
|
typedef _$BottomSheet = AutoDisposeNotifier<Sheet?>;
|
||||||
|
String _$bottomSheetExtendHash() => r'81ae254499d1d7f57309274b0f18747b94d6dda3';
|
||||||
|
|
||||||
|
/// See also [BottomSheetExtend].
|
||||||
|
@ProviderFor(BottomSheetExtend)
|
||||||
|
final bottomSheetExtendProvider =
|
||||||
|
StreamNotifierProvider<BottomSheetExtend, double>.internal(
|
||||||
|
BottomSheetExtend.new,
|
||||||
|
name: r'bottomSheetExtendProvider',
|
||||||
|
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||||
|
? null
|
||||||
|
: _$bottomSheetExtendHash,
|
||||||
|
dependencies: null,
|
||||||
|
allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef _$BottomSheetExtend = StreamNotifier<double>;
|
||||||
// ignore_for_file: type=lint
|
// ignore_for_file: type=lint
|
||||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
||||||
|
|||||||
@@ -357,6 +357,10 @@ class KagiScreen extends HookConsumerWidget {
|
|||||||
if (notification.extent <= 0.1) {
|
if (notification.extent <= 0.1) {
|
||||||
ref.read(bottomSheetProvider.notifier).dismiss();
|
ref.read(bottomSheetProvider.notifier).dismiss();
|
||||||
return true;
|
return true;
|
||||||
|
} else {
|
||||||
|
ref
|
||||||
|
.read(bottomSheetExtendProvider.notifier)
|
||||||
|
.add(notification.extent);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:bang_navigator/features/kagi/domain/repositories/autosuggest.dart';
|
import 'package:bang_navigator/features/kagi/domain/repositories/autosuggest.dart';
|
||||||
|
import 'package:bang_navigator/features/search_browser/domain/providers.dart';
|
||||||
import 'package:bang_navigator/features/search_browser/presentation/widgets/sheets/shared_content_sheet.dart';
|
import 'package:bang_navigator/features/search_browser/presentation/widgets/sheets/shared_content_sheet.dart';
|
||||||
import 'package:bang_navigator/features/search_browser/presentation/widgets/speech_to_text_button.dart';
|
import 'package:bang_navigator/features/search_browser/presentation/widgets/speech_to_text_button.dart';
|
||||||
import 'package:bang_navigator/features/search_browser/utils/url_builder.dart'
|
import 'package:bang_navigator/features/search_browser/utils/url_builder.dart'
|
||||||
@@ -87,6 +88,8 @@ class _AutocompleteOptions<T extends Object> extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class SearchTab extends HookConsumerWidget {
|
class SearchTab extends HookConsumerWidget {
|
||||||
|
static const _maxOptionsHeight = 158.0;
|
||||||
|
|
||||||
final SharedContent? sharedContent;
|
final SharedContent? sharedContent;
|
||||||
final OnSubmitUri onSubmit;
|
final OnSubmitUri onSubmit;
|
||||||
|
|
||||||
@@ -118,12 +121,24 @@ class SearchTab extends HookConsumerWidget {
|
|||||||
Consumer(
|
Consumer(
|
||||||
builder: (context, ref, child) {
|
builder: (context, ref, child) {
|
||||||
final optionsStream = ref.watch(autosuggestRepositoryProvider);
|
final optionsStream = ref.watch(autosuggestRepositoryProvider);
|
||||||
|
final openDirection = ref.watch(
|
||||||
|
bottomSheetExtendProvider.select((value) {
|
||||||
|
final extend = value.valueOrNull;
|
||||||
|
if (extend == null ||
|
||||||
|
(MediaQuery.of(context).size.height * (1 - extend)) >
|
||||||
|
_maxOptionsHeight) {
|
||||||
|
return OptionsViewOpenDirection.up;
|
||||||
|
} else {
|
||||||
|
return OptionsViewOpenDirection.down;
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
return ExternalResultsAutocomplete<String>(
|
return ExternalResultsAutocomplete<String>(
|
||||||
textEditingController: textController,
|
textEditingController: textController,
|
||||||
optionsStream: optionsStream,
|
optionsStream: optionsStream,
|
||||||
focusNode: focusNode,
|
focusNode: focusNode,
|
||||||
optionsViewOpenDirection: OptionsViewOpenDirection.up,
|
optionsViewOpenDirection: openDirection,
|
||||||
displayStringForOption:
|
displayStringForOption:
|
||||||
// ignore: avoid_redundant_argument_values
|
// ignore: avoid_redundant_argument_values
|
||||||
RawAutocomplete.defaultStringForOption,
|
RawAutocomplete.defaultStringForOption,
|
||||||
@@ -135,8 +150,8 @@ class SearchTab extends HookConsumerWidget {
|
|||||||
onSelected: onSelected,
|
onSelected: onSelected,
|
||||||
options: options,
|
options: options,
|
||||||
//Must match RawAutocomplete parent
|
//Must match RawAutocomplete parent
|
||||||
openDirection: OptionsViewOpenDirection.up,
|
openDirection: openDirection,
|
||||||
maxOptionsHeight: 200.0,
|
maxOptionsHeight: _maxOptionsHeight,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
onTextChanged: (textEditingValue) {
|
onTextChanged: (textEditingValue) {
|
||||||
|
|||||||
Reference in New Issue
Block a user