我正在将Firebase数据库中保存的图像转换为Base64,并希望对其进行解码和编码.我研究过类似的问题,但仍有错误.这是我到目前为止的资料?

var image1 = String;

var pic = event.snapshot.value['image'];
var photo = BASE64.decode(pic);
image1 = photo;

我收到以下错误.

A value of type "List<int>" cannot be assigned to a variable of type "Type"

如果您能提供一个将图像编码为base64的反向过程,以便将其保存回Firebase,将不胜感激.

*更新

以下是我的更新代码,它仍在抛出错误.

image1 = event.snapshot.value['image'];
var image = BASE64.decode(image1.toString());
new Image.memory(image),

错误是...

FormatException: Invalid Length must be a multiple of 4

推荐答案

可以使用Image.memory构造函数将Uint8List转换为Flutter Image构件.(如有必要,请使用Uint8List.fromList构造函数将List转换为Uint8List.)你可以乘BASE64.encode走另一条路.

以下是一些示例代码.

screenshot

import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      theme: new ThemeData.dark(),
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  State createState() => new MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> {
  String _base64;

  @override
  void initState() {
    super.initState();
    (() async {
      http.Response response = await http.get(
        'https://flutter.io/images/flutter-mark-square-100.png',
      );
      if (mounted) {
        setState(() {
          _base64 = BASE64.encode(response.bodyBytes);
        });
      }
    })();
  }

  @override
  Widget build(BuildContext context) {
    if (_base64 == null)
      return new Container();
    Uint8List bytes = BASE64.decode(_base64);
    return new Scaffold(
      appBar: new AppBar(title: new Text('Example App')),
      body: new ListTile(
        leading: new Image.memory(bytes),
        title: new Text(_base64),
      ),
    );
  }
}

然而,在数据库中存储大量二进制数据通常不是一个好主意.它没有发挥Firebase实时数据库的优势,最终会浪费带宽传输不需要的数据,以及不必要的编码和解码.您应该使用firebase_storage插件,将图像的路径或下载URL存储在数据库中.

Flutter相关问答推荐

如何在列表磁贴上添加行

如何在应用栏中将列置于中心

Riverpod生成器和生成util类

如何解决这个错误,同时获得的高度的小部件,因此高度的可用工作区域在Flutter ?

如何让一个名为ONTAP的回调函数、另一个名为onTapDown的回调函数和另一个名为onTapUp的回调函数不重叠?

Dexing时出错.将Flutter 升级到3.19.0后

我不能通过第5步了解Flutter 翼Firebase教程

TextFormfield无法与自动路由一起正常工作

我如何在Android 13中通过Flutter应用程序打开文件(不是图像、视频或音频)?

有没有办法在没有收缩包装的情况下在列中使用 ListView.Builder?

Flutter canvas 绘制不同 colored颜色 的原始点

状况不佳 - Cubit

statefulWidget 无法进行所需更改的问题

type '({bool growable}) => List' 不是类型转换中类型 'List' 的子类型

如何在 Flutter 中创建 Facebook 创建帖子屏幕?

如何获得Flutter 的时差?

根据索引/变量更改小部件的 colored颜色

Flutter Firebase:如何判断返回值是否是特定对象

我们什么时候在flutter中初始化一个provider?

Flutter Bloc Todo 示例 - 收听存储库中的单个 todo