0

Flutter 是如何渲染小部件的,这里已经详细描述了。它会将新的小部件与旧的小部件进行比较。因此,Flutter 通常知道在大多数情况下如何重新渲染 UI。

在嵌套对象结构中,当您更改子对象时,所有父窗口小部件都不可避免地发生变化,因此它们似乎被呈现为新的。

这会导致应用程序用户的视觉效果没有吸引力。

有没有办法只重新渲染调用 SetState () 的小部件?

我尝试了各种 this.setState (() {})。我已经换出了无状态类中的小部件。

不幸的是,这两种方法都不能解决问题。

小部件 _createCheckbox(int dataArrayPosition, int elementCurrentPosition, int inputCurrentPosition) { 输入 inputElement = contextData.data[dataArrayPosition].element[elementCurrentPosition].input[inputCurrentPosition];

return Column(
  children: <Widget>[
    Row(
      children: <Widget>[
        Checkbox(
            value: inputElement.checkBoxValue,
            onChanged: (bool newValue) {
              setState(() {
                contextData.data[dataArrayPosition].element[elementCurrentPosition].input[inputCurrentPosition].checkBoxValue = newValue;
              });
            }),
        Text(inputElement.labelForValue),
      ],
    ),
  ],
);

}

有谁知道在调用 onChanged 时仅重新渲染此示例中的“受影响”小部件的方法?

4

1 回答 1

0

Flutter 包“Image_Picker”将照片保存为“文件”类型的变量。我已将照片转换为 JSON 结构。照片保存为BASE64。可以在小部件中显示 Base64 构造。不幸的是,当您使用 BASE64 图像时,Flutter 在渲染时似乎并没有注意到它始终是相同的图像。因此,如果用户输入新数据,就会出现闪烁效果。

这种代码可以正常工作。

    var picturesTaken = <File>[];

    Widget _showFoto(int currentFoto) {
      return Padding(
          padding: const EdgeInsets.only(bottom: 10.0),
          child: Container(
            child: Padding(
              padding: const EdgeInsets.all(20.0),
              child: Center(
                child: Column(
                  children: <Widget>[
                    Image.file(picturesTaken[currentFoto])
                  ],
                ),
              ),
            ),
          )
      );
    }
于 2019-07-02T06:50:22.213 回答