微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在flutter中从sqlite数据库中获取两个日期之间的所有记录?

如何解决如何在flutter中从sqlite数据库中获取两个日期之间的所有记录?

我正在尝试开发一个应用程序,用户可以在其中保存他们的交易和相关信息,如交易日期、金额、类别等。所有这些字段都使用 sqflite 插件 存储在 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']); // <----- FromDate and ToDate are two DateTime variables which I am saving from a form

List<expense> expenseList = List<expense>();
expenses.forEach((currentExpense) {
  expense expenses = expense.fromMap(currentExpense);

  expenseList.add(expenses);
});
return expenseList;
}

我已经在 android studio 中使用 darabase 检查器检查了查询,它正在工作。 然后显示我已经实现了以下代码

class _dateWiseViewState extends State<dateWiseView> {
 @override
 void initState() {
 super.initState();
 DatabaseProvider.db.getExpenseDateWise().then(
      (expenseList) {
    BlocProvider.of<ExpenseBloc>(context).add(SetDates(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,onTap: () {
                          }
                      )
                  );
                },itemCount: expenseList.length,separatorBuilder: (BuildContext context,int index) => Divider(color: Colors.black),);
          },listener: (BuildContext context,expenseList) {},);}
    }

我希望这段代码可以正常工作,但它确实返回了列表,但也包括其他月份的交易,请仔细查看下图(重点放在日期上)

view

我还附上了以下图片,说明查询正在与数据库检查器一起使用:

databaseInspector

查看数据库检查器,具有相同查询页面数据库检查器显示 2 个条目,而页面显示 4 个条目。 我不知道为什么会这样,请帮助我。 感谢您的回复

解决方法

兄弟,您检查过您的查询是否正确执行了吗?

,
  Future<List> getRangeData(String fromDate,String toDate) async{
   var dbClient = await db;
   var result = await dbClient
        .rawQuery("SELECT * FROM $tableName where $columnDate >= '2021-01-01' and 
    $columnDate <= '2022-10-10' ");
   return result.toList();
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。