Status bar: the Orin at a glance over every view, like a phone's
Link on the left (with the menu on the Dash), then hot temperature, CAN, OBD while connected, GNSS fix and satellites, LTE, WiFi, UPS, and the dark/bright button. The Dash's own top line is gone into it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+23
-6
@@ -20,6 +20,7 @@ import 'shell_scope.dart';
|
||||
import 'theme/palette.dart';
|
||||
import 'widgets/link_status.dart';
|
||||
import 'widgets/mock_banner.dart';
|
||||
import 'widgets/status_bar.dart';
|
||||
|
||||
class AppShell extends StatefulWidget {
|
||||
const AppShell({
|
||||
@@ -53,7 +54,7 @@ class _AppShellState extends State<AppShell> {
|
||||
Widget _page(ShellView v) {
|
||||
final b = widget.boundary;
|
||||
return switch (v) {
|
||||
ShellView.dash => DashPage(boundary: b, themes: widget.themes),
|
||||
ShellView.dash => DashPage(boundary: b),
|
||||
ShellView.signals => SignalsPage(boundary: b, usb: widget.usb),
|
||||
ShellView.captures => Navigator(
|
||||
key: _captures,
|
||||
@@ -113,14 +114,30 @@ class _AppShellState extends State<AppShell> {
|
||||
},
|
||||
),
|
||||
body: ListenableBuilder(
|
||||
listenable: widget.boundary,
|
||||
listenable: Listenable.merge([widget.boundary, widget.themes]),
|
||||
builder: (context, child) => Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
if (widget.boundary.mock)
|
||||
const SafeArea(bottom: false, child: MockBanner()),
|
||||
// Pages draw their own top (app bars); keep every bottom clear of the system bar.
|
||||
Expanded(child: SafeArea(top: false, child: child!)),
|
||||
// The Orin's status over every view; the Dash, with no app bar, gets the menu in it.
|
||||
SafeArea(
|
||||
bottom: false,
|
||||
child: StatusBar(
|
||||
boundary: widget.boundary,
|
||||
themes: widget.themes,
|
||||
leading: current == ShellView.dash
|
||||
? MenuButton(color: AppTheme.of(context).subdued)
|
||||
: null,
|
||||
),
|
||||
),
|
||||
if (widget.boundary.mock) const MockBanner(),
|
||||
// The status bar took the top inset; keep every bottom clear of the system bar.
|
||||
Expanded(
|
||||
child: MediaQuery.removePadding(
|
||||
context: context,
|
||||
removeTop: true,
|
||||
child: SafeArea(top: false, child: child!),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: IndexedStack(
|
||||
|
||||
Reference in New Issue
Block a user