Flutter电话号码解析插件phone_numbers_parser的使用

Flutter电话号码解析插件phone_numbers_parser的使用

简介

Phone Numbers Parser 是一个用于解析电话号码的Dart库,灵感来源于Google的libphonenumber和iOS的PhoneNumberKit。相比于libphonenumber,该库的优势在于它即时支持所有平台(无需通道支持)。

功能特性

  • 验证:基于类型(移动、固定线路、VoIP)进行验证
  • 格式化:为特定国家/地区格式化电话号码
  • 电话号码范围:查找一系列电话号码中的所有电话号码
  • 文本中查找电话号码
  • 支持东方阿拉伯数字
  • 使用来自Google libPhoneNumber项目的最佳元数据

使用示例

示例代码

以下是一个完整的示例demo,展示了如何使用phone_numbers_parser来解析、验证和格式化电话号码:

import 'package:phone_numbers_parser/phone_numbers_parser.dart';

void main() {
  // 解析电话号码
  final frPhone0 = PhoneNumber.parse('+33 655 5705 76');
  final inPhone0 = PhoneNumber.parse('+919955059057');
  print('Parsed Indian Phone Number: $inPhone0');

  // 法国本地拨打法国电话
  final frPhone1 = PhoneNumber.parse('0 655 5705 76', callerCountry: IsoCode.FR);
  
  // 美国拨打法国电话
  final frPhone2 = PhoneNumber.parse('011 33 655-5705-76', callerCountry: IsoCode.US);
  
  // 指定目的地国家
  final frPhone3 = PhoneNumber.parse('011 33 655 5705 76', destinationCountry: IsoCode.FR);

  final isAllEqual = frPhone0 == frPhone1 && frPhone0 == frPhone2 && frPhone0 == frPhone3;
  print('French Phone Number 1: $frPhone1');
  print('All parsed numbers are the same: $isAllEqual');

  // 验证电话号码
  final valid = frPhone1.isValid();
  final validMobile = frPhone1.isValid(type: PhoneNumberType.mobile);
  final validFixed = frPhone1.isValid(type: PhoneNumberType.fixedLine);
  print('Valid: $valid'); // true
  print('Valid Mobile: $validMobile'); // true
  print('Valid Fixed Line: $validFixed'); // false

  // 从文本中查找潜在的电话号码
  final text = 'hey my phone number is: +33 939 876 218, but you can call me on +33 939 876 999 too';
  final found = PhoneNumber.findPotentialPhoneNumbers(text);
  print('Found phone numbers in text: $found');

  // 格式化电话号码
  print('');
  print('Formatting:');
  final phoneNumber = PhoneNumber.parse('2025550119', destinationCountry: IsoCode.US);
  final formattedNsn = phoneNumber.formatNsn();
  print('Formatted: $formattedNsn'); // (202) 555-0119
  print('International format: ${phoneNumber.international}');

  // 处理电话号码范围
  print('');
  print('Ranges:');
  final first = PhoneNumber.parse('+33 655 5705 00');
  final last = PhoneNumber.parse('+33 655 5705 03');
  final range = PhoneNumber.getRange(first, last);
  print('Count: ${range.count}');
  print('Expand: ${range.expandRange().join(',')}');

  if (first > last) {
    print("This shouldn't be.");
  }

  final one = PhoneNumber.parse('+33 655 5705 01');
  final two = PhoneNumber.parse('+33 655 5705 02');

  if (one.isAdjacentTo(two)) {
    print('We are together');
  }
  if (one.isSequentialTo(two)) {
    print('$two comes after $one');
  }

  /// 将电话号码视为整数处理
  final three = two + 1;
  print('It\'s still a phone No. $three');
  two - 1 == one;
  final another = one + 2;
  print('$another == $three');
}

安装

pubspec.yaml文件中添加依赖:

dependencies:
  phone_numbers_parser: ^latest_version # 替换为最新版本号

然后运行flutter pub get以安装包。

运行示例

将上述代码保存到你的Flutter项目中并运行。这段代码演示了如何解析不同格式的电话号码,验证其有效性,从文本中提取电话号码,以及格式化电话号码。

总结

phone_numbers_parser是一个强大且易于使用的库,适用于需要处理国际电话号码的应用程序。通过它的帮助,你可以轻松地解析、验证和格式化各种格式的电话号码,并处理电话号码范围。希望这个示例能帮助你更好地理解和使用这个库。


更多关于Flutter电话号码解析插件phone_numbers_parser的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter电话号码解析插件phone_numbers_parser的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用phone_numbers_parser插件的示例代码。这个插件能够帮助你解析、格式化和验证电话号码。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加phone_numbers_parser依赖:

dependencies:
  flutter:
    sdk: flutter
  phone_numbers_parser: ^0.3.4  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

2. 导入包

在你的Dart文件中导入phone_numbers_parser包:

import 'package:phone_numbers_parser/phone_numbers_parser.dart';

3. 使用示例

以下是一个完整的示例,展示如何使用phone_numbers_parser来解析、格式化和验证电话号码。

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

void main() {
  runApp(MyApp());
}

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

class _MyAppState extends State<MyApp> {
  String parsedNumber = '';
  String formattedNumber = '';
  bool isValid = false;

  void parseAndValidatePhoneNumber(String input) async {
    PhoneNumber phoneNumber = PhoneNumber();
    bool result = await phoneNumber.parse(input);

    if (result) {
      setState(() {
        parsedNumber = phoneNumber.e164; // 国际标准格式
        formattedNumber = phoneNumber.formatInternational(); // 国际格式
        isValid = true;
      });
    } else {
      setState(() {
        parsedNumber = '';
        formattedNumber = '';
        isValid = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Phone Number Parser Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              TextField(
                decoration: InputDecoration(
                  labelText: 'Enter Phone Number',
                ),
                onChanged: (value) {
                  // 这里可以添加即时验证逻辑,或者仅仅作为输入
                },
                onEditingComplete: () {
                  // 当用户完成输入时解析和验证号码
                  parseAndValidatePhoneNumber(this.textEditingController.text);
                },
                controller: TextEditingController()..addListener(() {}), // 这里需要初始化TextEditingController并监听变化,但为简化示例,未完整实现
              ),
              SizedBox(height: 16),
              if (isValid)
                Text(
                  'Parsed Number (E.164): $parsedNumber',
                  style: TextStyle(fontSize: 16),
                ),
              if (isValid)
                Text(
                  'Formatted Number: $formattedNumber',
                  style: TextStyle(fontSize: 16),
                ),
              if (!isValid)
                Text(
                  'Invalid phone number',
                  style: TextStyle(color: Colors.red, fontSize: 16),
                ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () {
                  // 假设这里有一个TextEditingController来获取TextField的值
                  // TextEditingController textEditingController = TextEditingController(); // 这需要在实际应用中初始化和管理
                  // parseAndValidatePhoneNumber(textEditingController.text);
                  // 由于示例中未完整管理TextEditingController,这里仅作为按钮演示
                },
                child: Text('Parse and Validate'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意

  1. 在实际应用中,你需要管理TextEditingController的生命周期,这里为了简化示例,没有完整实现。
  2. 你可以根据需求调整UI和逻辑,例如即时验证输入而不是等待用户完成输入。

这个示例展示了如何使用phone_numbers_parser插件来解析和验证电话号码,并将其格式化为国际标准格式。希望这对你有所帮助!

回到顶部