Package selection guidance compiled from public package information, community data, and project usage.
The invoiceninja package enables Flutter developers to generate PDF invoices and process payments directly within their apps. By integrating with the Invoice Ninja API, it simplifies invoice creation, customization, and payment collection across multiple platforms. Developers can programmatically create professional invoices with branding, send them to clients, and accept payments via integrated gateways. The package supports Android, iOS, Web, macOS, Windows, and Linux, making it ideal for cross-platform business applications. It streamlines financial workflows for freelancers, small businesses, and service providers.
Use cases
Generate client invoices
Process online payments
Automate billing workflows
Support multi-platform apps
Send branded PDFs
Track payment status
Key features
PDF invoice generation
Payment integration
Cross-platform support
API-driven design
Customizable templates
Real-time payment tracking
Suitable for
Freelancers
Small business apps
Service-based platforms
Billing systems
E-commerce integrations
Considerations
Requires Invoice Ninja account
Depends on external API
Needs internet connection
Limited offline functionality
Rate limits may apply
Authentication setup required
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
Invoice Ninja
Create PDF invoices and accept payments in a Flutter app
YouTube Video
Features
Accept online payment in mobile, web and desktop Flutter apps
Supports many payment gateways including Stripe, PayPal and more
InvoiceNinja: Supports the public 'Storefront' routes which allow reading the list of products and creating/finding clients and invoices. Using this class works with restricted access to the account.
InvoiceNinjaAdmin: Supports the REST Admin API which uses token based security. Using this class requires an API token to access the account.
Storefront API
Configure
InvoiceNinja.configure(
'KEY', // Set your company key or use 'KEY' to test
url: 'https://demo.invoiceninja.com', // Set your selfhost app URL
debugEnabled: true,
);
Load the product list
final products = awaitInvoiceNinja.products.load();
Find the product by key
final product = awaitInvoiceNinja.products.findByKey('product_key');
Create/persist the client
var client = Client.forContact(email: 'test@example.com');
client = awaitInvoiceNinja.clients.save(client);
Create/persist the invoice
var invoice = Invoice.forClient(client, products: [product]);
invoice = awaitInvoiceNinja.invoices.save(invoice);
Consider giving issue #57536 a thumbs up to make this better in the future.
Admin API
Configure
InvoiceNinjaAdmin.configure(
'TOKEN', // Set your API token or use 'TOKEN' to test
url: 'https://demo.invoiceninja.com', // Set your selfhost app URL
debugEnabled: true,
);
Find a client by email
final client = awaitInvoiceNinjaAdmin.clients.findByEmail(email);
Load all invoices
final payments = awaitInvoiceNinjaAdmin.payments.load();
Load the payments list
final payments = awaitInvoiceNinjaAdmin.payments.load();
Find a payment by id
final payment = awaitInvoiceNinjaAdmin.payments.findById(id);