third commit

This commit is contained in:
2026-07-31 17:06:52 +05:30
parent d9886880cc
commit 9891a69a5f
32 changed files with 2083 additions and 557 deletions

View File

@@ -24,11 +24,27 @@ class PageHeader extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final compact = layout.sidebarIsDrawer;
// Measured from the header's own box, not the window. The window can be
// wide while this column is narrow — the sidebar and the docked bill both
// take from it — which is how the status chrome ended up overflowing.
return LayoutBuilder(
builder: (context, box) {
final showStatus = box.maxWidth >= 720;
return _bar(context, ref, compact, showStatus);
},
);
}
Widget _bar(
BuildContext context,
WidgetRef ref,
bool compact,
bool showStatus,
) {
final module = ref.watch(activeModuleProvider);
final now = ref.watch(clockProvider).value ?? DateTime.now();
final compact = layout.sidebarIsDrawer;
// Status chrome is the first thing dropped when width gets tight.
final showStatus = MediaQuery.sizeOf(context).width >= 1180;
return Container(
constraints: const BoxConstraints(minHeight: AppSizes.headerHeight),
@@ -76,7 +92,7 @@ class PageHeader extends ConsumerWidget {
const Spacer(),
if (showStatus) ...[
const _LivePill(),
_LivePill(offline: ref.watch(simulateOfflineProvider)),
const SizedBox(width: AppSpacing.lg),
Text(
Formatters.time(now),
@@ -139,7 +155,9 @@ class _Breadcrumb extends StatelessWidget {
}
class _LivePill extends StatefulWidget {
const _LivePill();
const _LivePill({required this.offline});
final bool offline;
@override
State<_LivePill> createState() => _LivePillState();
@@ -160,40 +178,48 @@ class _LivePillState extends State<_LivePill>
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(
horizontal: AppSpacing.md,
vertical: AppSpacing.xs + 2,
),
decoration: BoxDecoration(
color: AppColors.successSurface,
borderRadius: AppRadius.brPill,
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
FadeTransition(
opacity: _c,
child: Container(
width: 7,
height: 7,
decoration: const BoxDecoration(
color: AppColors.success,
shape: BoxShape.circle,
final offline = widget.offline;
final tone = offline ? AppColors.warning : AppColors.success;
final surface =
offline ? AppColors.warningSurface : AppColors.successSurface;
return Tooltip(
message: offline
? 'Simulate offline is ON in Settings — imports and syncs are being '
'failed deliberately.'
: 'Terminal is operating normally.',
child: Container(
padding: const EdgeInsets.symmetric(
horizontal: AppSpacing.md,
vertical: AppSpacing.xs + 2,
),
decoration: BoxDecoration(
color: surface,
borderRadius: AppRadius.brPill,
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
FadeTransition(
opacity: _c,
child: Container(
width: 7,
height: 7,
decoration: BoxDecoration(color: tone, shape: BoxShape.circle),
),
),
),
const SizedBox(width: AppSpacing.xs + 2),
const Text(
'LIVE',
style: TextStyle(
color: AppColors.success,
fontSize: 10.5,
fontWeight: FontWeight.w700,
letterSpacing: 0.8,
const SizedBox(width: AppSpacing.xs + 2),
Text(
offline ? 'OFFLINE (SIM)' : 'LIVE',
style: TextStyle(
color: tone,
fontSize: 10.5,
fontWeight: FontWeight.w700,
letterSpacing: 0.8,
),
),
),
],
],
),
),
);
}