Files
clide/lib/widgets/src/clide_scrollbar.dart
T
jpmschweitzerandClaude Opus 4.8 18cd945380 refactor(theme): route consumer reads through ClideSettings.theme (T-473)
Migrate ClideTheme.of(context) reads across the widget, feature, and shell
layers to the unified ClideSettings.theme.of(context) facade (D-101), so
theme/i18n/fonts/settings share one widget-facing entry. The facade delegates
straight to ClideTheme, so behaviour is unchanged — goldens are unmoved.

The low-level theme provider keeps its direct ClideTheme.of: the facade is
built on it, and the two kernel sites (ClideTheme's own definition + the
panels drag-resize widget) stay direct to avoid a widgets→kernel import cycle.
Dead controller.dart/kernel.dart imports left by the sweep removed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 21:47:15 +02:00

35 lines
1.2 KiB
Dart

import 'package:clide/widgets/src/clide_settings.dart';
import 'package:flutter/widgets.dart';
/// Thin themed scrollbar. Tier-0 shell; more refined scrolling (velocity
/// multiplier, keyboard nav) lands with the editor.
class ClideScrollbar extends StatelessWidget {
const ClideScrollbar({super.key, required this.controller, required this.child, this.axis = Axis.vertical});
final ScrollController controller;
final Widget child;
final Axis axis;
@override
Widget build(BuildContext context) {
final tokens = ClideSettings.theme.of(context).surface;
return ScrollbarTheme(
slider: tokens.scrollbarSlider,
sliderHover: tokens.scrollbarSliderHover,
track: tokens.scrollbarTrack,
child: RawScrollbar(controller: controller, thumbColor: tokens.scrollbarSlider, thickness: 8, radius: const Radius.circular(4), child: child),
);
}
}
class ScrollbarTheme extends InheritedWidget {
const ScrollbarTheme({super.key, required this.slider, required this.sliderHover, required this.track, required super.child});
final Color slider;
final Color sliderHover;
final Color track;
@override
bool updateShouldNotify(ScrollbarTheme old) => slider != old.slider || sliderHover != old.sliderHover || track != old.track;
}