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

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

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

简介

NumberPicker 是一个自定义的小部件,旨在通过滚动选择器来选择整数或小数值。它具有直观的用户界面,并且易于集成到您的Flutter项目中。

ezgif com-gif-maker

安装

pubspec.yaml文件中添加依赖:

dependencies:
  numberpicker: ^2.1.0

然后运行以下命令以安装包:

flutter pub get

示例代码

下面是一个完整的示例demo,展示了如何在Flutter应用程序中使用numberpicker插件。

main.dart

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

void main() {
  runApp(new ExampleApp());
}

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

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        appBar: AppBar(
          bottom: TabBar(
            tabs: [
              Tab(text: 'Integer'),
              Tab(text: 'Decimal'),
            ],
          ),
          title: Text('NumberPicker example'),
        ),
        body: TabBarView(
          children: [
            _IntegerExample(),
            _DecimalExample(),
          ],
        ),
      ),
    );
  }
}

class _IntegerExample extends StatefulWidget {
  @override
  __IntegerExampleState createState() => __IntegerExampleState();
}

class __IntegerExampleState extends State<_IntegerExample> {
  int _currentIntValue = 10;
  int _currentHorizontalIntValue = 10;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        SizedBox(height: 16),
        Text('Default', style: Theme.of(context).textTheme.headline6),
        NumberPicker(
          value: _currentIntValue,
          minValue: 0,
          maxValue: 100,
          step: 10,
          haptics: true,
          onChanged: (value) => setState(() => _currentIntValue = value),
        ),
        SizedBox(height: 32),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.remove),
              onPressed: () => setState(() {
                final newValue = _currentIntValue - 10;
                _currentIntValue = newValue.clamp(0, 100);
              }),
            ),
            Text('Current int value: $_currentIntValue'),
            IconButton(
              icon: Icon(Icons.add),
              onPressed: () => setState(() {
                final newValue = _currentIntValue + 20;
                _currentIntValue = newValue.clamp(0, 100);
              }),
            ),
          ],
        ),
        Divider(color: Colors.grey, height: 32),
        SizedBox(height: 16),
        Text('Horizontal', style: Theme.of(context).textTheme.headline6),
        NumberPicker(
          value: _currentHorizontalIntValue,
          minValue: 0,
          maxValue: 100,
          step: 10,
          itemHeight: 100,
          axis: Axis.horizontal,
          onChanged: (value) =>
              setState(() => _currentHorizontalIntValue = value),
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(16),
            border: Border.all(color: Colors.black26),
          ),
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.remove),
              onPressed: () => setState(() {
                final newValue = _currentHorizontalIntValue - 10;
                _currentHorizontalIntValue = newValue.clamp(0, 100);
              }),
            ),
            Text('Current horizontal int value: $_currentHorizontalIntValue'),
            IconButton(
              icon: Icon(Icons.add),
              onPressed: () => setState(() {
                final newValue = _currentHorizontalIntValue + 20;
                _currentHorizontalIntValue = newValue.clamp(0, 100);
              }),
            ),
          ],
        ),
      ],
    );
  }
}

class _DecimalExample extends StatefulWidget {
  @override
  __DecimalExampleState createState() => __DecimalExampleState();
}

class __DecimalExampleState extends State<_DecimalExample> {
  double _currentDoubleValue = 3.0;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        SizedBox(height: 16),
        Text('Decimal', style: Theme.of(context).textTheme.headline6),
        DecimalNumberPicker(
          value: _currentDoubleValue,
          minValue: 0,
          maxValue: 10,
          decimalPlaces: 2,
          onChanged: (value) => setState(() => _currentDoubleValue = value),
        ),
        SizedBox(height: 32),
      ],
    );
  }
}

运行效果

该示例包含两个选项卡:一个是用于整数的选择器,另一个是用于小数的选择器。每个选项卡都展示了默认和水平方向的数字选择器,并提供了增加和减少按钮来手动调整值。

希望这个详细的示例能帮助您更好地理解和使用numberpicker插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter中使用number_picker插件的示例代码。number_picker是一个流行的Flutter插件,用于创建数字选择器。在使用之前,请确保您已经在pubspec.yaml文件中添加了该插件的依赖项:

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

添加依赖项后,运行flutter pub get来安装插件。

下面是一个完整的示例代码,展示如何在Flutter应用中使用number_picker插件:

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

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

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

class NumberPickerDemo extends StatefulWidget {
  @override
  _NumberPickerDemoState createState() => _NumberPickerDemoState();
}

class _NumberPickerDemoState extends State<NumberPickerDemo> {
  int selectedNumber = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Number Picker Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text(
              'Selected Number: $selectedNumber',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            NumberPicker(
              value: selectedNumber,
              minValue: 0,
              maxValue: 100,
              step: 1,
              decimalPlaces: 0,
              onValueChanged: (newValue) {
                setState(() {
                  selectedNumber = newValue;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖项添加: 在pubspec.yaml文件中添加number_picker依赖项。

  2. 主应用结构

    • MyApp是一个无状态小部件,定义了应用的主题和主页。
    • NumberPickerDemo是一个有状态小部件,用于管理数字选择器的状态。
  3. 状态管理

    • selectedNumber变量用于存储当前选择的数字。
    • 使用setState方法在数字选择器值变化时更新UI。
  4. 数字选择器

    • NumberPicker小部件接受多个参数:
      • value:当前选择的数字。
      • minValuemaxValue:可选数字的最小值和最大值。
      • step:每次变化的步长。
      • decimalPlaces:小数点位数(在此示例中为0,表示整数)。
      • onValueChanged:当选择的值变化时调用的回调函数。

这个示例展示了如何使用number_picker插件在Flutter应用中创建一个简单的数字选择器。您可以根据需要调整最小值、最大值、步长和其他参数。

回到顶部