U Flutter, možete pretvoriti Canvas u sliku pomoću toImage() metode iz ui.Image klase. Klasa Canvas vam omogućuje crtanje grafika i oblika na prilagođenom widgetu ili tijekom faze slikanja widgeta CustomPainter. Nakon što sve nacrtate na canvas, možete to pretvoriti u sliku pomoću toImage() metode.
Evo vodiča korak po korak o tome kako pretvoriti a Canvas u sliku u Flutter:
Uvezite potrebne pakete
import 'package:flutter/material.dart';
import 'dart:ui' as ui;
Izradite prilagođeni widget ili mjesto CustomPainter na kojem ćete crtati canvas
class MyCanvasWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CustomPaint(
size: Size(200, 200), // Set the size of the canvas
painter: MyCanvasPainter(),
);
}
}
class MyCanvasPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
// Draw on the canvas here
// For example, draw a red circle at the center
final Paint paint = Paint()..color = Colors.red;
final double centerX = size.width / 2;
final double centerY = size.height / 2;
final double radius = 50.0;
canvas.drawCircle(Offset(centerX, centerY), radius, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return false;
}
}
Napravite funkciju za pretvaranje canvas u sliku
Future<ui.Image> captureCanvasToImage() async {
final pictureRecorder = ui.PictureRecorder();
final canvas = Canvas(pictureRecorder);
// Create the custom widget or draw on the canvas using a CustomPainter
final widget = MyCanvasWidget();
widget.paint(canvas, Size(200, 200)); // Set the size of the canvas to match the custom widget size
final recordedPicture = pictureRecorder.endRecording();
return await recordedPicture.toImage(200, 200); // Set the image size, should match the canvas size
}
Pozovite captureCanvasToImage() funkciju i obradite sliku
void _convertCanvasToImage() async {
ui.Image image = await captureCanvasToImage();
// Use the image here as needed, such as displaying it in an `Image` widget or saving it to a file
}
U ovom primjeru stvorili smo prilagođeni widget pod nazivom MyCanvasWidget, koji crta crveni krug u središtu canvas. Funkcija captureCanvasToImage() stvara Canvas, crta na njemu pomoću prilagođenog widgeta ili CustomPainter, a zatim ga pretvara u ui.Image.
Imajte na umu da canvas veličinu treba postaviti i u prilagođenom widgetu( MyCanvasWidget) i u toImage() metodi kako bi se osiguralo da crtež i slika imaju točne dimenzije. U ovom primjeru postavili smo canvas veličinu na 200x200, ali je možete prilagoditi željenim dimenzijama.
Ne zaboravite postupati s pogreškama i ispravno čekati asinkrone operacije kada radite s Futures i asinkronim funkcijama. Također, svakako nazovite _convertCanvasToImage() kada je to prikladno za snimanje canvas i dobivanje slike.

