feat(item): 添加物品详情页面并优化物品列表

- 新增 DetailItemScreen 组件,用于展示物品详细信息
- 在 ItemListScreen 中添加物品列表项的点击事件,跳转到物品详情页面- 修改 Item 模型,将 isInUse 字段类型从 String改为 String?
- 更新数据库表结构,将 is_in_use 列类型从 INTEGER 改为 TEXT
This commit is contained in:
LingandRX 2025-04-29 23:19:13 +08:00
parent ba0a8eb654
commit 4903d7d5a8
5 changed files with 40 additions and 4 deletions

View File

@ -6,7 +6,7 @@ CREATE TABLE items (
location_id INTEGER, location_id INTEGER,
description TEXT, description TEXT,
purchase_date TEXT, purchase_date TEXT,
is_in_use INTEGER DEFAULT 0, is_in_use TEXT DEFAULT 'no',
created_at TEXT DEFAULT (datetime('now')), created_at TEXT DEFAULT (datetime('now')),
updated_at TEXT DEFAULT (datetime('now')) updated_at TEXT DEFAULT (datetime('now'))
); );

View File

@ -11,7 +11,7 @@ class Item {
// //
final DateTime? purchaseDate; final DateTime? purchaseDate;
// 使 // 使
final String isInUse; final String? isInUse;
final DateTime? createdAt; final DateTime? createdAt;
final DateTime? updatedAt; final DateTime? updatedAt;
@ -29,7 +29,6 @@ class Item {
Map<String, dynamic> toMap() { Map<String, dynamic> toMap() {
return { return {
'id': id,
'name': name, 'name': name,
'category_id': categoryId, 'category_id': categoryId,
'location_id': locationId, 'location_id': locationId,

View File

@ -1,8 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:item_tracker/provider/item_provider.dart'; import 'package:item_tracker/provider/item_provider.dart';
import 'package:item_tracker/screens/addItem/add_item_screen.dart'; import 'package:item_tracker/screens/item_screens/add_item_screen.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'item_screens/detail_item_screen.dart';
class ItemListScreen extends StatefulWidget { class ItemListScreen extends StatefulWidget {
@override @override
_ItemListScreenState createState() => _ItemListScreenState(); _ItemListScreenState createState() => _ItemListScreenState();
@ -46,6 +48,14 @@ class _ItemListScreenState extends State<ItemListScreen> {
return ListTile( return ListTile(
title: Text(item.name), title: Text(item.name),
subtitle: Text(item.description ?? ""), subtitle: Text(item.description ?? ""),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetailItemScreen(item: item),
),
);
},
); );
})); }));
}), }),

View File

@ -0,0 +1,27 @@
import 'package:flutter/material.dart';
import 'package:item_tracker/models/item_model.dart';
class DetailItemScreen extends StatelessWidget {
final Item item;
DetailItemScreen({required this.item});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('${item.name}'),
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('名称: ${item.toMap().toString()}'),
Text('描述: ${item.description}')
]
)
)
);
}
}