uz_document_validator 0.1.0 copy "uz_document_validator: ^0.1.0" to clipboard
uz_document_validator: ^0.1.0 copied to clipboard

Comprehensive validator and formatter for Uzbekistan documents — PINFL/JSHSHIR, passport, INN/STIR, phone numbers, and license plates.

example/lib/main.dart

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'uz_document_validator example',
      theme: ThemeData(
        colorSchemeSeed: Colors.indigo,
        useMaterial3: true,
      ),
      home: const ValidatorDemoPage(),
    );
  }
}

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

  @override
  State<ValidatorDemoPage> createState() => _ValidatorDemoPageState();
}

class _ValidatorDemoPageState extends State<ValidatorDemoPage> {
  final _formKey = GlobalKey<FormState>();
  final _pinflCtrl = TextEditingController();
  final _passportCtrl = TextEditingController();
  final _innCtrl = TextEditingController();
  final _phoneCtrl = TextEditingController();

  String? _pinflInfo;
  String? _phoneOperator;

  @override
  void dispose() {
    _pinflCtrl.dispose();
    _passportCtrl.dispose();
    _innCtrl.dispose();
    _phoneCtrl.dispose();
    super.dispose();
  }

  void _validateAll() {
    final isValid = _formKey.currentState?.validate() ?? false;

    setState(() {
      final info = UzValidator.parsePinfl(_pinflCtrl.text);
      _pinflInfo = info == null
          ? null
          : 'Jins: ${info.gender}, '
              'Tug\'ilgan: ${info.birthDate.toIso8601String().substring(0, 10)}, '
              'Hudud: ${info.regionCode}';

      _phoneOperator = UzValidator.getPhoneOperator(_phoneCtrl.text);
    });

    if (isValid) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('Barcha hujjatlar valid!')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Uz Document Validator')),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16),
        child: Form(
          key: _formKey,
          autovalidateMode: AutovalidateMode.onUserInteraction,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              TextFormField(
                controller: _pinflCtrl,
                decoration: const InputDecoration(
                  labelText: 'PINFL / JSHSHIR',
                  hintText: '14 ta raqam',
                  border: OutlineInputBorder(),
                ),
                keyboardType: TextInputType.number,
                inputFormatters: [PinflFormatter()],
                validator: (v) {
                  final r = UzValidator.pinfl(v ?? '');
                  return r.isValid ? null : r.errorMessage;
                },
              ),
              if (_pinflInfo != null) ...[
                const SizedBox(height: 8),
                Text(_pinflInfo!, style: const TextStyle(color: Colors.green)),
              ],
              const SizedBox(height: 16),
              TextFormField(
                controller: _passportCtrl,
                decoration: const InputDecoration(
                  labelText: 'Pasport',
                  hintText: 'AA 1234567',
                  border: OutlineInputBorder(),
                ),
                inputFormatters: [PassportFormatter()],
                validator: (v) {
                  final r = UzValidator.passport(v ?? '');
                  return r.isValid ? null : r.errorMessage;
                },
              ),
              const SizedBox(height: 16),
              TextFormField(
                controller: _innCtrl,
                decoration: const InputDecoration(
                  labelText: 'INN / STIR',
                  hintText: '9 ta raqam',
                  border: OutlineInputBorder(),
                ),
                keyboardType: TextInputType.number,
                validator: (v) {
                  final r = UzValidator.inn(v ?? '');
                  return r.isValid ? null : r.errorMessage;
                },
              ),
              const SizedBox(height: 16),
              TextFormField(
                controller: _phoneCtrl,
                decoration: const InputDecoration(
                  labelText: 'Telefon',
                  hintText: '+998 90 123 45 67',
                  border: OutlineInputBorder(),
                ),
                keyboardType: TextInputType.phone,
                inputFormatters: [UzPhoneFormatter()],
                validator: (v) {
                  final r = UzValidator.phone(v ?? '');
                  return r.isValid ? null : r.errorMessage;
                },
              ),
              if (_phoneOperator != null) ...[
                const SizedBox(height: 8),
                Text('Operator: $_phoneOperator',
                    style: const TextStyle(color: Colors.green)),
              ],
              const SizedBox(height: 24),
              FilledButton(
                onPressed: _validateAll,
                child: const Text('Tekshirish'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
1
likes
150
points
61
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Comprehensive validator and formatter for Uzbekistan documents — PINFL/JSHSHIR, passport, INN/STIR, phone numbers, and license plates.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on uz_document_validator