Flutter Web中Widget转PNG下载出现网络错误问题求助
解决Flutter Web中Widget转图片下载后显示「网络错误」的问题
你遇到的「网络错误」是因为两个关键问题:
- 直接把
Uint8List拼进data URL,没有正确转成base64编码字符串 - data URL的MIME类型用了
application/octet-stream,浏览器无法正确识别为图片格式
修改后的代码
import 'dart:typed_data'; import 'dart:convert'; // 新增导入base64编码工具 import 'package:flutter/material.dart'; import 'package:widgets_to_image/widgets_to_image.dart'; import 'dart:html' as html; void main() { runApp(const MyApp()); } Color contrastColor = Colors.black; Color mainColor = Colors.white; class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { WidgetsToImageController controller = WidgetsToImageController(); Uint8List? bytes; Future<void> saveImg() async { final bytes = await controller.capture(); if (bytes == null) return; // 增加空值判断,避免异常 // 将Uint8List转换为base64字符串 final base64Str = base64Encode(bytes); // 使用正确的图片MIME类型 final anchor = html.AnchorElement( href: 'data:image/png;base64,$base64Str' ) ..download = "image.png" ..target = 'blank'; html.document.body!.append(anchor); anchor.click(); anchor.remove(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Column( children: [ Center( child: ElevatedButton( child: Text("TEST"), onPressed: () => saveImg(), ), ), WidgetsToImage( child: Text("HALLO WELT"), controller: controller, ) ], ), ); } }
关键修改说明
- 导入base64编码工具:新增
dart:convert包,用base64Encode()把Uint8List转换成浏览器可识别的base64字符串,避免直接拼接导致的编码错误。 - 修正MIME类型:将data URL的类型从
application/octet-stream改为image/png,让浏览器明确这是PNG图片文件,能正确解析和显示。 - 增加空值判断:捕获到的bytes可能为空,提前判断避免后续操作抛出异常。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

