Flutter:文本小部件中的sqflite总金额为null

问题描述

免责声明,我通常对编码还是比较陌生的,但是我尝试了几天的研究,并且还在这里使用了几个类似问题的答案,但是似乎都没有用。感谢您对初学者的耐心。

我正在数据库文件中使用原始查询,如下所示

=ARRAYFORMULA(AVERAGE(IF($A$2:A2>=0,$A$2:A2,"")))

我正在尝试在文本小部件中显示数据库中“金额”列的总和。这是该UI和文本小部件的代码

 Future getTotal() async {
    var db = await this.database;
    var result =
        await db.rawQuery("SELECT SUM(amount) as sum FROM $expensesTable");
    print(result.toString());
    return result;
  }

数据库中“金额”列中的各个行数据显示在应用程序不同页面上的其他列表视图小部件中,但是当我尝试使用它来求和所有“金额”时,此文本显示为空。任何帮助将不胜感激!

解决方法

我认为您的Text小部件应该等待,直到您的async被执行为止。
如果是这样,在这种情况下,您可以执行以下操作。

Text(getTotal.toString() ?? "Loading"),

这意味着当getTotalnull时,它会显示“正在加载”。

希望有效!

,

您实际上不会通过调用getTotal方法来初始化displayTotal属性。初始化小部件的状态时,请确保调用displayTotal()。完成后,它将重建您的小部件并向您显示getTotal的值。


class BudgetAppState extends State<BudgetApp> {
  ExpensesDatabase databaseHelper;
  ExpensesDatabase expensesDatabase = ExpensesDatabase();
  List<Expenses> expensesList;
  double getTotal;

  @override
  void initState() {
    super.initState();
    displayTotal();
  }

  @override
  Widget build(BuildContext context) {
    return new WillPopScope(
      onWillPop: () async => false,child: new Scaffold(
        appBar: new AppBar(
          title: new Text("Budget App"),centerTitle: true,backgroundColor: Colors.blueAccent,),drawer: NavigationDrawer(),body: Text(getTotal?.toString() ?? 'Loading...'),);
  }

  void displayTotal() async {
    var total = await databaseHelper.getTotal();
    setState(() {
      print('$total');
      getTotal = total;
    });
  }
}