gpt4 book ai didi

flutter - 如何在 Flutter 中将值传递给数组内的小部件

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

我在 Flutter 中有这个数组/列表,其中包含一些简单的小部件:

final List<Widget> steps = [
_step0(),
_step1(),
_step2(),
];

我可以像这样显示所有这些:

itemBuilder: (BuildContext context, int index) {
return steps[index];
}

但是如何从 itemBuilder 将值传递给其中一个小部件?

Widget step0 build(String something) {}

最佳答案

如果我找到你,这就是你想要实现的目标,你需要有一个 Function 而不是 Widget 的列表:

class _MyHomePageState extends State<MyHomePage> {
List<Function> steps;

@override
void initState() {
steps = [
_step0,
_step1,
_step2,
];
super.initState();
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ListView.builder(
itemCount: steps.length,
itemBuilder: (BuildContext context, int index) {
return steps[index](somethinng: "something");
},
),
),
);
}

Widget _step0({String somethinng}) {
return Container(child: Text(somethinng ?? "anything"));
}

Widget _step1({String somethinng}) {
return Container(child: Text(somethinng ?? "anything"));
}

Widget _step2({String somethinng}) {
return Container(child: Text(somethinng ?? "anything"));
}
}

如果你可以调整你的场景以匹配一种方法(没有step0step1,......),你可以尝试下面的方法或得到一个想法和对您的场景做一些更改:

class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ListView(
children: List.generate(10, (int index) {
return ParentWidget(
data: index,
function: () => print("whooo! $index"),
child: Text(index.toString(), style: TextStyle(fontSize: 20)),
);
}),
),
),
);
}
}

class ParentWidget extends StatefulWidget {
final Widget child;
final int data;
final Function function;

ParentWidget({this.child, this.data, this.function});

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

class _ParentWidgetState extends State<ParentWidget> {
@override
void initState() {
print(widget.data);
super.initState();
}

@override
Widget build(BuildContext context) {
return InkWell(
onTap: widget.function,
child: Container(
child: (widget.child != null) ? widget.child : SizedBox(),
),
);
}
}

如果您收集了大量数据,请不要像现在这样使用 List.generate() 使用 ListView.builder

如果这不是您要查找的内容,请告诉我删除此答案。

关于flutter - 如何在 Flutter 中将值传递给数组内的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59519392/

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