radartui 0.0.3
radartui: ^0.0.3 copied to clipboard
A Flutter-inspired TUI framework for Dart. Build terminal UIs with declarative widgets, state management, diff-based rendering, and a rich widget library.
Changelog #
0.0.3 - 2026-05-23 #
Foundation & Rendering #
- Fix
StyleCache._isValidstarting as true on empty cache - Fix
BoxConstraintsremove deadasBoxConstraintsgetter - Fix
RenderObject.layout()propagation chain — usemarkNeedsLayout() - Fix
ContainerRenderObjectMixin.childrenreturning mutable internal list - Add assert for non-negative
Sizedimensions - Fix
EdgeInsets.onlyparameter order to match Flutter (left, top, right, bottom) - Deprecate
Colorsclass in favor ofColorstatic constants - Fix
TextStyle.mergedoc comment to reflect union semantics
Widget Bug Fixes #
- Fix checkbox, radio, toggle border rendering (correct positions
[ ],( )) - Fix textfield vertical border not rendering (
bufferHeightnot passed) - Fix card
_resolveDimensionignoring min/max constraints - Fix card and container negative child constraints
- Fix
DropdownButtonnull crash when value not in items + background width - Fix
DropdownButtongeneric typeTlost in menu render widget - Fix
LinearProgressIndicatorlosing null value (indeterminate mode dead code) - Fix
DataTableduplicate space-key handling and_focusedRowIndexout of bounds - Fix
DefaultTextStyle.maybeOfnever returning null - Fix
GridViewandListViewselectedIndex out of bounds on items change - Fix
FocusScope._removeNodeAtIndexnot decrementing currentIndex - Fix
FocusableState._swapFocusNodenot triggering onFocusChange - Fix
ScrollableStaterecreating controller on every didUpdateWidget - Rename
ScrollController.animateTotojumpTo(no animation implemented) - Fix
FutureBuilderunsafe castAsyncSnapshot<Never> as AsyncSnapshot<T> - Fix
ExpansionTileaccessing controller private field instead of public API - Fix
ListViewMediaQuery dependency not registered - Fix
LayoutBuilderunnecessary element unmount/remount on every layout
Framework Fixes #
- Fix
ComponentElementnever unmounting_child(memory leak) - Fix
InheritedElement.updatenotifying dependents after rebuild (wrong order) - Fix
ParentDataElementdouble-updating child in mount and update - Fix
TextFormFieldnot integrating withFormregistration (now extendsFormField<String>)
Stability Improvements #
- Fix
StreamBuildersetState after dispose from stream callbacks - Fix
Checkbox,Radio,LinearProgressIndicator,CircularProgressIndicatorAnimationController listener leaks - Fix
RawKeyboardcrashing on piped stdin (try-catch for echoMode/lineMode)
Structural Improvements #
- Refactor
Dividerto extract shared base classes, eliminating ~80 lines of duplication - Unify
Colors.→Color.usage across theme and dialog widgets - Fix
foundation.dartexport ordering
Documentation #
- Add
TESTING.md,ROADMAP.md,doc/ARCHITECTURE.md,doc/CONVENTIONS.md - Update
AGENTS.mdwith TDD enforcement, feature checklist, and super.key clarification
0.0.2 - 2026-04-05 #
- Expand pubspec description for pub.dev compliance
- Upgrade
ffidependency to^2.0.0 - Add
platformsfield (linux, macos, windows) - Improve README with pub.dev badges and widget catalog
- Add dartdoc comments to public API elements
- Exclude log files and dev-only files from published package
0.0.1 - 2026-04-05 #
Initial release of RadarTUI.
Core Framework #
- Flutter-like Widget, Element, RenderObject architecture
StatelessWidget,StatefulWidget,InheritedWidget- Layout system:
Row,Column,Flex,Stack,Positioned,Wrap,Grid - Basic widgets:
Text,Container,Button,TextField,Checkbox,Radio - Advanced widgets:
DataTable,TabBar/TabBarView,DropdownButton,Icon,ListView,GridView - Navigation:
Navigator,Route,Dialog - Focus management system
- Theme system (
Theme,DefaultTextStyle,MediaQuery) - Animation system (
AnimationController,Tween,CurvedAnimation,Curves) - Form widgets:
Form,FormField,TextFormField - Async widgets:
StreamBuilder,FutureBuilder - Keyboard shortcuts:
Shortcuts,Actions,ShortcutActionsHandler - Widget testing framework
2026-04-01: Phase 4 Animation System #
Core Animation Classes #
Animation<T>abstract base with value/status getters and listener managementAnimationControllertimeline controller (0.0 → 1.0) using SchedulerBindingTween<T>/ColorTweenvalue interpolation (TUI: snaps at midpoint for discrete ANSI colors)CurvedAnimationapplies easing curves to parent animationCurve/Curves- linear, easeIn, easeOut easing functions
Widget Integration #
Button- focus/unfocus color animation (150ms, easeOut)Checkbox- check/uncheck color animation (100ms)Radio- select/deselect color animation (100ms)
Infrastructure #
- Added persistent frame callbacks to
SchedulerBinding FocusableStatemixin - addedonFocusChangehook
Test Coverage #
- 856 tests passing (829 → 856)
2026-03-31: Phase 1 Widgets #
IndexedStackwidgetTabBar/TabBarViewwithTabControllerDropdownButton<T>andDropdownMenuItem<T>Shortcuts/Actions/ShortcutActionsHandler/Intent/ActionRichText/TextSpanDefaultTextStyleIconwidgetDataTablewith sorting and selection
2025-10-19: Async Widgets #
- Added
StreamBuilder<T>,FutureBuilder<T>,AsyncSnapshot<T> - Flutter API compatible
2025-03-22: Major Architecture Improvements #
Phase 1: Critical Bug Fixes #
- Layout caching (constraints change detection in
RenderObject.layout()) - ParentData initialization via
setupParentData()method - Stack Positioned bug fix (bottom/right positioning)
- TextField border overflow protection
Phase 2: Test Coverage Expansion #
- Added
framework_test.dart(Element/Widget lifecycle) - Added
flex_test.dart(Flex layout algorithm) - Added
stack_test.dart(Stack/Positioned) - Added
text_test.dart(Text/RenderText with multiline) - Test count: 362 → 503
Phase 3: Performance Improvements #
RenderObjectWithChildMixin<C>for single-child render objectsRelayoutBoundarysupport inRenderObject- ListView virtualization with
ScrollController - InheritedWidget dependency cleanup (memory leak fix)
Phase 4: Feature Additions #
- Text multiline support (
softWrap,maxLines,overflow) TextSelectionclass for text range selectionClipboardclass for copy/paste operationsForm,FormField<T>,TextFormFieldwidgetsWrapwidget withWrapAlignment,WrapCrossAlignment- Word navigation in TextField (
moveCursorWordLeft,moveCursorWordRight)
2025-03: Core Framework Improvements #
Phase 1: Critical Bug Fixes #
- StatefulElement.unmount, ListView.dispose, ContainerRenderObjectMixin.remove
Phase 2: Key System #
- Key, LocalKey, ValueKey
Phase 3: InheritedWidget #
- InheritedWidget, MediaQuery, Theme
Phase 4: Positioned Widget #
- Positioned widget, ParentDataWidget pattern
Phase 5: Focus System #
- Refactored Focus System (explicit register/unregister)
Phase 6: Code Quality #
- Type safety, super.key, @override annotations
Phase 7: Widget Enhancements #
- Spacer, ListView
Phase 8: Test Coverage #
- ListView, TextEditingController, Button, Checkbox, Radio, Spacer
Phase 9: Navigation #
- Route lifecycle, canPop, ModalRoute FocusScope