Files
fin-tracker/app/lib/core/widgets/stale_banner.dart
T
Dmitry 62d36aa3e8 feat(app): новый визуальный язык, верхняя навигация, портфели, создание счетов и ручные события
Тема и общие виджеты (AssetIcon, ServiceMark, HelpTip, глоссарий), верхняя панель TopNav и вкладки Аналитики вместо NavSidebar, иконки PWA. Экраны: портфели, создание брокерского счёта, ручное событие, правка инструмента, Обзор карточками по скоупам и таблица активов, пересчёт метрик с опросом /metrics/status. design-system.md обновлён.
2026-09-19 22:14:21 +03:00

41 lines
1.4 KiB
Dart

import 'package:flutter/material.dart';
import '../utils/ru_date.dart';
/// "Нет соединения — данные на …": shown instead of pretending a screen built
/// from the offline cache is current. Pass the oldest `fetchedAt` among the
/// providers a screen watches (`core/cache/cached.dart`'s `oldestFetch`).
class StaleBanner extends StatelessWidget {
const StaleBanner({required this.fetchedAt, super.key});
final DateTime fetchedAt;
@override
Widget build(BuildContext context) {
final scheme = Theme.of(context).colorScheme;
final at = fetchedAt.toLocal();
final time =
'${at.hour.toString().padLeft(2, '0')}:${at.minute.toString().padLeft(2, '0')}';
return Container(
margin: const EdgeInsets.only(bottom: 12),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
decoration: BoxDecoration(
color: scheme.errorContainer,
borderRadius: BorderRadius.circular(8),
),
child: Row(
children: [
Icon(Icons.cloud_off, size: 18, color: scheme.onErrorContainer),
const SizedBox(width: 8),
Expanded(
child: Text(
'Нет соединения — данные на ${ruDate(at)} $time',
style: TextStyle(color: scheme.onErrorContainer),
),
),
],
),
);
}
}