import 'package:flutter/material.dart'; import 'package:item_tracker/models/item_category_model.dart'; import 'package:item_tracker/provider/item_category_provider.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 { String _name = ''; String _description = ''; String _location = ''; String _selected = ''; double? _price; DateTime? _selectedDate; int? _selectedCategory; // 当前选中的分类 ItemIsUse? _itemIsUse = ItemIsUse.yes; GlobalKey _formKey = GlobalKey(); late ItemCategoryProvider _itemCategoryProvider; // 添加自定义分类列表 late List _categories; // 自定义分类 @override void initState() { super.initState(); final item = widget.itemToEdit; if (item != null) { _name = item.name; _description = item.description!; _location = (item.location == null ? '' : item.location)!; _selectedDate = item.purchaseDate; } _itemCategoryProvider = Provider.of(context, listen: false); Future.microtask(() { _itemCategoryProvider = Provider.of(context, listen: false); _itemCategoryProvider.loadCategories(); }); } @override Widget build(BuildContext context) { final _c = _itemCategoryProvider.categories; _categories = _c.toList(); print(_categories); 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: [ 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, categoryId: _selectedCategory, isInUse: _itemIsUse, price: _price, ); print(newItem.toMap()); // 获取 ItemProvider 并添加物品 Provider.of(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) ], ), ); }), ); } }