india_format_utils 0.0.1 copy "india_format_utils: ^0.0.1" to clipboard
india_format_utils: ^0.0.1 copied to clipboard

Indian format utilities for Flutter: PAN number validation and INR currency formatting with Lakhs & Crores.

example/lib/main.dart

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

void main() {
  runApp(const ExampleApp());
}

class ExampleApp extends StatelessWidget {
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: ValidationDemoPage(),
    );
  }
}

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

  @override
  State<ValidationDemoPage> createState() => _ValidationDemoPageState();
}

class _ValidationDemoPageState extends State<ValidationDemoPage> {
  final _panController = TextEditingController();
  final _amountController = TextEditingController();
  final _phoneController = TextEditingController();

  bool? _panValid;
  bool? _phoneValid;
  String _formattedInr = '';
  String _phoneError = '';

  @override
  void dispose() {
    _panController.dispose();
    _amountController.dispose();
    _phoneController.dispose();
    super.dispose();
  }

  void _validatePan(String value) {
    setState(() {
      _panValid = PanValidator.isValid(
        value.trim(),
        validateHolderType: true,
      );
    });
  }

  void _formatInr(String value) {
    setState(() {
      final parsed = num.tryParse(value);
      _formattedInr =
      parsed == null ? 'Invalid amount' : InrFormatter.format(parsed);
    });
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('india_format_utils Example'),
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // PAN
            const Text(
              'PAN Number',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            TextField(
              controller: _panController,
              textCapitalization: TextCapitalization.characters,
              onChanged: _validatePan,
              decoration: InputDecoration(
                hintText: 'ABCDE1234F',
                suffixIcon: _panValid == null
                    ? null
                    : Icon(
                  _panValid! ? Icons.check_circle : Icons.error,
                  color: _panValid! ? Colors.green : Colors.red,
                ),
              ),
            ),
            const SizedBox(height: 24),

            // INR
            const Text(
              'Amount (INR)',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            TextField(
              controller: _amountController,
              keyboardType: TextInputType.number,
              onChanged: _formatInr,
              decoration: const InputDecoration(
                hintText: 'Enter amount',
              ),
            ),
            const SizedBox(height: 8),
            Text(
              _formattedInr.isEmpty ? '' : 'Formatted: $_formattedInr',
              style: const TextStyle(fontSize: 16),
            ),
          ],
        ),
      ),
    );
  }
}
1
likes
160
points
111
downloads

Publisher

verified publisherdivyanshdev.tech

Weekly Downloads

Indian format utilities for Flutter: PAN number validation and INR currency formatting with Lakhs & Crores.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on india_format_utils