libphonenumber_buenro_fork 3.0.6 copy "libphonenumber_buenro_fork: ^3.0.6" to clipboard
libphonenumber_buenro_fork: ^3.0.6 copied to clipboard

This is a Flutter implementation of libphonenumber originally developed by https://github.com/emostar/flutter-libphonenumber, forked for support for flutter 3.24.1

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:libphonenumber_buenro_fork/libphonenumber_buenro_fork.dart';

void main() => runApp(new MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final TextEditingController _textController = TextEditingController();
  bool _isValid = false;
  String _normalized = '';
  RegionInfo? _regionInfo;
  String _carrierName = '';
  String _exampleNumber = '';
  Map<PhoneNumberFormat, String> _numberMap = <PhoneNumberFormat, String>{};

  @override
  void dispose() {
    _textController.dispose();
    super.dispose();
  }

  _showDetails() async {
    var s = _textController.text;

    bool? isValid =
        await PhoneNumberUtil.isValidPhoneNumber(phoneNumber: s, isoCode: 'US');
    String? normalizedNumber = await PhoneNumberUtil.normalizePhoneNumber(
        phoneNumber: s, isoCode: 'US');
    RegionInfo regionInfo =
        await PhoneNumberUtil.getRegionInfo(phoneNumber: s, isoCode: 'US');
    String? carrierName =
        await PhoneNumberUtil.getNameForNumber(phoneNumber: s, isoCode: 'US');
    String exampleNumber = await PhoneNumberUtil.getExampleNumber('US');

    final Map<PhoneNumberFormat, String> numberMap =
        <PhoneNumberFormat, String>{};
    for (var format in PhoneNumberFormat.values) {
      final String formattedNumber = await PhoneNumberUtil.format(
        format: format,
        phoneNumber: s,
        isoCode: 'US',
        removeSpacesBetweenDigits: false,
      );
      numberMap[format] = formattedNumber;
    }

    setState(() {
      _isValid = isValid ?? false;
      _normalized = normalizedNumber ?? "N/A";
      _regionInfo = regionInfo;
      _numberMap = numberMap;
      _carrierName = carrierName ?? "N/A";
      _exampleNumber = exampleNumber;
    });
  }

  @override
  Widget build(BuildContext context) {
    var phoneText = Padding(
      padding: EdgeInsets.all(16.0),
      child: TextFormField(
        decoration: InputDecoration(
          hintText: "Phone Number",
        ),
        controller: _textController,
        keyboardType: TextInputType.phone,
      ),
    );

    var submitButton = MaterialButton(
      color: Colors.blueAccent,
      textColor: Colors.white,
      onPressed: _showDetails,
      child: Text('Show Details'),
    );

    var outputTexts = Column(
      children: <Widget>[
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Is Valid?'),
            Padding(
              padding: EdgeInsets.only(left: 12.0),
              child: Text(
                _isValid ? 'YES' : 'NO',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
          ],
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Normalized:'),
            Padding(
              padding: EdgeInsets.only(left: 12.0),
              child: Text(
                _normalized,
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
          ],
        ),
        Column(
          children: _numberMap.entries
              .map<Widget>(
                (MapEntry<PhoneNumberFormat, String> entry) =>
                    _NumberFormatEntry(
                  format: entry.key,
                  formattedNumber: entry.value,
                ),
              )
              .toList(),
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Region Info:'),
            Padding(
              padding: EdgeInsets.only(left: 12.0),
              child: Text(
                'Prefix=${_regionInfo?.regionPrefix}, ISO=${_regionInfo?.isoCode}, Formatted=${_regionInfo?.formattedPhoneNumber}',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
          ],
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Carrier'),
            Padding(
              padding: EdgeInsets.only(left: 12.0),
              child: Text(
                'Carrier Name=$_carrierName',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
          ],
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Example'),
            Padding(
              padding: EdgeInsets.only(left: 12.0),
              child: Text(
                '$_exampleNumber',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
          ],
        ),
      ],
    );

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Plugin example app'),
        ),
        body: Container(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              phoneText,
              submitButton,
              Padding(padding: EdgeInsets.all(10.0)),
              Padding(
                padding: EdgeInsets.all(10.0),
                child: Text(
                  'Details for ${_textController.text}',
                  style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),
                ),
              ),
              outputTexts,
            ],
          ),
        ),
      ),
    );
  }
}

class _NumberFormatEntry extends StatelessWidget {
  const _NumberFormatEntry(
      {required this.format, required this.formattedNumber});
  final PhoneNumberFormat format;
  final String formattedNumber;

  @override
  Widget build(BuildContext context) {
    final String rawEnumString = format.toString();
    final String formatDisplayValue =
        rawEnumString.substring(rawEnumString.lastIndexOf('.') + 1);

    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text('$formatDisplayValue Format:'),
          Padding(
            padding: EdgeInsets.only(left: 12.0),
            child: Text(
              formattedNumber,
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
          ),
        ],
      ),
    );
  }
}
0
likes
0
points
24
downloads

Publisher

unverified uploader

Weekly Downloads

This is a Flutter implementation of libphonenumber originally developed by https://github.com/emostar/flutter-libphonenumber, forked for support for flutter 3.24.1

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, meta

More

Packages that depend on libphonenumber_buenro_fork

Packages that implement libphonenumber_buenro_fork