Flutter数字格式化插件pretty_numbers的使用

Flutter数字格式化插件pretty_numbers的使用

Pretty Numbers 是一个用于美化 Flutter 应用中数字输入字段的插件。通过它,你可以使用户更容易阅读并吸引他们的眼球。

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  pretty_numbers: ^0.0.1

然后运行 flutter pub get 来获取这个包。

简单示例

下面是一个简单的示例,展示如何使用 Pretty Numbers 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Pretty Numbers Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: ExampleForm(),
        ),
      ),
    );
  }
}

class ExampleForm extends StatefulWidget {
  [@override](/user/override)
  _ExampleFormState createState() => _ExampleFormState();
}

class _ExampleFormState extends State<ExampleForm> {
  final _controller = TextEditingController();
  final _focusNode = FocusNode();

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    _focusNode.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      children: [
        PrettyNumbers(
          controller: _controller,
          focusNode: _focusNode,
          hintText: 'Enter amount',
          suffixIcon: Icon(Icons.check_circle),
          prefixIcon: Icon(Icons.attach_money),
        ),
      ],
    );
  }
}

另一个令人兴奋的示例

下面是一个更复杂的示例,展示如何在一个表单中使用 Pretty Numbers 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ComplexExampleScreen(),
    );
  }
}

class ComplexExampleScreen extends StatefulWidget {
  [@override](/user/override)
  _ComplexExampleScreenState createState() => _ComplexExampleScreenState();
}

class _ComplexExampleScreenState extends State<ComplexExampleScreen> {
  final _numberController = TextEditingController();
  final _otherFieldController = TextEditingController();
  final _formKey = GlobalKey<FormState>();

  [@override](/user/override)
  void dispose() {
    _numberController.dispose();
    _otherFieldController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Exciting Pretty Numbers Example')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              PrettyNumbers(
                controller: _numberController,
                hintText: 'Enter a number',
                prefixIcon: Icon(Icons.attach_money),
                suffixIcon: Icon(Icons.check),
                focusedBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.green, width: 2.0),
                  borderRadius: BorderRadius.all(Radius.circular(8)),
                ),
                errorBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.red, width: 2.0),
                  borderRadius: BorderRadius.all(Radius.circular(8)),
                ),
                border: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.grey, width: 1.0),
                  borderRadius: BorderRadius.all(Radius.circular(8)),
                ),
                hintStyle: TextStyle(color: Colors.grey, fontSize: 16),
              ),
              SizedBox(height: 20),
              TextFormField(
                controller: _otherFieldController,
                decoration: InputDecoration(
                  labelText: 'Another Field',
                  border: OutlineInputBorder(),
                ),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter some text';
                  }
                  return null;
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    // Process data.
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text('Processing Data')),
                    );
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多属性

Pretty Numbers 还支持更多的自定义属性。例如,你可以在文本框中设置样式、填充颜色和其他装饰属性。下面是一个带有更多属性的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Pretty Numbers Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: ExampleForm(),
        ),
      ),
    );
  }
}

class ExampleForm extends StatefulWidget {
  [@override](/user/override)
  _ExampleFormState createState() => _ExampleFormState();
}

class _ExampleFormState extends State<ExampleForm> {
  final _controller = TextEditingController();
  final _focusNode = FocusNode();

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    _focusNode.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
      child: Column(
        children: [
          // Simple example
          PrettyNumbers(
            controller: _controller,
            focusNode: _focusNode,
            hintText: 'Enter amount',
            suffixIcon: const Icon(Icons.check_circle),
            prefixIcon: const Icon(Icons.attach_money),
          ),
          // Example with custom properties
          PrettyNumbers(
            controller: _controller,
            focusNode: _focusNode,
            hintText: 'Enter amount',
            suffixIcon: Icon(Icons.check_circle),
            prefixIcon: Icon(Icons.attach_money),
            style: TextStyle(color: Colors.blue, fontSize: 18),
            hintStyle: TextStyle(color: Colors.grey, fontSize: 16),
            filled: true,
            decoration: InputDecoration(
              fillColor: Colors.lightBlue[50],
              focusedBorder: OutlineInputBorder(
                borderSide: BorderSide(color: Colors.blue, width: 2.0),
                borderRadius: BorderRadius.circular(10),
              ),
              errorBorder: OutlineInputBorder(
                borderSide: BorderSide(color: Colors.red, width: 2.0),
              ),
              border: OutlineInputBorder(
                borderRadius: BorderRadius.circular(10),
                borderSide: BorderSide(color: Colors.black, width: 1.0),
              ),
            ),
          ),
        ],
      ),
    ));
  }
}

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

1 回复

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


pretty_numbers 是一个用于 Flutter 的数字格式化插件,它可以帮助你将数字格式化为更易读的字符串,例如将大数字缩写为 1K1M 等。这个插件非常适合用在需要显示用户友好数字的应用程序中,比如社交媒体的点赞数、视频的观看次数等。

安装

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

dependencies:
  flutter:
    sdk: flutter
  pretty_numbers: ^1.0.0

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

基本用法

pretty_numbers 的使用非常简单。你可以使用 PrettyNumbers.format 方法来格式化数字。

import 'package:pretty_numbers/pretty_numbers.dart';

void main() {
  print(PrettyNumbers.format(1000)); // 输出: 1K
  print(PrettyNumbers.format(1500)); // 输出: 1.5K
  print(PrettyNumbers.format(1000000)); // 输出: 1M
  print(PrettyNumbers.format(1500000)); // 输出: 1.5M
}

自定义格式化

pretty_numbers 还允许你自定义格式化选项,例如设置小数点后的位数、是否显示后缀等。

void main() {
  print(PrettyNumbers.format(1500, decimalDigits: 0)); // 输出: 2K
  print(PrettyNumbers.format(1500, decimalDigits: 2)); // 输出: 1.50K
  print(PrettyNumbers.format(1500, showSuffix: false)); // 输出: 1.5
}

处理负数

pretty_numbers 也可以处理负数,并且会自动应用相同的格式化规则。

void main() {
  print(PrettyNumbers.format(-1000)); // 输出: -1K
  print(PrettyNumbers.format(-1500)); // 输出: -1.5K
}

其他功能

pretty_numbers 还提供了一些其他的功能,例如:

  • 自定义后缀:你可以自定义 K、M、B 等后缀。
  • 本地化支持:你可以根据不同的语言环境来格式化数字。
void main() {
  print(PrettyNumbers.format(1500, suffixes: ['千', '百万', '十亿'])); // 输出: 1.5千
}
回到顶部