【发布时间】:2021-07-21 18:05:41
【问题描述】:
我正在使用 sqflite 为 SQLite 数据库制作一个应用程序,在该应用程序中,用户可以保存他们的金融交易信息,如姓名、金额。日期等我试图在 SQLite 数据库中显示两个日期之间保存的所有记录,为此,我创建了一个包含两个日期的表单。
我为从我的数据库中获取记录创建了以下函数:
Future<List<expense>> getExpenseDateWise() async {
final db = await database;
var expenses = await db
.rawQuery('SELECT * FROM EXPENSES WHERE DATE(DATETIME) >= ? AND DATE(DATETIME) <= ?',
['$FromDate','$ToDate']);
List<expense> expenseList = List<expense>();
expenses.forEach((currentExpense) {
expense expenses = expense.fromMap(currentExpense);
expenseList.add(expenses);
});
return expenseList;
}
此功能是否正确? 现在我不知道如何在另一个屏幕上使用此功能进行显示。 我想显示这些交易,如下图所示: 我不知道如何显示它,就像它显示在图像中一样。
编辑 1:
在尝试了@Usama Karim 提供的方法后,我实现了这样的方法:
return Provider(
create: (context) => dateWiseTransactions(),
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: '$finalFrom - $finalTo',
theme: ThemeData(
primaryColor: Colors.lightBlueAccent,
),
final expense = await Provider.of<dateWiseTransactions>(context, listen: off).getExpenseDateWise()
),);
它给了我以下错误:
error: Expected to find ')'. (expected_token at [finance_manager] lib\viewExpenses\dateWise.dart:37)
error: Positional arguments must occur before named arguments. (positional_after_named_argument at [finance_manager] lib\viewExpenses\dateWise.dart:37)
error: Expected an identifier. (missing_identifier at [finance_manager] lib\viewExpenses\dateWise.dart:37)
所以我尝试了另一种方法:
class _dateWiseViewState extends State<dateWiseView> {
@override
void initState() {
super.initState();
DatabaseProvider.db.getExpenseDateWise().then(
(expenseList) {
BlocProvider.of<ExpenseBloc>(context).add(SetFoods(expenseList));
},
);
}
Widget build(BuildContext context) {
String finalFrom = DateFormat('yyyy-MM-dd').format(widget.fromDate);
String finalTo = DateFormat('yyyy-MM-dd').format(widget.toDate);
return Scaffold(
appBar: AppBar(
title: Text("$finalFrom - $finalTo"),
),
body: Container(
child: BlocConsumer<ExpenseBloc, List<expense>>(
builder: (context, expenseList) {
return ListView.separated(
itemBuilder: (BuildContext context, int index) {
expense expensess = expenseList[index];
return Container(
margin: const EdgeInsets.all(5.0),
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
color: index % 2 == 0 ? Colors.white : Colors.lightBlueAccent,
border: Border.all(width: 2,color: Colors.white),
borderRadius: BorderRadius.circular(15)
),
child: 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: () {
}
)
);
},
itemCount: expenseList.length,
separatorBuilder: (BuildContext context, int index) => Divider(color: Colors.black),
);
},
listener: (BuildContext context, expenseList) {},
),
),
);
}
}
但这也不起作用,如图片中所示,请帮助我。
感谢您的回复
【问题讨论】:
-
感谢您的回复,@DhavalParmar 但我不是在寻找构建 ListView 但我正在寻找从数据库中查找记录,然后在 ListView 中显示它们。
标签: sqlite flutter dart android-database sqflite