h-1.flutter.4/lib/screens/estimate_screen.dart

87 lines
No EOL
2.9 KiB
Dart

// Version: 1.5 - 見積書画面(簡易実装)
import 'package:flutter/material.dart';
import '../models/customer.dart';
/// 見積書作成画面
class EstimateScreen extends StatefulWidget {
const EstimateScreen({super.key});
@override
State<EstimateScreen> createState() => _EstimateScreenState();
}
class _EstimateScreenState extends State<EstimateScreen> {
Customer? _selectedCustomer;
List<Customer> _customers = [];
DateTime? _expiryDate;
@override
void initState() {
super.initState();
_loadCustomers();
}
Future<void> _loadCustomers() async {
// TODO: DatabaseHelper.instance.getCustomers() を使用
setState(() => _customers = []);
}
/// 見積有効期限を設定(簡易)
void setExpiryDate(DateTime date) {
setState(() => _expiryDate = date);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('見積書')),
body: _selectedCustomer == null
? const Center(child: Text('得意先を選択してください'))
: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// 見積有効期限設定エリア(簡易)
ListTile(
contentPadding: EdgeInsets.zero,
title: const Text('見積有効期限'),
subtitle: _expiryDate != null ? Text('${_expiryDate!.day}/${_expiryDate!.month}') : const Text('-'),
trailing: IconButton(icon: const Icon(Icons.calendar_today), onPressed: () {
// TODO: デイティピッカーの実装
}),
),
const Divider(),
// 合計金額表示(簡易)
Card(
child: ListTile(
contentPadding: EdgeInsets.zero,
title: const Text('見積書合計'),
subtitle: const Text('¥0.00'),
trailing: IconButton(icon: const Icon(Icons.edit), onPressed: () {}),
),
),
const SizedBox(height: 16),
// PDF 帳票出力ボタン(簡易)
TextButton.icon(
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('PDF 帳票生成中...')),
);
},
icon: const Icon(Icons.download),
label: const Text('PDF をダウンロード'),
),
],
),
),
),
);
}
}