gpt4 book ai didi

Flutter:当 TextField 值更改时应用程序卡住

转载 作者:行者123 更新时间:2023-12-05 04:28:27 27 4
gpt4 key购买 nike

所以我正在尝试创建一个应用程序,您可以在其中编辑输入字段,当 TextFields(输入)中的值发生变化时,它会为您计算一些值。为实现这一点,我尝试使用提供者来保存值以及它们的 setter 和 getter ,但每当使用 setter 时,一切都会卡住。

从顶部开始,我的 MaterialApp 是这样设置的,使用 MultiProvider 小部件并添加提供程序(虽然目前只有一个):

return MultiProvider(
providers: [
ChangeNotifierProvider<CalculationService>(create: (_) => calculationService),
],
child: Builder(
builder: (context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Palette.primary,
scaffoldBackgroundColor: const Color(0xFFF8F9FA),
),
home: RootScreen(),
);
},
),
);

然后我的“RootScreen”获取计算服务,其中包含值、getter 和 setter(我认为 set areaInMeterSquared(int state) 是这里的重要部分):

class CalculationService with ChangeNotifier {
late final SharedPreferences sharedPreferences;

// Inputs
final int _areaInMeterSquared = 0;
final int _basicRentForUnit = 0;
final int _installmentsPerYear = 0;
final int _tenantCustomizations = 0;
final int _technicalUpgrades = 0;

CalculationService(this.sharedPreferences);

final double rateOfReturn = 0.02;
final double inflation = 0.05;
final int tenantCustomizationYears = 5;
final int technicalUpgradeYears = 20;

int get areaInMeterSquared => _areaInMeterSquared;

int get basicRentForUnit => _basicRentForUnit;

int get installmentsPerYear => _installmentsPerYear;

int get tenantCustomizations => _tenantCustomizations;

int get technicalUpgrades => _technicalUpgrades;

set areaInMeterSquared(int state) {
sharedPreferences.setInt(areaInMeterSquaredKey, state);
areaInMeterSquared = state;
notifyListeners();
}
}

TextField 看起来像这样:

TextFormField(
initialValue: calculationService.areaInMeterSquared.toString(),
onChanged: (text) {
calculationService.areaInMeterSquared = int.parse(text);
},
),

感谢您的帮助:)

编辑:我得到的错误是 [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: Stack Overflow

最佳答案

在 CalculationService 中使用这个

int areaInMeterSquared = 0;

int get getAreaInMeterSquared => areaInMeterSquared;

set setAreaInMeterSquared(int state) {
sharedPreferences.setInt(areaInMeterSquaredKey, state);
areaInMeterSquared = state;
notifyListeners();
}

文本表单域应该是这样的

TextFormField(
initialValue: calculationService.getAreaInMeterSquared.toString(),
onChanged: (text) {
if(int.tryParse(text) > 0)
{
calculationService.setAreaInMeterSquared(int.parse(text));
}

},
),

关于Flutter:当 TextField 值更改时应用程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72586658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com