healthrian_render_canvas 0.0.1
healthrian_render_canvas: ^0.0.1 copied to clipboard
A library to render JSON descriptions onto a Canvas.
example/lib/main.dart
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:healthrian_render_canvas/healthrian_render_canvas.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Healthrian Render Canvas Demo',
theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Uint8List? _renderedImage;
bool _isLoading = false;
final Map<String, dynamic> _sampleData = {
'document': {
'layers': [
{
'name': 'main_drawing',
'elements': [
{
"type": "line",
"stroke": "#110000",
"stroke_width": 5,
"points": [
{"x": 10, "y": 245},
{"x": 200, "y": 245},
],
},
{
"type": "line",
"stroke": "#000000",
"stroke_width": 5,
"points": [
{"x": 170, "y": 10},
{"x": 170, "y": 290},
],
},
],
},
],
},
};
Future<void> _renderCanvas() async {
setState(() {
_isLoading = true;
});
final renderer = HealthrianRenderCanvas(dpi: 200);
try {
final image = await renderer.render(_sampleData);
setState(() {
_renderedImage = image;
});
} catch (e, s) {
debugPrint('Error rendering canvas: $e \n$s');
} finally {
setState(() {
_isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text('Render Canvas Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (_isLoading)
const CircularProgressIndicator()
else if (_renderedImage != null)
Container(
width: 300,
height: 400,
decoration: BoxDecoration(border: Border.all(color: Colors.grey)),
child: Image.memory(
_renderedImage!,
fit: BoxFit.contain,
),
)
else
const Text('Press the button to render sample JSON'),
const SizedBox(height: 20),
ElevatedButton(onPressed: _renderCanvas, child: const Text('Render Sample')),
],
),
),
);
}
}