162 lines
5.5 KiB
Dart
162 lines
5.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import 'sales_report_screen.dart';
|
|
|
|
class SalesDashboardScreen extends StatelessWidget {
|
|
const SalesDashboardScreen({super.key});
|
|
|
|
void _openAnalytics(BuildContext context) {
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(builder: (_) => const SalesReportScreen()),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final theme = Theme.of(context);
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
leading: const BackButton(),
|
|
title: const Text('R0:売上ダッシュボード'),
|
|
backgroundColor: Colors.indigo,
|
|
foregroundColor: Colors.white,
|
|
),
|
|
body: ListView(
|
|
padding: const EdgeInsets.all(16),
|
|
children: [
|
|
_buildHeroCard(theme),
|
|
const SizedBox(height: 16),
|
|
_buildLauncherCard(context, theme),
|
|
const SizedBox(height: 16),
|
|
_buildComingSoonCard(theme),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _buildHeroCard(ThemeData theme) {
|
|
return Container(
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
colors: [Colors.indigo.shade600, Colors.indigo.shade300],
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
),
|
|
borderRadius: BorderRadius.circular(20),
|
|
boxShadow: [
|
|
BoxShadow(
|
|
color: Colors.indigo.withValues(alpha: 0.25),
|
|
blurRadius: 16,
|
|
offset: const Offset(0, 8),
|
|
),
|
|
],
|
|
),
|
|
padding: const EdgeInsets.all(24),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
'売上管理モジュール',
|
|
style: theme.textTheme.titleLarge?.copyWith(
|
|
color: Colors.white,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
const SizedBox(height: 12),
|
|
Text(
|
|
'ダッシュボードはランチャーとして機能し、分析モジュールや将来のサブ機能へのエントリーポイントをまとめて提供します。',
|
|
style: theme.textTheme.bodyMedium?.copyWith(color: Colors.white70),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _buildLauncherCard(BuildContext context, ThemeData theme) {
|
|
return Card(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(20),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Row(
|
|
children: [
|
|
Icon(Icons.analytics_outlined, color: Colors.indigo.shade600),
|
|
const SizedBox(width: 8),
|
|
const Text(
|
|
'売上分析モジュール',
|
|
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 12),
|
|
const Text(
|
|
'年間売上やトップ顧客の内訳を詳細に確認したい場合はこちらからアクセスしてください。',
|
|
),
|
|
const SizedBox(height: 16),
|
|
Row(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Icon(Icons.check_circle, color: Colors.indigo),
|
|
const SizedBox(width: 8),
|
|
Expanded(
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: const [
|
|
Text('年度切り替え / ドキュメント種別フィルタ'),
|
|
SizedBox(height: 4),
|
|
Text('トップ顧客・月次トレンド・ドラフト状況の把握'),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 20),
|
|
FilledButton.icon(
|
|
onPressed: () => _openAnalytics(context),
|
|
style: FilledButton.styleFrom(
|
|
backgroundColor: Colors.indigo,
|
|
padding: const EdgeInsets.symmetric(vertical: 14, horizontal: 18),
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
|
|
),
|
|
icon: const Icon(Icons.open_in_new),
|
|
label: const Text('売上分析モジュールを開く'),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _buildComingSoonCard(ThemeData theme) {
|
|
return Card(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(20),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Row(
|
|
children: const [
|
|
Icon(Icons.extension, color: Colors.grey),
|
|
SizedBox(width: 8),
|
|
Text('近日提供予定のメニュー', style: TextStyle(fontWeight: FontWeight.bold)),
|
|
],
|
|
),
|
|
const SizedBox(height: 12),
|
|
const Text('・ 売掛残高の自動集計 / 着地予測'),
|
|
const Text('・ 商品カテゴリ別の利益率ダッシュボード'),
|
|
const Text('・ 重点顧客へのフォローアップリマインダー'),
|
|
const SizedBox(height: 12),
|
|
Text(
|
|
'ダッシュボードはランチャーとして、こうした追加モジュールへの入り口を順次揃えていきます。',
|
|
style: theme.textTheme.bodySmall,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|