Flutter步进器管理插件clever_stepper的使用

CleverStepper

CleverStepper 是对 Material 库中的 Stepper 的增强版本,由 CleverFlow 维护。

它与 Material 中的 Stepper 有何不同?

Material 的 Stepper 中的 controlsBuilder() 没有传递当前步骤的上下文。因此,无法根据步骤或其状态自定义控件。CleverStepper 解决了这个问题。

使用方法

除了 Material.dart 类中的 Stepper 小部件的常规功能外,该插件在 controlsBuilder() 中提供了三个额外的参数。以下是它们的详细说明:

注意:

controlsBuilder() 会为每个步骤调用一次。

属性 类型 描述
stepIndex int 步骤的索引
stepState CleverStepState 步骤的状态
isStepActive bool 是否激活该步骤
trailing Widget 在步骤末尾添加一个额外的小部件

示例代码

以下是一个完整的示例代码,展示如何使用 CleverStepper

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('CleverStepper 示例'),
        ),
        body: StepperExample(),
      ),
    );
  }
}

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

class _StepperExampleState extends State<StepperExample> {
  int currentStep = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: CleverStepper(
        currentStep: currentStep,
        onStepContinue: () {
          if (currentStep < 2) {
            setState(() {
              currentStep += 1;
            });
          }
        },
        onStepCancel: () {
          if (currentStep > 0) {
            setState(() {
              currentStep -= 1;
            });
          }
        },
        controlsBuilder: (BuildContext context, ControlsDetails details) {
          return Row(
            children: [
              if (!details.isStepActive)
                ElevatedButton(
                  onPressed: details.onStepCancel,
                  child: Text('上一步'),
                ),
              if (details.isStepActive)
                ElevatedButton(
                  onPressed: details.onStepContinue,
                  child: Text('下一步'),
                ),
            ],
          );
        },
        steps: [
          Step(
            title: Text('步骤 1'),
            content: Text('这是步骤 1 的内容'),
          ),
          Step(
            title: Text('步骤 2'),
            content: Text('这是步骤 2 的内容'),
          ),
          Step(
            title: Text('步骤 3'),
            content: Text('这是步骤 3 的内容'),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter步进器管理插件clever_stepper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter步进器管理插件clever_stepper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


clever_stepper 是一个用于 Flutter 的步进器管理插件,它可以帮助你轻松地创建和管理多步骤表单或流程。以下是如何使用 clever_stepper 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  clever_stepper: ^1.0.0  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 clever_stepper 包:

import 'package:clever_stepper/clever_stepper.dart';

3. 创建步进器

你可以使用 CleverStepper 组件来创建一个步进器。以下是一个简单的示例:

class MyStepperApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Clever Stepper Example'),
        ),
        body: CleverStepper(
          steps: [
            CleverStep(
              title: Text('Step 1'),
              content: Text('This is the first step.'),
            ),
            CleverStep(
              title: Text('Step 2'),
              content: Text('This is the second step.'),
            ),
            CleverStep(
              title: Text('Step 3'),
              content: Text('This is the third step.'),
            ),
          ],
          onStepContinue: () {
            // 处理“继续”按钮点击事件
            print('Continue button pressed');
          },
          onStepCancel: () {
            // 处理“取消”按钮点击事件
            print('Cancel button pressed');
          },
        ),
      ),
    );
  }
}

4. 运行应用

现在你可以运行你的 Flutter 应用,并看到 CleverStepper 的效果。

5. 自定义步进器

CleverStepper 提供了多种自定义选项,例如:

  • currentStep: 设置当前步骤。
  • onStepTapped: 当用户点击某个步骤时触发。
  • controlsBuilder: 自定义“继续”和“取消”按钮。

以下是一个自定义 controlsBuilder 的示例:

CleverStepper(
  steps: [
    CleverStep(
      title: Text('Step 1'),
      content: Text('This is the first step.'),
    ),
    CleverStep(
      title: Text('Step 2'),
      content: Text('This is the second step.'),
    ),
    CleverStep(
      title: Text('Step 3'),
      content: Text('This is the third step.'),
    ),
  ],
  controlsBuilder: (BuildContext context, ControlsDetails details) {
    return Row(
      children: <Widget>[
        TextButton(
          onPressed: details.onStepCancel,
          child: Text('Back'),
        ),
        SizedBox(width: 16),
        ElevatedButton(
          onPressed: details.onStepContinue,
          child: Text('Next'),
        ),
      ],
    );
  },
)

6. 处理步骤切换

你可以通过 onStepContinueonStepCancel 来处理步骤的切换逻辑。例如,你可以在 onStepContinue 中验证当前步骤的数据,并根据验证结果决定是否继续到下一步。

onStepContinue: () {
  if (_validateCurrentStep()) {
    // 验证通过,继续到下一步
    setState(() {
      _currentStep += 1;
    });
  } else {
    // 验证失败,显示错误信息
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Please fill in all fields')),
    );
  }
}

7. 完整示例

以下是一个完整的示例,展示了如何使用 clever_stepper 创建一个多步骤表单:

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

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

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

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

class _StepperExampleState extends State<StepperExample> {
  int _currentStep = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Clever Stepper Example'),
      ),
      body: CleverStepper(
        currentStep: _currentStep,
        steps: [
          CleverStep(
            title: Text('Step 1'),
            content: Text('This is the first step.'),
          ),
          CleverStep(
            title: Text('Step 2'),
            content: Text('This is the second step.'),
          ),
          CleverStep(
            title: Text('Step 3'),
            content: Text('This is the third step.'),
          ),
        ],
        onStepContinue: () {
          if (_currentStep < 2) {
            setState(() {
              _currentStep += 1;
            });
          } else {
            // 完成所有步骤
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('All steps completed!')),
            );
          }
        },
        onStepCancel: () {
          if (_currentStep > 0) {
            setState(() {
              _currentStep -= 1;
            });
          }
        },
      ),
    );
  }
}
回到顶部