Flutter格式化输入插件masked_text_field的使用

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

Flutter格式化输入插件masked_text_field的使用

Masked Text Field

pub package pub points LinkedIn Instagram Facebook YouTube

Features

masked_text_field 是一个用于格式化输入的Flutter插件,可以格式化日期、电话号码、IP地址等。如果你需要对输入进行格式化,比如电话号码或IP地址,可以使用这个插件。

Getting Started

首先,在 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  masked_text_field: any

Usage Example

导入包

import 'package:masked_text_field/masked_text_field.dart';

添加文本字段

MaskedTextField 是一个简单的Widget,用法与其他文本字段类似。

MaskedTextField(
  maskedTextFieldController: textfieldController,
  mask: "xxx.xxx.xxx.xxx",
  maxLength: 15,
  keyboardType: TextInputType.number,
  inputDecoration: InputDecoration(
    hintText: "192.192.192.192", 
    counterText: "",
    labelText: "IP Address"
  ),
);
  • 'x' 是默认的占位符字符,你的文本将填充在这个位置。
  • 你可以通过设置 escapeCharacter 属性来更改占位符字符。

例如,使用 # 作为占位符字符:

MaskedTextField(
  maskedTextFieldController: textfieldController,
  escapeCharacter: '#',
  mask: "###.###.###.###",
  maxLength: 15,
  keyboardType: TextInputType.number,
  inputDecoration: InputDecoration(
    counterText: "",
    hintText: "192.192.192.192", 
    labelText: "IP Address"
  ),
);

完整示例

以下是一个完整的示例,展示了如何在Flutter应用中使用 MaskedTextField 来格式化IP地址、日期和电话号码。

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(title: 'Masked Text Field'),
    );
  }
}

class HomePage extends StatefulWidget {
  final String title;
  const HomePage({Key? key, required this.title}) : super(key: key);

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  var ipController = TextEditingController();
  var dateController = TextEditingController();
  var phoneController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            const Text('Enter IP Address'),
            const SizedBox(height: 5),
            MaskedTextField(
              textFieldController: ipController,
              inputDecoration: const InputDecoration(
                hintText: '192.192.192.192',
                counterText: ""
              ),
              autofocus: true,
              mask: 'xxx.xxx.xxx.xxx',
              maxLength: 15,
              keyboardType: TextInputType.number,
              onChange: (String value) {
                print(value);
              },
            ),
            const SizedBox(height: 10),
            const Text('Enter Date'),
            const SizedBox(height: 5),
            MaskedTextField(
              textFieldController: dateController,
              inputDecoration: const InputDecoration(
                hintText: 'DD/MM/YYYY',
                counterText: ""
              ),
              autofocus: true,
              mask: 'xx/xx/xxxx',
              maxLength: 10,
              keyboardType: TextInputType.number,
              onChange: (String value) {
                print(value);
              },
            ),
            const SizedBox(height: 10),
            const Text('Enter Phone Number'),
            const SizedBox(height: 5),
            MaskedTextField(
              textFieldController: phoneController,
              inputDecoration: const InputDecoration(
                hintText: '98765-43210',
                counterText: "",
                prefixText: '+91 '
              ),
              autofocus: true,
              mask: 'xxxxx-xxxxx',
              maxLength: 11,
              keyboardType: TextInputType.number,
              onChange: (String value) {
                print(value);
              },
            ),
          ],
        ),
      ),
    );
  }
}

Contributing

欢迎提交Pull Request。对于重大更改,请先创建一个Issue讨论你想要更改的内容。


更多关于Flutter格式化输入插件masked_text_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter格式化输入插件masked_text_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用masked_text_field插件来实现格式化输入的示例代码。这个插件允许你创建一个带有特定格式的文本输入字段,例如电话号码、信用卡号等。

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

dependencies:
  flutter:
    sdk: flutter
  masked_text_field: ^2.0.0  # 请检查最新版本号

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

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例,展示了如何创建一个用于输入电话号码的文本字段:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Masked TextField Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final phoneController = TextEditingController();

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Masked TextField Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Phone Number:'),
            SizedBox(height: 8.0),
            MaskedTextField(
              controller: phoneController,
              mask: '(###) ###-####',
              keyboardType: TextInputType.phone,
              textAlign: TextAlign.left,
              autoValidateMode: AutovalidateMode.onUserInteraction,
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Phone number is required';
                }
                return null;
              },
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Enter Phone Number',
                errorText: null,  // This will be set by the validator
              ),
            ),
            SizedBox(height: 24.0),
            ElevatedButton(
              onPressed: () {
                // Do something with the formatted phone number
                print(phoneController.text);
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个MaskedTextField,它有一个掩码(###) ###-####,用于格式化输入的电话号码。我们还添加了一个简单的验证器来确保电话号码不是空的。

你可以根据需要调整掩码和其他参数,以适应不同的输入格式,例如信用卡号、日期等。

希望这个示例能帮到你!如果你有任何其他问题,欢迎继续提问。

回到顶部