Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振,在StatefulWidget上传递参数_Flutter - Fatal编程技术网

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!"),
  ],
),
//...