提供者不更新值可能的字符串以双重问题
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()),
],
...
我认为我的问题可能在 String
和 double
类型之间来回切换。
在我正在呼叫的提醒对话中,
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(),
);
}),
我是 Flutter 的新手,并试图在课程之外自己编写我的第一个应用程序。我正在使用 Flutter Provider 包,并且我能够使用 Provide 成功读取值,但是我在写入值以使用 Provider 更新它们时遇到问题。
代码遍历
在我的 main.dar 中,我在 class Week()
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => WeekList()),
ChangeNotifierProvider(create: (context) => Week()),
],
...
我认为我的问题可能在 String
和 double
类型之间来回切换。
在我正在呼叫的提醒对话中,
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(),
);
}),