Flutter 颤振,在StatefulWidget上传递参数
有人能告诉我这个节目发生了什么吗Flutter 颤振,在StatefulWidget上传递参数,flutter,Flutter,有人能告诉我这个节目发生了什么吗 body: new ListView.builder( itemBuilder: (BuildContext context, int index) { return new StuffInTiles(listOfTiles[index]); }, itemCount: listOfTiles.length, ), ), );
body: new ListView.builder(
itemBuilder: (BuildContext context, int index) {
return new StuffInTiles(listOfTiles[index]);
},
itemCount: listOfTiles.length,
),
),
);
}
}
class StuffInTiles extends StatefulWidget{
final MyTile myTile;
const StuffInTiles(this.myTile);
@override
StuffInTilesState createState() => StuffInTilesState();
}
class StuffInTilesState extends State<StuffInTiles> {
@override
Widget build(BuildContext context) {
return Container(child:
//Text(widget.myTile.title),);
_buildTiles(widget.myTile));
}
Widget _buildTiles(MyTile t) {
在这个程序中,这个代码在做什么
在我的
类StuffInTilesState扩展状态中,我没有任何构造函数,那么这段代码是如何工作的呢?为什么我的参数正好在那里?在我学习C++之前,这对我来说是一个神奇的例子 如果你学习C++,你可能熟悉初始化列表,哪个飞镖也有。在C++中你可以做一些事情:
MyClass {
MyClass(MyTitle title) : this.myTitle = title;
final MyTitle myTitle;
}
这在Dart中也是有效的。但是,Dart允许您通过自动将引用分配给新的类属性来简化调用,而无需使用任何中间变量
MyClass(this.myTitle);
这基本上是相同的,但确保任何给定属性都不会为null
,除非您显式传递null
Dart上还有其他类型的构造函数,如私有构造函数、工厂构造函数和命名构造函数。您可能需要查看以了解更多信息。默认情况下,在Dart中创建类时,只实现了一个默认的构造函数
例如,如果您有一个名为AwesomeWidget
的类。它将有一个默认构造函数AwesomeWidget()
,用于创建此小部件的实例
因此,您可以在如下代码中使用默认构造函数:
//Example 1
return AwesomeWidget();
//Example 2
AwesomeWidget myWidget = AwesomeWidget();
//Example 3
//...
Row(
children: [
Text("Example Code!"),
AwesomeWidget(),
Text("Example Footer Code!"),
],
),
//...
现在,如果您想将一些值或数据传递给您的小部件类,那么您可以使用上面在问题中发布的代码
问题是:我们为什么要将数据发送到我们的小部件?
答:最大的用例是我们将列表项作为单独的小部件。例如,在我的食品应用程序中,我必须在列表视图
中显示用户的订单历史记录,因此对于每个列表项的UI,我只需制作一个名为OrderHistoryListItem
的可重用小部件
在该OrderHistoryListItem
中,您希望显示对象的日期和时间。以及订单id,以及用户在该订单中支付的金额或任何其他详细信息,因此为了显示这些信息,我们将这些数据发送到可重用小部件列表项,该列表项将显示这些数据。就这么简单
这也是我们将值传递给小部件的原因之一。作为一名程序员,你可以在更复杂的场景中使用这个方便的功能,要有创意 我认为你应该通过这些来理解代码中发生了什么。
//Example 1
return AwesomeWidget();
//Example 2
AwesomeWidget myWidget = AwesomeWidget();
//Example 3
//...
Row(
children: [
Text("Example Code!"),
AwesomeWidget(),
Text("Example Footer Code!"),
],
),
//...