Flutter电话号码输入插件phonenumber_input的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter电话号码输入插件phonenumber_input的使用

欢迎来到PhoneNumberInput的初始版本!这是一个允许用户输入带国家代码的电话号码的Flutter小部件。敬请期待未来版本中的更多令人兴奋的功能!

示例 🌈

PhoneNumberInput(
  labelText: 'Phone Number',
  isDarkMode: false,
  onCountryCodeChanged: (code) {
    print('Country code changed: $code');
  },
  onPhoneNumberChanged: (phoneNumber) {
    print('Phone number changed: $phoneNumber');
  },
)

PhoneNumberInput(
  labelText: 'Phone Number',
  isDarkMode: true,
  onCountryCodeChanged: (code) {
    print('Country code changed: $code');
  },
  onPhoneNumberChanged: (phoneNumber) {
    print('Phone number changed: $phoneNumber');
  },
)

PhoneNumber Input Demo PhoneNumber Input Demo PhoneNumber Input Demo PhoneNumber Input Demo

特性 🌟

  • 支持带国家代码的电话号码输入
  • 可自定义标签、样式和暗模式支持
  • 国家代码和电话号码变化时的回调

安装 🛠️

要在您的Flutter项目中使用此小部件,请在pubspec.yaml文件中添加以下依赖:

dependencies:
  phonenumber_input: ^1.0.0

然后运行:

flutter pub get

使用 🚨

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('PhoneNumberInput Demo'),
        ),
        body: Center(
          child: PhoneNumberInput(
            labelText: 'Phone Number',
            isDarkMode: false,
            onCountryCodeChanged: (code) {
              print('Country code changed: $code');
            },
            onPhoneNumberChanged: (phoneNumber) {
              print('Phone number changed: $phoneNumber');
            },
          ),
        ),
      ),
    );
  }
}

小部件属性 🎨

  • labelText (String): 电话号码输入的小部件标签文本。
  • padding (EdgeInsetsGeometry): 小部件的填充。
  • labelStyle (TextStyle): 标签文本的样式。
  • countryCodeStyle (TextStyle): 国家代码文本的样式。
  • isDarkMode (bool): 设置为true表示启用暗模式,false表示启用亮模式。
  • onCountryCodeChanged (Function(String)?): 国家代码变化时的回调。
  • onPhoneNumberChanged (Function(String)?): 电话号码变化时的回调。

感谢您使用PhoneNumberInput!如果您有任何问题或建议,请随时贡献、报告问题或提出新功能。祝您使用Flutter愉快! 🎉

完整示例

以下是一个完整的示例代码,展示了如何在Flutter应用中使用PhoneNumberInput小部件:

import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:phonenumber_input/phonenumber_input.dart';

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

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

  // 这是您的应用程序的根小部件。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.amber),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Brightness brightness =
      SchedulerBinding.instance.platformDispatcher.platformBrightness;
  bool darkModeOn = false;

  [@override](/user/override)
  void initState() {
    super.initState();
    darkModeOn = brightness == Brightness.dark;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor:
          darkModeOn ? const Color.fromARGB(221, 48, 48, 48) : Colors.white,
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            const SizedBox(
              height: 60,
            ),
            PhoneNumberInput(
              labelText: "Phone Number",
              isDarkMode: darkModeOn,
              onCountryCodeChanged: (value) {
                print(value);
              },
              onPhoneNumberChanged: (value) {
                print(value);
              },
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用phonenumber_input插件的示例代码。这个插件可以帮助用户以友好的方式输入和验证电话号码。

首先,确保你已经在pubspec.yaml文件中添加了phonenumber_input依赖:

dependencies:
  flutter:
    sdk: flutter
  phonenumber_input: ^0.7.0  # 请检查最新版本号

然后运行flutter pub get来获取依赖。

接下来,你可以在你的Flutter项目中按照以下方式使用phonenumber_input插件:

import 'package:flutter/material.dart';
import 'package:phonenumber_input/phonenumber_input.dart';
import 'package:intl_phone_number_input/intl_phone_number_input.dart';
import 'package:intl_phone_number_input/utils/utils.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('PhoneNumberInput Example'),
        ),
        body: Center(
          child: PhoneNumberInputExample(),
        ),
      ),
    );
  }
}

class PhoneNumberInputExample extends StatefulWidget {
  @override
  _PhoneNumberInputExampleState createState() => _PhoneNumberInputExampleState();
}

class _PhoneNumberInputExampleState extends State<PhoneNumberInputExample> {
  PhoneNumber _phoneNumber = PhoneNumber();
  TextEditingController _controller = TextEditingController();
  FocusNode _focusNode = FocusNode();
  PhoneInputFormatter _phoneInputFormatter = PhoneInputFormatter();

  @override
  void dispose() {
    _controller.dispose();
    _focusNode.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          IntlPhoneNumberInput(
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              labelText: 'Phone Number',
            ),
            initialSelectionLength: 0,
            autoValidateMode: AutovalidateMode.onUserInteraction,
            selectorConfig: SelectorConfig(
              selectorType: PhoneInputSelectorType.BOTTOM_SHEET,
            ),
            keyboardType: TextInputType.phone,
            inputFormatters: <TextInputFormatter>[
              FilteringTextInputFormatter.digitsOnly,
              _phoneInputFormatter,
            ],
            ignoreBlank: false,
            onChanged: (PhoneNumber number) {
              setState(() {
                _phoneNumber = number;
              });
            },
            onSaved: (PhoneNumber number) {
              _phoneNumber = number;
            },
            validator: (PhoneNumber value) {
              if (value == null || value.isEmpty) {
                return 'Phone number is required';
              }
              return null;
            },
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () {
              // Handle phone number submission
              if (_phoneNumber.isValid) {
                print('Complete phone number: ${_phoneNumber.number}');
                print('E164 format: ${_phoneNumber.e164}');
                print('International format: ${_phoneNumber.international}');
                print('National format: ${_phoneNumber.national}');
              } else {
                print('Invalid phone number');
              }
            },
            child: Text('Submit'),
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们使用了IntlPhoneNumberInput组件,它来自于intl_phone_number_input包,它扩展了phonenumber_input的功能,提供了更多的国际电话号码输入和格式化功能。请确保你根据实际需要调整依赖项。

这个示例演示了如何:

  1. 在UI中显示一个电话号码输入框。
  2. 使用IntlPhoneNumberInput组件格式化输入。
  3. 在用户提交时验证和获取电话号码。

注意:实际使用中,你可能需要根据项目需求调整UI和逻辑。例如,你可能需要处理不同的国家代码选择、错误处理、样式定制等。

回到顶部