certify_me 0.1.2

SDKflutter
Platformandroidioswindowslinuxmacos

A Flutter package for creating and exporting customizable certificates as PNG/PDF with dynamic data and templates.

certify_me

A Flutter package for creating and exporting customizable certificates as PNG/PDF with dynamic data and templates.

pub package

Made by - Shinjan Saha

Features

  • Create beautiful certificates with customizable templates
  • Fill in certificate data dynamically (recipient name, course title, descriptions, etc.)
  • Export certificates as PNG or PDF
  • Share certificates directly from your app
  • Three built-in certificate templates (Elegant, Modern, Minimalist)
  • Support for custom templates and layouts
  • Generate unique certificate IDs

Installation

dependencies:
  certify_me: ^0.1.2

Run flutter pub get to install the package.

Usage

Certify Me Package Properties

CertificateData Properties

PropertyTypeDescriptionRequired
recipientNameStringName of the certificate recipientYes
courseTitleStringTitle of the course or achievementYes
descriptionStringDescription or details of the achievementYes
issueDateDateTimeDate when the certificate was issuedYes
expiryDateDateTime?Optional expiry date for the certificateNo
issuerNameStringName of the issuer/organizationYes
issuerTitleStringTitle/position of the issuerYes
certificateIdStringUnique identifier for the certificateYes
metadataMap<String, String>?Additional metadata as key-value pairsNo

CertificateExporter Methods Properties

exportAsPng() Parameters

PropertyTypeDescriptionRequired
dataCertificateDataCertificate data to exportYes
templateCertificateTemplateTemplate to use for certificate designYes
customBuilderWidget Function(BuildContext, CertificateData, CertificateTemplate)?Custom widget builder for certificate layoutNo
widthdouble?Width of the exported image. Default: 1000No
heightdouble?Height of the exported image. Default: 750No
fileNameString?Custom filename for the exported fileNo

exportAsPdf() Parameters

PropertyTypeDescriptionRequired
dataCertificateDataCertificate data to exportYes
templateCertificateTemplateTemplate to use for certificate designYes
customBuilderWidget Function(BuildContext, CertificateData, CertificateTemplate)?Custom widget builder for certificate layoutNo
widthdouble?Width of the exported PDF. Default: 1000No
heightdouble?Height of the exported PDF. Default: 750No
fileNameString?Custom filename for the exported fileNo

shareCertificate() Parameters

PropertyTypeDescriptionRequired
contextBuildContextFlutter build context for sharingYes
dataCertificateDataCertificate data to shareYes
templateCertificateTemplateTemplate to use for certificate designYes
customBuilderWidget Function(BuildContext, CertificateData, CertificateTemplate)?Custom widget builder for certificate layoutNo
widthdouble?Width of the shared certificateNo
heightdouble?Height of the shared certificateNo
asPdfboolShare as PDF format. Default: falseNo
fileNameString?Custom filename for the shared fileNo
subjectString?Subject line for sharing. Default: auto-generatedNo

CertificateGenerator Properties

PropertyTypeDescriptionRequired
dataCertificateDataCertificate data to generateYes
templateCertificateTemplateTemplate to use for certificate designYes

CertificatePreview Widget Properties

PropertyTypeDescriptionRequired
dataCertificateDataCertificate data to previewYes
templateCertificateTemplateTemplate to use for certificate designYes
customBuilderWidget Function(BuildContext, CertificateData, CertificateTemplate)?Custom widget builder for certificate layoutNo
widthdoubleWidth of the preview widgetYes
heightdoubleHeight of the preview widgetYes

CertificateTemplate Available Templates

Template NameDescription
elegant()Elegant design with classic styling
modern()Modern design with contemporary elements
minimalist()Clean, minimalist design with simple layout

Available Methods

MethodReturn TypeDescription
exportAsPng()FutureExport certificate as PNG image file
exportAsPdf()FutureExport certificate as PDF document
shareCertificate()FutureShare certificate via system share dialog
buildPreview()WidgetBuild a preview widget of the certificate
generateCertificateId()StringGenerate a unique certificate ID
copyWith()CertificateDataCreate a copy with modified properties

Basic Usage

import 'package:flutter/material.dart';
import 'package:certify_me/certify_me.dart';

void main() {
  runApp(const MaterialApp(home: CertificateTestPage()));
}

class CertificateTestPage extends StatefulWidget {
  const CertificateTestPage({super.key});

  @override
  State<CertificateTestPage> createState() => _CertificateTestPageState();
}

class _CertificateTestPageState extends State<CertificateTestPage> {
  final CertificateData certificateData = CertificateData(
    recipientName: 'John Doe',
    courseTitle: 'Flutter Development Masterclass',
    description: 'Successfully completed 40 hours of intensive Flutter training',
    issueDate: DateTime.now(),
    issuerName: 'Jane Smith',
    issuerTitle: 'Lead Instructor',
    certificateId: CertificateGenerator.generateCertificateId(),
  );

  late List<CertificateGenerator> generators;
  late List<Widget> previews;
  List<String?> pdfPaths = [null, null, null]; // For elegant, modern, minimalist

  @override
  void initState() {
    super.initState();

    // Create generators with each template
    generators = [
      CertificateGenerator(data: certificateData, template: CertificateTemplate.elegant()),
      CertificateGenerator(data: certificateData, template: CertificateTemplate.modern()),
      CertificateGenerator(data: certificateData, template: CertificateTemplate.minimalist()),
    ];

    // Create preview widgets
    previews = generators.map((g) => g.buildPreview()).toList();

    // Export all PDFs
    exportAllPDFs();
  }

  Future<void> exportAllPDFs() async {
    for (int i = 0; i < generators.length; i++) {
      final name = ['elegant', 'modern', 'minimalist'][i];
      final path = await generators[i].exportAsPdf(
        fileName: '${name}_certificate.pdf',
      );
      pdfPaths[i] = path;
    }
    setState(() {}); 
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Certificate Templates')),
      body: ListView.builder(
        itemCount: previews.length,
        itemBuilder: (context, index) {
          final templateNames = ['Elegant', 'Modern', 'Minimalist'];
          return Card(
            margin: const EdgeInsets.all(12),
            elevation: 4,
            shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
            child: Padding(
              padding: const EdgeInsets.all(16),
              child: Column(
                children: [
                  Text(
                    '${templateNames[index]} Template',
                    
                  ),
                  const SizedBox(height: 12),
                  previews[index],
                  const SizedBox(height: 12),
                 
                ],
              ),
            ),
          );
        },
      ),
    );
  }
}