FlutterInit Extended UI is the generated widget kit under lib/src/shared/widgets/ui/. Every project gets adaptive App widgets. Turn on shadcn_ui and you also get ShadApp wrappers with matching constructors, so auth and home can change kits without a rewrite.
Architecture and state get you a clean tree. UI still does not. Teams invent buttons, fields, and empty states per screen, then argue about iOS vs Android chrome later.
Extended UI puts one kit in the repo from generate time: one import path, design tokens, a debug showcase, and notes in DESIGN.md so agents stop inventing EdgeInsets.all(13).
Folder layout
Import through your shared barrel, usually imports.dart. Prefer AppButton over raw ElevatedButton or CupertinoButton.
Platform style
AppPlatformScope sets how App widgets render:
Resolution order, highest wins:
Per-widget platform:
Nearest AppPlatformScope
If adaptive, Material on Android and Cupertino on iOS/macOS from ThemeData.platform
Colors still come from your seed ColorScheme. Forcing Cupertino does not invent a second palette.
I default projects to adaptive unless the product is clearly Material-only, like many web clients, or iOS-first.
Building a screen
Generated login, signup, home, and onboarding already use the kit. A form looks like this:
Keep spacing and type on tokens: AppSpacing, context.textTheme, context.colors. DESIGN.md explained covers the full contract.
In debug builds, open /debug/ui-showcase, routed as AppRoutes.uiShowcase, to browse the kit without a scratch screen.
Adding shadcn_ui
On UI & theme, select shadcn_ui. Generation adds:
shadcn_ui in pubspec.yaml. Needs Flutter SDK 3.41 or newer.
buildShadLightTheme / buildShadDarkTheme from the same seed as Material
ShadApp wrappers under ui/shadcn/ with the same params as App
Feature templates swap names through Handlebars partials. Same screen tree, different widget:
Partial
App kit
shadcn as default kit
ui/button
AppButton
ShadAppButton
ui/text_field
AppTextField
ShadAppTextField
ui/card
AppCard
ShadAppCard
Default app when shadcn is on
Choice
Root
Screens default to
MaterialApp
MaterialApp with shadcn wrap
App
CupertinoApp
CupertinoApp with shadcn wrap
App
ShadApp
ShadApp as theme host
ShadApp
Both kits stay exported when shadcn is enabled. You can call AppButton from a ShadApp project if you want a native control in one place.