当另一个窗口小部件调用SetState()方法时,Flutter将永久性地重新渲染BASE64字符串中的照片。显然,该框架不会比较BASE64字符串,因此已存在的照片将被视为新照片。
Flutter通过JSON字符串创建对象,并使用ListVew.builder显示它们。 在JSON字符串中,我还将照片嵌入为BASE64。 不幸的是,当更改另一个项目(例如RadioGroup)时,照片会再次呈现。
Flutter框架似乎并不“知道”它始终是同一张照片。
是否有一种优雅的方法来避免再次渲染?
Image.memory(base64Decode(uiValues.data[currentData].elements[currentElement].innerElements[currentInnerElement].base64String))
答案 0 :(得分:0)
您可以使用StatefulWidget
以isDisabled = {!Object.keys((team_subset)).some(e => team_subset[e])};
方法对数据进行解码,因此避免多次解码图像。
initState
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/material.dart';
class Base64Image extends StatefulWidget {
final String source;
Base64Image({Key key, this.source}) : super(key: key);
@override
_Base64ImageState createState() => _Base64ImageState();
}
class _Base64ImageState extends State<Base64Image> {
Uint8List bytes;
@override
void initState() {
bytes = base64Decode(widget.source);
super.initState();
}
@override
Widget build(BuildContext context) => Image.memory(bytes);
}
仅在将小部件放入树中时执行一次。
您可以在现有的用户界面中使用以下bytes = base64Decode(widget.source);
:
Base64Image