gpt4 book ai didi

dart - Flutter - 如何访问父事件或 Action 的子数据

转载 作者:IT王子 更新时间:2023-10-29 07:12:34 25 4
gpt4 key购买 nike

我有一个更长的输入表单,用户可以在其中添加许多相同的子表单。

例如考虑一种形式, parent 可以在其中输入他们的数据(parentform),然后添加他们的 child 。因为我不知道用户有多少 child ,他们可以使用按钮动态添加更多子表单。

对于每个 child ,请求的数据都是相同的,例如姓名、生日、性别,实际上大约有 10 个字段。所以我创建了一个单独的小部件(子窗体)。

如果用户现在保存外部表单,我需要从子表单中收集所有信息。我现在可以通过在父窗体中创建所有 TextController 来做到这一点,将它们保存在列表中并在创建子窗体时插入它们,如下所示:

void addTextField() {
int index = _childNameControllers.length;
_childNameControllers.add( TextEditingController());

_childforms.add(
RemovableEntityField(
nameController: _childNameControllers[index]
)
);
}

然后保存类似的东西

void onSave() {
List<Childs> _childs = [];
_childNameControllers.forEach((controller) {
if (controller.text.trim().isNotEmpty) {
_childs.add(Child(name: name));
}
});
// do something with the data
}

但正如我所说,每个子窗体大约有 10 个字段,我必须为每个窗体创建 10 个 Controller ,并且子窗体中需要 10 个参数才能读取此信息。
有更简单的方法吗?

PS:我知道我可以公开子状态,但我也不想这样做

最佳答案

我相信您应该在子项中添加变量更新程序并将值推送给父项。

https://github.com/flutter/flutter/tree/4b4cff94bf6631bf6326c9239c10b286b4fdb08c/dev/benchmarks/test_apps/stocks

flutter stock 应用程序有一个示例。

在 child 身上你需要这个。

class StockSettings extends StatefulWidget {
const StockSettings(this.configuration, this.updater);

final StockConfiguration configuration;
final ValueChanged<StockConfiguration> updater;

@override
StockSettingsState createState() => StockSettingsState();
}

class StockSettingsState extends State<StockSettings> {
void _handleBackupChanged(bool value) {
sendUpdates(widget.configuration.copyWith(backupMode: value ? BackupMode.enabled : BackupMode.disabled));
}

void sendUpdates(StockConfiguration value) {
if (widget.updater != null)
widget.updater(value);
}

在父级中,您传递配置更新器,它只是设置状态的包装器

class StocksAppState extends State<StocksApp> {
StockData stocks;

StockConfiguration _configuration = StockConfiguration(
stockMode: StockMode.optimistic,
backupMode: BackupMode.enabled,
debugShowGrid: false,
debugShowSizes: false,
debugShowBaselines: false,
debugShowLayers: false,
debugShowPointers: false,
debugShowRainbow: false,
showPerformanceOverlay: false,
showSemanticsDebugger: false
);

@override
void initState() {
super.initState();
stocks = StockData();
}

void configurationUpdater(StockConfiguration value) {
setState(() {
_configuration = value;
});
}

routes: <String, WidgetBuilder>{
'/': (BuildContext context) => StockHome(stocks, _configuration, configurationUpdater),
'/settings': (BuildContext context) => StockSettings(_configuration, configurationUpdater)
},

关于dart - Flutter - 如何访问父事件或 Action 的子数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54535286/

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