当另一个小部件调用setState()方法时,flutter将永久重新呈现base64字符串中的照片。显然,这个框架没有比较base64字符串,所以一张已经存在的照片被当作一张新的照片来处理。
flutter从JSON字符串创建对象,并用listvew.builder显示它们。
在json字符串中,我还嵌入了base64格式的照片。
不幸的是,当另一个项目(例如,RadioGroup)更改时,照片会再次呈现。
颤振框架似乎并不“知道”它总是同一张照片。
有没有优雅的方法可以避免再次渲染?
Image.memory(base64Decode(uiValues.data[currentData].elements[currentElement].innerElements[currentInnerElement].base64String))
最佳答案
您可以使用StatefulWidget
对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);
将只执行一次。您可以在现有的UI中使用此
Base64Image
,如下所示:Base64Image(source: uiValues.data[currentData].elements[currentElement].innerElements[currentInnerElement].base64String)
关于flutter - 避免多次解码图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56749778/