Flutter动态步骤管理插件dynamic_stepper的使用

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

Flutter动态步骤管理插件dynamic_stepper的使用

特性

开始使用

在需要的地方添加以下导入:

import 'package:dynamic_stepper/dynamic_stepper.dart';

使用方法

将原来的 Stepper 替换为 DynamicStepper

final steps = [
  DynamicStep(
    title: const Text('步骤 1 标题'),
    content: Container(
      alignment: Alignment.centerLeft,
      child: const Text('步骤 1 的内容'),
    ),
  ),
  const DynamicStep(
    title: Text('步骤 2 标题'),
    content: Text('步骤 2 的内容'),
  ),
];

// ...
DynamicStepper(
  currentStep: _index,
  onStepCancel: () {
    // 处理取消
  },
  onStepContinue: () {
    // 处理继续
  },
  onStepTapped: (int index) {
    // 处理点击
  },
  steps: steps,
)

注意:属性名称已替换以避免与原始 Stepper 冲突,因此添加了 Dynamic 前缀。

DynamicStepper

DynamicStep

DynamicStepType …

完整示例代码

以下是一个完整的示例代码,展示了如何动态添加和删除步骤:

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

void main() => runApp(const MyApp());

const String _title = 'Flutter Code Sample';

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: _title,
      home: MyStatefulWidget(),
    );
  }
}

class MyStatefulWidget extends StatefulWidget {
  const MyStatefulWidget({super.key});

  [@override](/user/override)
  State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _index = 0;

  final steps = [
    DynamicStep(
      title: const Text('步骤 1 标题'),
      content: Container(
        alignment: Alignment.centerLeft,
        child: const Text('步骤 1 的内容'),
      ),
    ),
    const DynamicStep(
      title: Text('步骤 2 标题'),
      content: Text('步骤 2 的内容'),
    ),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text(_title)),
      body: Center(
        child: DynamicStepper(
          currentStep: _index,
          onStepCancel: () {
            if (_index > 0) {
              setState(() {
                _index -= 1;
              });
            }
          },
          onStepContinue: () {
            if (_index < steps.length - 1) {
              setState(() {
                _index += 1;
              });
            }
          },
          onStepTapped: (int index) {
            setState(() {
              _index = index;
            });
          },
          steps: steps,
        ),
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
      floatingActionButton: Row(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: [
          FloatingActionButton(
            onPressed: () {
              if (steps.length == 1) return;
              steps.removeLast();
              if (_index == steps.length) _index--;
              setState(() {});
            },
            child: const Icon(Icons.remove),
          ),
          FloatingActionButton(
            onPressed: () {
              steps.add(DynamicStep(
                title: Text('步骤 ${steps.length + 1} 标题'),
                content: Text('步骤 ${steps.length + 1} 的内容'),
              ));
              setState(() {});
            },
            child: const Icon(Icons.add),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用dynamic_stepper插件来管理动态步骤的一个代码示例。dynamic_stepper是一个用于创建动态步骤导航的Flutter插件,非常适合用于表单向导、用户注册流程等场景。

首先,确保你的Flutter项目中已经添加了dynamic_stepper依赖。在pubspec.yaml文件中添加以下依赖:

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

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

接下来,我们创建一个简单的示例,展示如何使用dynamic_stepper来管理动态步骤。

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  // 步骤数据
  List<Step> steps = [
    Step(
      title: Text('Step 1: Personal Information'),
      content: Column(
        children: <Widget>[
          TextField(
            decoration: InputDecoration(labelText: 'Name'),
          ),
          TextField(
            decoration: InputDecoration(labelText: 'Email'),
          ),
        ],
      ),
    ),
    Step(
      title: Text('Step 2: Address'),
      content: Column(
        children: <Widget>[
          TextField(
            decoration: InputDecoration(labelText: 'Street Address'),
          ),
          TextField(
            decoration: InputDecoration(labelText: 'City'),
          ),
          TextField(
            decoration: InputDecoration(labelText: 'Zip Code'),
          ),
        ],
      ),
    ),
    Step(
      title: Text('Step 3: Review'),
      content: Container(
        child: Center(
          child: Text('Review all information here'),
        ),
      ),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dynamic Stepper Demo'),
      ),
      body: DynamicStepper(
        steps: steps,
        currentStep: 0,  // 初始步骤索引
        onStepTapped: (int index) {
          // 点击步骤时的回调
          setState(() {
            // 更新当前步骤索引
          });
        },
        onStepContinue: (int index) {
          // 继续到下一步时的回调
          if (index < steps.length - 1) {
            setState(() {
              // 更新当前步骤索引为下一步
            });
          }
        },
        onStepCancel: (int index) {
          // 取消当前步骤时的回调
          if (index > 0) {
            setState(() {
              // 更新当前步骤索引为上一步
            });
          }
        },
        onStepDone: () {
          // 完成所有步骤时的回调
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text('All steps completed!')),
          );
        },
      ),
    );
  }
}

在上面的代码中,我们做了以下几件事情:

  1. 定义了三个步骤(Step),每个步骤包含不同的内容(TextField)。
  2. 使用DynamicStepper组件来显示这些步骤。
  3. 实现了步骤导航的基本回调,包括点击步骤、继续到下一步、取消当前步骤以及完成所有步骤。

请注意,DynamicSteppercurrentStep属性用于跟踪当前显示的步骤。由于currentStep的变化会影响UI,因此我们在更新currentStep时使用了setState来通知Flutter框架状态已经改变,从而触发UI的重新构建。

此示例仅展示了dynamic_stepper的基本用法。根据实际需求,你可以进一步自定义步骤内容、样式以及回调逻辑。

回到顶部