Flutter数字选择器插件spflutter_number_picker的使用

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

Flutter数字选择器插件spflutter_number_picker的使用

本文档描述了该插件。如果您将此插件发布到pub.dev,则此文档的内容将出现在您的插件页面上。

对于如何编写一个好的插件文档,请参阅撰写插件页面的指南。

对于开发插件的一般信息,请参阅Dart开发插件的指南和Flutter开发插件和插件的指南。

特性

演示

自定义

  • 可以通过键盘手动输入值(长按文本)
  • 支持双精度值,并自动设置键盘和文本显示
  • 更改间隔值
  • 添加10倍间隔
  • 随文本长度变化字体大小

使用方法

示例代码

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  TextEditingController textEditingController = TextEditingController();

  double? _resetValue;

  double? XX;

  late NumberPicker np;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: Colors.deepPurple[400],
        body: SafeArea(
          child: SingleChildScrollView(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: [
                OutlinedButton(onPressed: (){
                  _resetValue = 7;
                  setState(() {});
                }, child: Text("添加")),
                NumberPicker(
                  theme: NumberSelectionTheme(
                      draggableCircleColor: Colors.blue,
                      iconsColor: Colors.white,
                      numberColor: Colors.white,
                      backgroundColor: Colors.deepPurpleAccent,
                      outOfConstraintsColor: Colors.deepOrange),
                  interval: 0.1,
                  initialValue: 0,
                  resetValue: _resetValue,
                  minValue: 15,
                  maxValue: 50.2,
                  direction: Axis.vertical,
                  withSpring: true,
                  onChanged: (double value) {
                    XX = 23;
                    setState(() {});
                    print("value: $value");
                  },
                  enableOnOutOfConstraintsAnimation: true,
                  onOutOfConstraints: () =>
                      print("This value is too high or too low"),
                ),
                Center(
                  child: Padding(
                    padding: const EdgeInsets.all(18.0),
                    child: SizedBox(
                      height: 50,
                      width: 400,
                      child: np = NumberPicker(
                        theme: NumberSelectionTheme(
                            draggableCircleColor: Colors.blue,
                            iconsColor: Colors.white,
                            iconsDisableColor: Colors.grey,
                            numberColor: Colors.white,
                            progressColor: Colors.deepOrangeAccent,
                            backgroundColor: Colors.deepPurpleAccent,
                            outOfConstraintsColor: Colors.deepOrange),
                        interval: 1,
                        minValue: 5,
                        maxValue: 30,
                        resetValue: XX,
                        initialValue: 10,
                        iconRemove: Icons.remove,
                        iconMin: Icons.delete,
                        iconMax: Icons.fullscreen_exit,
                        callBack: (val) async {
                          if (val < 50) {
                            await Future.delayed(const Duration(seconds: 2));
                            return val;
                          } else {
                            return 5;
                          }
                        },
                        direction: Axis.horizontal,
                        withSpring: true,
                        onChanged: (double value) {
                          print(">>value: $value");
                        },
                        dialogShowOnlyLongTouch: false,
                        enableOnOutOfConstraintsAnimation: true,
                        onOutOfConstraints: () =>
                            print("This value is too high or too low"),
                      ),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(18.0),
                  child: SizedBox(
                    height: 50,
                    width: 400,
                    child: NumberPicker(
                      theme: NumberSelectionTheme(
                          draggableCircleColor: Colors.blue,
                          iconsColor: Colors.white,
                          iconsDisableColor: Colors.grey,
                          numberColor: Colors.white,
                          progressColor: Colors.deepOrangeAccent,
                          backgroundColor: Colors.deepPurpleAccent,
                          outOfConstraintsColor: Colors.deepOrange),
                      interval: 0.3,
                      minValue: 5,
                      maxValue: 30,
                      initialValue: 0,
                      iconRemove: Icons.remove,
                      iconMin: Icons.delete,
                      iconMax: Icons.fullscreen_exit,
                      callOnSet: (val0) async {
                        NumberPicker ret = NumberPicker();
                        await Future.delayed(const Duration(seconds: 2)).then(
                          (value) => {
                            ret = NumberPicker(
                              initialValue: 3,
                              minValue: 1,
                              maxValue: 20,
                              interval: 1,
                            ),
                          },
                        );
                        return ret;
                      },
                      callBack: (val) async {
                        if (val < 50) {
                          await Future.delayed(const Duration(seconds: 2));
                          return val;
                        } else {
                          return 5;
                        }
                      },
                      direction: Axis.horizontal,
                      withSpring: true,
                      onChanged: (double value) {
                        print("value: $value");
                      },
                      dialogShowOnlyLongTouch: false,
                      enableOnOutOfConstraintsAnimation: true,
                      onOutOfConstraints: () =>
                          print("This value is too high or too low"),
                    ),
                  ),
                )
              ],
            ),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用spflutter_number_picker插件的一个代码示例。这个插件允许你创建一个数字选择器(Number Picker),用户可以通过点击增加或减少按钮来选择数字。

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

dependencies:
  flutter:
    sdk: flutter
  spflutter_number_picker: ^latest_version # 请替换为最新的版本号

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

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例代码,展示了如何使用SpflutterNumberPicker

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  int selectedNumber = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Number Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Number: $selectedNumber',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            NumberPicker(
              value: selectedNumber.toDouble(),
              minValue: 0,
              maxValue: 100,
              onChanged: (double value) {
                setState(() {
                  selectedNumber = value.toInt();
                });
              },
              decoration: BoxDecoration(
                border: Border.all(color: Colors.grey),
                borderRadius: BorderRadius.circular(5),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. NumberPicker组件被用来创建一个数字选择器。
  2. value属性表示当前选中的值。
  3. minValuemaxValue属性定义了选择器的最小值和最大值。
  4. onChanged回调函数在值改变时被调用,你可以在这里更新你的状态。
  5. decoration属性允许你自定义选择器的外观,例如添加边框和圆角。

当你运行这个应用时,你会看到一个简单的界面,上面显示当前选中的数字,并且可以通过点击增加或减少按钮来改变这个数字。

这个插件提供了许多其他配置选项,你可以根据需要查阅它的文档来进一步自定义和扩展其功能。

回到顶部