build method
Builds the app's root widget tree, applying theme and navigation.
This nuanced method constructs the UI by providing ArcaneTheme via Pylon, then conditionally builds ShadcnApp for router or standard modes. It applies theme extensions to ThemeData (shadThemeData, materialThemeData, cupertinoThemeData), configures navigation with Navigator or RouterDelegate/RouteInformationParser, and sets up localizations (LocalizationsDelegates) and scroll behavior. Performance is optimized via cached routeFactory, merged routes, and inline physics application, ensuring efficient renders for complex UIs with SliverScreen or ChatScreen.
Key integrations: PopoverOverlayHandler for menus/popovers, BouncingScrollPhysics
default for native feel, and debug tools for overlay/semantics. Merges routes to
support Arcane defaults, enabling seamless Sidebar
and BottomNavigationBar usage.
Implementation
@override
Widget build(BuildContext context) {
Widget s = Pylon<ArcaneTheme?>(
value: _theme,
builder: (context) => usesRouter
? ShadcnApp.router(
menuHandler: PopoverOverlayHandler(),
popoverHandler: PopoverOverlayHandler(),
routeInformationProvider: widget.routeInformationProvider,
routeInformationParser: widget.routeInformationParser,
routerDelegate: widget.routerDelegate,
routerConfig: widget.routerConfig,
backButtonDispatcher: widget.backButtonDispatcher,
builder: widget.builder,
title: widget.title,
onGenerateTitle: widget.onGenerateTitle,
onNavigationNotification: widget.onNavigationNotification,
color: widget.color,
theme: currentTheme.shadThemeData,
locale: widget.locale,
localizationsDelegates: widget.localizationsDelegates,
localeListResolutionCallback: widget.localeListResolutionCallback,
localeResolutionCallback: widget.localeResolutionCallback,
supportedLocales: widget.supportedLocales,
debugShowMaterialGrid: widget.debugShowMaterialGrid,
showPerformanceOverlay: widget.showPerformanceOverlay,
showSemanticsDebugger: widget.showSemanticsDebugger,
debugShowCheckedModeBanner: widget.debugShowCheckedModeBanner,
shortcuts: widget.shortcuts,
actions: widget.actions,
restorationScopeId: widget.restorationScopeId,
scrollBehavior: currentTheme.scrollBehavior,
materialTheme: currentTheme.materialThemeData,
cupertinoTheme: currentTheme.cupertinoThemeData,
scaling: widget.scaling,
disableBrowserContextMenu: widget.disableBrowserContextMenu,
)
: ShadcnApp(
menuHandler: PopoverOverlayHandler(),
popoverHandler: PopoverOverlayHandler(),
navigatorKey: widget.navigatorKey,
home: widget.home,
routes: {
...widget.routes ?? {},
},
initialRoute: widget.initialRoute,
onGenerateRoute: routeFactory,
onGenerateInitialRoutes: widget.onGenerateInitialRoutes,
onUnknownRoute: widget.onUnknownRoute,
onNavigationNotification: widget.onNavigationNotification,
navigatorObservers: [...widget.navigatorObservers ?? []],
builder: widget.builder,
title: widget.title,
onGenerateTitle: widget.onGenerateTitle,
color: widget.color,
theme: currentTheme.shadThemeData,
locale: widget.locale,
localizationsDelegates: widget.localizationsDelegates,
localeListResolutionCallback: widget.localeListResolutionCallback,
localeResolutionCallback: widget.localeResolutionCallback,
supportedLocales: widget.supportedLocales,
debugShowMaterialGrid: widget.debugShowMaterialGrid,
showPerformanceOverlay: widget.showPerformanceOverlay,
showSemanticsDebugger: widget.showSemanticsDebugger,
debugShowCheckedModeBanner: widget.debugShowCheckedModeBanner,
shortcuts: widget.shortcuts,
actions: widget.actions,
restorationScopeId: widget.restorationScopeId,
scrollBehavior: currentTheme.scrollBehavior,
materialTheme: currentTheme.materialThemeData,
cupertinoTheme: currentTheme.cupertinoThemeData,
scaling: widget.scaling,
disableBrowserContextMenu: widget.disableBrowserContextMenu,
),
);
return s;
}