flutter-demo/lib/screens/item_screens/item_screen.dart
LingandRX b2217ae2be feat(category): 新增分类功能并重构相关屏幕
- 新增 CategoryScreen 屏幕用于显示分类- 新增 ItemCategory 模型类用于分类数据管理
- 新增 ItemCategoryRepository 用于分类数据持久化
- 新增 item_category_table 创建分类表结构
-重构 HomeScreen 底部导航栏,增加分类选项
- 重命名相关屏幕文件,统一命名规范
- 调整 ItemScreen 以适应新增的分类功能- 更新 SQLiteHelper 以支持分类表创建和默认分类插入
- 删除 StatisticsScreen 屏幕
2025-05-07 22:52:20 +08:00

162 lines
5.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:item_tracker/screens/item_screens/widgets/category_dropdown.dart';
import 'package:item_tracker/screens/item_screens/widgets/date_picker_field.dart';
import 'package:item_tracker/screens/item_screens/widgets/description_field.dart';
import 'package:item_tracker/screens/item_screens/widgets/item_is_use_selector.dart';
import 'package:item_tracker/screens/item_screens/widgets/location_input_field.dart';
import 'package:item_tracker/screens/item_screens/widgets/name_input_field.dart';
import 'package:item_tracker/screens/item_screens/widgets/price_input_field.dart';
import 'package:item_tracker/screens/item_screens/widgets/submit_button.dart';
import 'package:provider/provider.dart';
import 'package:item_tracker/models/item_model.dart';
import 'package:item_tracker/provider/item_provider.dart';
DateTime? selectedDate;
enum ItemIsUse {
yes,
no,
}
extension ItemIsUseX on ItemIsUse {
int toInt() {
switch (this) {
case ItemIsUse.yes:
return 1;
case ItemIsUse.no:
return 0;
}
}
static ItemIsUse? fromInt(int? value) {
switch (value) {
case 1:
return ItemIsUse.yes;
case 0:
return ItemIsUse.no;
default:
return null;
}
}
}
class ItemScreen extends StatefulWidget {
final Item? itemToEdit;
const ItemScreen({Key? key, this.itemToEdit}) : super(key: key);
@override
_FromTestRouteSate createState() => _FromTestRouteSate();
}
class _FromTestRouteSate extends State<ItemScreen> {
String _name = '';
String _description = '';
String _location = '';
String _selected = '';
double? _price;
DateTime? _selectedDate;
String? _selectedCategory; // 当前选中的分类
ItemIsUse? _itemIsUse = ItemIsUse.yes;
GlobalKey<FormState> _formKey = GlobalKey<FormState>();
// 添加自定义分类列表
List<String> _categories = ['A', 'B', 'C', 'D']; // 自定义分类
@override
void initState() {
super.initState();
final item = widget.itemToEdit;
if (item != null) {
_name = item.name;
_description = item.description!;
_selectedDate = item.purchaseDate;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('新增物品'),
),
body: Builder(builder: (context) {
return Form(
key: _formKey,
autovalidateMode: AutovalidateMode.onUserInteraction,
child: ListView(
padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0),
children: <Widget>[
NameInputField(initialValue: _name, onChanged: (v) => _name = v),
SizedBox(height: 16.0),
DescriptionField(onChanged: (v) => _description = v),
SizedBox(height: 16.0),
CategoryDropdown(
categories: _categories,
selectedCategory: _selectedCategory,
onChanged: (value) {
setState(() {
_selectedCategory = value;
});
},
),
SizedBox(height: 16.0),
LocationInputField(onChanged: (v) => _location = v),
SizedBox(height: 16.0),
DatePickerField(
selectedDate: _selectedDate,
onDateSelected: (date) => setState(() {
_selectedDate = date;
})),
SizedBox(height: 16.0),
ItemIsUseSelector(
selected: _itemIsUse,
onChanged: (v) => setState(() {
_itemIsUse = v;
})),
SizedBox(height: 16.0),
PriceInputField(
value: _price,
onChanged: (val) {
setState(() {
_price = val;
});
},
),
SizedBox(height: 28.0),
SubmitButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
final newItem = Item(
name: _name,
description: _description,
purchaseDate: _selectedDate,
isInUse: _itemIsUse,
price: _price,
);
print(newItem.toMap());
// 获取 ItemProvider 并添加物品
Provider.of<ItemProvider>(context, listen: false)
.addItem(newItem);
// 弹窗提示添加成功
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('提交成功'),
duration: Duration(seconds: 1),
));
// 确保只有在表单验证成功后才调用 Navigator.pop
Navigator.pop(context, true);
}
},
isEdit: widget.itemToEdit != null)
],
),
);
}),
);
}
}