避免多次解码图像

时间:2019-06-25 08:25:30

标签: flutter dart

当另一个窗口小部件调用SetState()方法时,Flutter将永久性地重新渲染BASE64字符串中的照片。显然,该框架不会比较BASE64字符串,因此已存在的照片将被视为新照片。

Flutter通过JSON字符串创建对象,并使用ListVew.builder显示它们。 在JSON字符串中,我还将照片嵌入为BASE64。 不幸的是,当更改另一个项目(例如RadioGroup)时,照片会再次呈现。

Flutter框架似乎并不“知道”它始终是同一张照片。

是否有一种优雅的方法来避免再次渲染?

Image.memory(base64Decode(uiValues.data[currentData].elements[currentElement].innerElements[currentInnerElement].base64String))

1 个答案:

答案 0 :(得分:0)

您可以使用StatefulWidgetisDisabled = {!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