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

A collection of Flutter TextInputFormatters, validators, and utilities tailored for Nepali data formats (phone numbers, citizenship, and Lakhs/Crores currency).

example/lib/main.dart

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

void main() => runApp(const ExampleApp());

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Nepali Input Formatters Example',
      theme: ThemeData(colorSchemeSeed: Colors.indigo, useMaterial3: true),
      home: const FormattersDemoPage(),
    );
  }
}

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

  @override
  State<FormattersDemoPage> createState() => _FormattersDemoPageState();
}

class _FormattersDemoPageState extends State<FormattersDemoPage> {
  final _formKey = GlobalKey<FormState>();

  final _phoneController = TextEditingController();
  final _citizenshipController = TextEditingController();
  final _currencyController = TextEditingController();

  NepaliTelecom _telecom = NepaliTelecom.unknown;

  @override
  void dispose() {
    _phoneController.dispose();
    _citizenshipController.dispose();
    _currencyController.dispose();
    super.dispose();
  }

  void _onSubmit() {
    if (_formKey.currentState!.validate()) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('All fields are valid.')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Nepali Input Formatters'),
        centerTitle: true,
      ),
      body: Form(
        key: _formKey,
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            spacing: 12,
            children: [
              TextFormField(
                controller: _phoneController,
                keyboardType: TextInputType.phone,
                inputFormatters: const [NepaliPhoneNumberFormatter()],
                validator: validateNepaliPhoneNumber,
                onChanged: (value) {
                  final digits = value.replaceAll(RegExp(r'[^0-9]'), '');
                  setState(() => _telecom = identifyNepaliTelecom(digits));
                },
                decoration: InputDecoration(
                  labelText: 'Mobile number',
                  hintText: '984-123-4567',
                  border: const OutlineInputBorder(),
                  helperText: _telecom == NepaliTelecom.unknown
                      ? null
                      : 'Detected operator: ${_telecom.name.toUpperCase()}',
                ),
              ),
              TextFormField(
                controller: _citizenshipController,
                keyboardType: TextInputType.number,
                inputFormatters: const [CitizenshipNumberFormatter()],
                validator: validateCitizenshipNumber,
                decoration: const InputDecoration(
                  labelText: 'Citizenship number',
                  hintText: '12-01-70-12345',
                  border: OutlineInputBorder(),
                ),
              ),
              TextFormField(
                controller: _currencyController,
                keyboardType: TextInputType.number,
                inputFormatters: const [SouthAsianCurrencyFormatter()],
                validator: validateCurrencyAmount,
                decoration: const InputDecoration(
                  labelText: 'Amount (NPR)',
                  hintText: '12,34,567',
                  border: OutlineInputBorder(),
                ),
              ),
              const SizedBox(height: 12),
              FilledButton(
                onPressed: _onSubmit,
                child: const Text('Validate'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
0
likes
160
points
5
downloads

Documentation

API reference

Publisher

verified publisherkushalpun.com.np

Weekly Downloads

A collection of Flutter TextInputFormatters, validators, and utilities tailored for Nepali data formats (phone numbers, citizenship, and Lakhs/Crores currency).

Repository (GitHub)
View/report issues

Topics

#nepal #nepali #input-formatter #validator #currency

License

MIT (license)

Dependencies

flutter

More

Packages that depend on nepali_input_formatters