flutter - 避免多次解码图像

标签 flutter dart

当另一个小部件调用setState()方法时,flutter将永久重新呈现base64字符串中的照片。显然,这个框架没有比较base64字符串,所以一张已经存在的照片被当作一张新的照片来处理。
flutter从JSON字符串创建对象,并用listvew.builder显示它们。
在json字符串中,我还嵌入了base64格式的照片。
不幸的是,当另一个项目(例如,RadioGroup)更改时,照片会再次呈现。
颤振框架似乎并不“知道”它总是同一张照片。
有没有优雅的方法可以避免再次渲染?

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

最佳答案

您可以使用StatefulWidgetinitState方法中的数据进行解码,从而避免多次对图像进行解码。

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/

相关文章:

dependency-injection - AngularDart 依赖注入(inject)是如何工作的?

dart - 是否可以在 Dartlang 中对 Polymer 应用程序使用延迟加载?

firebase-realtime-database - flutter Firebase 电线操作

dart - 如何使用Future方法,但Dart grpc客户端在调用future方法后未提供未知服务

flutter - 如何在Flutter中的onPressed中使图标在ListView中不可见?

flutter - 如何在Flutter中调用来自不同类的变量

flutter - Flutter:我的变量中有NULL,如何使用我的函数?

flutter - 不使用resizeToAvoidBottomInset清除白盒:false

dart - 具有默认文本的 TextFormField

svg - Dart 创建和转换 SVG 路径