What's New in Flint Dart
Highlights from the latest Flint Dart and Flint UI releases.
JSON-Safe Flint Page Props
Flint Dart now sanitizes res.page() props before embedding them in the browser payload, including DateTime, Uri, enum values, models, maps, iterables, and objects with toJson() or toMap().
Fresh Child Component Values
Flint UI now replaces child components by default during parent rebuilds, so constructor-provided values stay current without requiring updateFrom for ordinary display components.
Explicit Component Lifecycle Bases
StatefulComponent and StatelessComponent make lifecycle intent clear. Component remains backwards-compatible, while components that must survive parent rebuilds can opt in with preserveState.
Hosted Package Deployment
The docs app now targets hosted pub.dev versions of flint_dart and flint_ui, keeping deployment independent of GitHub package overrides.
Flint UI Components
Flint UI now lets docs pages and app screens be built with Dart components, state, events, and inline DartStyle without leaving the Dart ecosystem.
Clear App Folder Structure
Docs now show a cleaner project shape with controllers, models, routes, UI pages, shared layouts, and reusable components organized in predictable folders.
Safer Column Renames
Column(renamedFrom: ...) lets migrations rename existing columns without dropping user data, with warnings for risky case-only renames.
Column Comments & Placement
Schema columns now support comment metadata and MySQL-only after placement for cleaner migrated tables.
Cleaner Controller Routes
app.controller(...) gives route groups a concise, request-scoped controller API while still creating a fresh controller for every request.
Password Reset Code Checks
Auth.verifyPasswordResetCode(...) lets apps validate reset codes before changing a password, and resetPasswordWithCode(...) now shares the same verification logic.
Auth Verification Wrapper
AuthVerification.verifyPasswordResetCode(...) keeps extension-based auth flows aligned with the new core reset-code verifier.
Async Auth Errors Covered
Exception middleware regression coverage now includes awaited async handlers that throw AuthException.
Unified Request Input
validate(), input(), allInput(), and rawBody() now cover JSON, forms, multipart fields, files, query params, and route params through one request API.
WebSocket Namespaces
WebSocket rooms are now isolated by path, with explicit cross-namespace helpers like emitToRoomIn(...) and emitToNamespace(...).
Safer WebSocket Payloads
emit(...) and sendJson(...) now normalize values like DateTime, collections, exceptions, and objects with toMap() or toJson() before encoding.
Swagger Knows WebSockets
Generated docs now include app.websocket(...) handshake routes with 101 Switching Protocols and Flint-specific metadata.
Seeder Registry First
The docs now emphasize lib/config/seeder_registry.dart as the canonical entry point for flint --db-seed.
ORM Query Fixes
orWhere(...) now compiles consistently across select, update, delete, and model helpers, and all() preserves any query filters you chained before it.
Context-First Docs
All core docs now use (Context ctx) examples for better autocomplete and consistency.
Build routes, controllers, APIs, docs, and browser UI from one Dart-shaped stack.