termos_ui 0.1.1
termos_ui: ^0.1.1 copied to clipboard
Maximalist Flutter UI widgets with dot-grid mesh, starfield particles, CRT scanlines, and themed controls.
termos_ui #
Maximalist Flutter widgets with a terminal-inspired look: an interactive dot-grid mesh that ripples under your finger, starfield glow, and CRT scanlines — wired into a themeable set of buttons, sliders, nav bars, and inputs.
[termos_ui widget gallery]
⚠️ Not ready for production use — the API is still settling and may change between releases.
Install #
flutter pub add termos_ui
Quick start #
Wrap your app (or any subtree) in a TermosTheme, then use the widgets:
import 'package:flutter/material.dart';
import 'package:termos_ui/termos_ui.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TermosTheme(
data: TermosThemeData.dark(),
child: Scaffold(
body: Center(
child: TermosButton(
label: const Text('Action'),
onTap: () {},
),
),
),
),
);
}
}
Prefer Material's theming? Register TermosThemeData as a ThemeExtension instead:
MaterialApp(
theme: ThemeData(extensions: [TermosThemeData.dark()]),
home: ...,
)
Widgets resolve the theme via TermosTheme.of(context), which checks the TermosTheme
inherited widget first, then the ThemeData extension, then a brightness-based default.
Factories: TermosThemeData.dark(), TermosThemeData.light().
Widgets #
| Widget | What it does |
|---|---|
TermosButton |
Primary CTA with dot-grid mesh and starfield; loading/saved states |
TermosBackButton |
Compact back control with starfield |
TermosNavBar |
Bottom tab bar with animated top-edge glow and PageController sync |
TermosTabBar |
Scrollable top tabs with a swipe-tracking glow |
TermosSegmentedSelector |
Horizontal segments with glow and starfield |
TermosSwitch |
Particle-style ON/OFF toggle |
TermosSlider · TermosFloatingSlider · TermosContinuousSlider · TermosDetailedSlider |
Discrete, floating-label, continuous, and major/minor-tick sliders |
TermosTextField |
Text input with dot-grid, edge glow, and focus starfield |
TermosTimePicker |
Drum-wheel picker with CRT band and scanlines |
TermosExpandableSection |
Tap-to-expand card |
TermosLoadingIndicator |
Small spinner or large comet-orbit animation |
TermosCrt |
CRT wrapper: scanlines, vignette, bezel |
Lower-level building blocks are exported too: DotGridWidget/DotGridController/DotGridGroup
(the mesh engine), TermosTapTarget (dot-grid tap feedback), and the painters
ReactiveStarfieldPainter, GlowTopBorderPainter, ScanlinesPainter, and EdgeGlowPainter.
Every widget's constructor is documented inline — see the source or your IDE's autocomplete for the full parameter list.
Gallery #
| [Button] | [Nav bar] | [Segmented] |
| Button | Nav bar | Segmented |
| [Switch] | [Sliders] | [Text field] |
| Switch | Sliders | Text field |
| [Time picker] | [CRT] | [Loader] |
| Time picker | CRT | Loader |
Theming #
TermosThemeData aggregates design tokens and supports copyWith and lerp (for animated
theme transitions):
| Token | Controls |
|---|---|
TermosColors |
Semantic palette (primary, surface, text levels, status colors) |
TermosTextStyles |
Typography roles |
TermosMetrics |
Radii, heights, paddings, durations |
DotGridConfig |
Dot size, spacing, blob radius |
TermosStarfieldConfig |
Starfield glow positions and intensity |
| Effect configs | Per-widget tuning: TermosNavBarEffects, TermosButtonEffects, TermosCrtEffects, … |
Lighter visuals: set heavyEffectsEnabled: false to drop the dot-grid mesh, starfield, and
CRT overlays. Widgets fall back to simpler Material-style visuals with the same layout and colors.
Accessibility #
All interactive widgets expose Semantics for screen readers — button roles with labels,
toggled state on the switch, selected state on nav/segments, slider roles with current
value, and a labelled time picker.
Example #
A full interactive gallery with live theme/color controls lives in example/:
cd example
flutter run
License #
See LICENSE.
