diff --git a/lib/src/components/atoms/console.dart b/lib/src/components/atoms/console.dart index 4d7e299..dfe803d 100644 --- a/lib/src/components/atoms/console.dart +++ b/lib/src/components/atoms/console.dart @@ -22,6 +22,7 @@ class Console extends HookWidget { Widget build(BuildContext context) { final output = useStream(fvmStdoutProvider); final lines = useState>(['']); + final consoleScrollController = ScrollController(); useEffect(() { lines.value.insert(0, output.data ?? ''); @@ -73,7 +74,9 @@ class Console extends HookWidget { ), ), secondChild: CupertinoScrollbar( + controller: consoleScrollController, child: ListView.builder( + controller: consoleScrollController, primary: false, shrinkWrap: true, reverse: true, diff --git a/lib/src/modules/fvm/dialogs/cleanup_unused_dialog.dart b/lib/src/modules/fvm/dialogs/cleanup_unused_dialog.dart index dd3432d..d9cf733 100644 --- a/lib/src/modules/fvm/dialogs/cleanup_unused_dialog.dart +++ b/lib/src/modules/fvm/dialogs/cleanup_unused_dialog.dart @@ -9,6 +9,7 @@ import '../fvm_queue.provider.dart'; Future cleanupUnusedDialog(BuildContext context, WidgetRef ref) async { final unusedVersions = ref.read(unusedVersionProvider); + final scrollController = ScrollController(); if (unusedVersions.isEmpty) { notify(context @@ -52,7 +53,9 @@ Future cleanupUnusedDialog(BuildContext context, WidgetRef ref) async { content: Container( constraints: const BoxConstraints(maxWidth: 350, maxHeight: 300), child: CupertinoScrollbar( + controller: scrollController, child: SingleChildScrollView( + controller: scrollController, child: Column( children: [ Text( diff --git a/lib/src/modules/projects/projects.screen.dart b/lib/src/modules/projects/projects.screen.dart index 45b9a59..81bdf32 100644 --- a/lib/src/modules/projects/projects.screen.dart +++ b/lib/src/modules/projects/projects.screen.dart @@ -29,6 +29,7 @@ class ProjectsScreen extends HookConsumerWidget { final settings = ref.watch(settingsProvider); final filteredProjects = useState(projects); + final projectsScrollController = ScrollController(); Future onRefresh() async { await ref.read(projectsProvider.notifier).load(); @@ -99,9 +100,11 @@ class ProjectsScreen extends HookConsumerWidget { child: projects.isEmpty ? const EmptyProjects() : CupertinoScrollbar( + controller: projectsScrollController, child: Padding( padding: const EdgeInsets.only(left: 10), child: ResponsiveGridList( + controller: projectsScrollController, desiredItemWidth: 290, minSpacing: 0, children: filteredProjects.value.map((project) { diff --git a/lib/src/modules/sandbox/sandbox.screen.dart b/lib/src/modules/sandbox/sandbox.screen.dart index 32026c2..b29ef65 100644 --- a/lib/src/modules/sandbox/sandbox.screen.dart +++ b/lib/src/modules/sandbox/sandbox.screen.dart @@ -31,6 +31,7 @@ class SandboxScreen extends HookConsumerWidget { final processing = ref.watch(sandboxProvider).processing; final selectedRelease = useState(null); + final sandboxScrollController = ScrollController(); useEffect(() { if (selectedRelease.value == null && releases.all.isNotEmpty) { @@ -96,9 +97,11 @@ class SandboxScreen extends HookConsumerWidget { const Divider(height: 1), Expanded( child: CupertinoScrollbar( + controller: sandboxScrollController, child: Padding( padding: const EdgeInsets.all(15.0), child: ListView( + controller: sandboxScrollController, children: releases.all.map( (version) { if (version.name == selectedRelease.value?.name) { diff --git a/lib/src/modules/selected_detail/components/info_drawer.dart b/lib/src/modules/selected_detail/components/info_drawer.dart index 3f1cbd8..8529427 100644 --- a/lib/src/modules/selected_detail/components/info_drawer.dart +++ b/lib/src/modules/selected_detail/components/info_drawer.dart @@ -22,6 +22,7 @@ class SelectedDetailDrawer extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final detail = ref.watch(selectedDetailProvider); final selected = detail?.release; + final detailScrollController = ScrollController(); void onClose() { // Close drawer if its not large layout @@ -82,7 +83,9 @@ class SelectedDetailDrawer extends ConsumerWidget { ), ), body: CupertinoScrollbar( + controller: detailScrollController, child: ListView( + controller: detailScrollController, primary: false, children: [ ReferenceInfoTile(selected),