首页 > 解决方案 > 如何在特定事务的屏幕中从 SQLite 数据库中获取保存的数据?

问题描述

我正在制作一个应用程序,用户可以在其中保存交易数据,他们可以通过填写以下表格来完成形式 交易然后将保存在数据库中,并可以在以下屏幕上显示给用户 在此处输入图像描述 正在保存的详细信息表格是名称、金额注释、类别、日期以及是否不需要交易。但我想在图 2 中显示的详细信息是名称、金额和日期。现在要查看其余详细信息,用户可以单击特定交易,然后应该会打开一个新页面,显示交易的详细信息,如下所示 节目

我该怎么做?我的意思是如果我点击上面的交易页面应该显示。

我正在使用以下代码创建我的数据库:

await database.execute(
      "CREATE TABLE $TABLE_EXPENSES ("
      "$COLUMN_ID INTEGER PRIMARY KEY,"
      "$COLUMN_NAME TEXT,"
      "$COLUMN_AMOUNT INTEGER,"
      "$COLUMN_UNNECESSARYEXPENSES INTEGER,"
      "$COLUMN_CATEGORY TEXT,"
      "$COLUMN_DATETIME TEXT,"
      "$COLUMN_COMMENTS TEXT"
      ")",
    );

编辑:

我用于映射的代码:

class expense {
  int id;
  String name;
  int amount;
  bool isUnnecessaryExpenses;
  String category;
  DateTime dateTime;
  String pickedDate;
  String comments;

expense({this.id, this.name, this.amount, this.isUnnecessaryExpenses,  this.category, this.dateTime, this.pickedDate, this.comments});

Map toMap() {
  var map = {
    DatabaseProvider.COLUMN_NAME: name,
    DatabaseProvider.COLUMN_AMOUNT: amount,
    DatabaseProvider.COLUMN_UNNECESSARYEXPENSES: isUnnecessaryExpenses ? 1  : 0,
    DatabaseProvider.COLUMN_CATEGORY: category,
    DatabaseProvider.COLUMN_DATETIME: pickedDate,
    DatabaseProvider.COLUMN_COMMENTS: comments,
  };

  if (id != null) {
    map[DatabaseProvider.COLUMN_ID] = id;
  }

  return map;
  }

 expense.fromMap(Map map) {
  id = map[DatabaseProvider.COLUMN_ID];
  name = map[DatabaseProvider.COLUMN_NAME];
  amount = map[DatabaseProvider.COLUMN_AMOUNT];
  isUnnecessaryExpenses = map[DatabaseProvider.COLUMN_UNNECESSARYEXPENSES]  == 1;
  category= map[DatabaseProvider.COLUMN_CATEGORY];
  pickedDate = map[DatabaseProvider.COLUMN_DATETIME];
  comments = map[DatabaseProvider.COLUMN_COMMENTS];
  }
 }

我在以下代码的帮助下在图 2 中显示交易:

ListTile(
                leading: CircleAvatar(
                  backgroundColor: Colors.indigo,
                  foregroundColor: Colors.white,
                  child: Text(
                    expensess.name
                        .substring(0, 1)
                        .toUpperCase(),
                    style: TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
                  ),
                ),
                title: Text(
                  expensess.name ?? "Title",
                  style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: 30,
                    color: Colors.black,
                  ),
                ),
                subtitle: Text(
                  "Amount: ${expensess.amount.toString()}"
                      "\nDate: ${expensess.pickedDate}\n"
                  ,style: TextStyle(
                  fontStyle: FontStyle.italic,
                  fontSize: 20,
                  color: Colors.black,
                ),
                ),
                onTap: () {
                    Navigator.push(context, MaterialPageRoute(builder: (context)=> ViewTransaction()));
                      }
                  ));
                }

viewTransaction() 如下:

class ViewTransaction extends StatefulWidget {
@override
_ViewTransactionState createState() => _ViewTransactionState();
}

类 _ViewTransactionState 扩展状态 { @override

void initState(){
 super.initState();
 DatabaseProvider.db.getExpenses().then(
      (expenseList) {
    BlocProvider.of<ExpenseBloc>(context).add(SetExpenses(expenseList));
    },
  );
 }

Widget build(BuildContext context) {
  expense expenses;
  return Scaffold(
   appBar: AppBar(backgroundColor: Colors.white, title: Text(expenses.name),),

  );
 } 
}

请帮忙。感谢您的回复。

标签: sqlsqliteflutterandroid-databasesqflite

解决方案


推荐阅读