提供者不更新值可能的字符串以双重问题

Provider not updating value possible string to double issue

我是 Flutter 的新手,并试图在课程之外自己编写我的第一个应用程序。我正在使用 Flutter Provider 包,并且我能够使用 Provide 成功读取值,但是我在写入值以使用 Provider 更新它们时遇到问题。

代码遍历

在我的 main.dar 中,我在 class Week()

上调用创建命令
return MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (context) => WeekList()),
        ChangeNotifierProvider(create: (context) => Week()),
      ],
    ...

我认为我的问题可能在 Stringdouble 类型之间来回切换。

在我正在呼叫的提醒对话中,

String curentbudget = Provider.of<Week>(context).budget.toString();

那部分工作完美,然后我可以将值分配给 TextEditingController

TextEditingController currentBudgetController = TextEditingController(text: curentbudget);

在警报对话框中编辑值后,我尝试使用更新功能保存该值:

onPressed: () {
      //save new value
      double budgetDouble =double.parse(currentBudgetController.text);
      Provider.of<Week>(context, listen: false).updateBudget(newBudget: budgetDouble);
      //close Dialog
      Navigator.of(context).pop();
}

同样,不确定它是否没有保存,因为这是一个 double / string 问题。

我的一周Class更新函数如下所示:

  //updateBudget
  void updateBudget({
    required double newBudget,
  }) {
    Week().budget = newBudget;
    notifyListeners();
  }

我尝试更新预算的位置是:

child: Text(
        Provider.of<Week>(context).budget.toString(),
        style: const TextStyle(fontSize: 25.0),
      ),

疑难解答:

我逐步使用调试器,当我将值更新为 300.0 时,我通过更新函数成功获取了该值:

Week().budget = newBudget;

下一行是 notifyListeners();,在我看来,由于某种原因,它似乎没有更新值。

你可以这样调用你的方法,

double budget = 0.0;

  void updateBudget({required double newBudget}) {
    budget = newBudget;
    notifyListeners();
  }

要获取值,您可以使用 Consumer 小部件。

child: Consumer<Week>(builder: (context, weekData, child) {
   return Text(
      weekData.budget.toString(),
   );
}),