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

82 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:item_tracker/provider/item_provider.dart';
import 'package:item_tracker/screens/item_screens/item_screen.dart';
import 'package:provider/provider.dart';
class ItemListScreen extends StatefulWidget {
@override
_ItemListScreenState createState() => _ItemListScreenState();
}
class _ItemListScreenState extends State<ItemListScreen> {
late ItemProvider _itemProvider;
@override
void initState() {
super.initState();
Future.microtask(() {
_itemProvider = Provider.of<ItemProvider>(context, listen: false);
_itemProvider.loadItems();
});
}
Future<void> _refreshData() async {
await _itemProvider.loadItems(); // 刷新数据
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('物品列表'),
),
body: Consumer<ItemProvider>(builder: (context, provider, _) {
final items = provider.items;
if (items.isEmpty) {
return Center(child: Text("暂无物品"));
}
return RefreshIndicator(
onRefresh: _refreshData,
child: ListView.builder(
itemCount: items.length,
itemBuilder: (_, index) {
final item = items[index];
return ListTile(
title: Text(item.name),
subtitle: Text(item.description ?? ""),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ItemScreen(itemToEdit: item, ),
),
);
},
);
}));
}),
floatingActionButton: FloatingActionButton(
onPressed: () async {
final shouldRefresh = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => ItemScreen()),
);
print('shouldRefresh${shouldRefresh}');
if (shouldRefresh == true) {
print('刷新中');
_refreshData();
}
},
child: Icon(
Icons.add,
color: Colors.white,
),
),
);
}
}