widgets_to_image 1.0.0 widgets_to_image: ^1.0.0 copied to clipboard
A simple package to convert any widgets into an image, everything in flutter is rendered pixel by pixel.
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:widgets_to_image/widgets_to_image.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Widgets To Image',
theme: ThemeData(primarySwatch: Colors.green),
home: const MainPage(),
debugShowCheckedModeBanner: false,
);
}
class MainPage extends StatefulWidget {
const MainPage({Key? key}) : super(key: key);
@override
MainPageState createState() => MainPageState();
}
class MainPageState extends State<MainPage> {
// WidgetsToImageController to access widget
WidgetsToImageController controller = WidgetsToImageController();
// to save image bytes of widget
Uint8List? bytes;
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: const Text('Widgets To Image'),
centerTitle: true,
),
body: ListView(
padding: const EdgeInsets.all(16),
children: [
const Text(
"Widgets",
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
),
WidgetsToImage(
controller: controller,
child: cardWidget(),
),
const Text(
"Images",
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
),
if (bytes != null) buildImage(bytes!),
],
),
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.image_outlined),
onPressed: () async {
final bytes = await controller.capture();
setState(() {
this.bytes = bytes;
});
},
),
);
Widget cardWidget() {
return Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
elevation: 4,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: const BorderRadius.horizontal(
left: Radius.circular(16),
),
child: Image.network(
'https://mhtwyat.com/wp-content/uploads/2022/02/%D8%A7%D8%AC%D9%85%D9%84-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D8%B9%D9%86-%D8%A7%D9%84%D8%B1%D8%B3%D9%88%D9%84-%D8%B5%D9%84%D9%89-%D8%A7%D9%84%D9%84%D9%87-%D8%B9%D9%84%D9%8A%D9%87-%D9%88%D8%B3%D9%84%D9%85-1-1.jpg',
width: 100,
height: 100,
fit: BoxFit.cover,
),
),
Container(
padding: const EdgeInsets.all(16),
child: const Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Title",
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 4),
Text(
"Description",
style: TextStyle(fontSize: 16),
),
],
),
)
],
),
);
}
Widget buildImage(Uint8List bytes) => Image.memory(bytes);
}