Flutter进度条步骤指示器插件progress_bar_steppers的使用
Flutter进度条步骤指示器插件progress_bar_steppers的使用
特性
- 水平步骤指示器
- 垂直步骤指示器
- 自定义步骤样式,指示器颜色,标签最大行数等…
开始使用
安装包
在pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
progress_bar_steppers: ^0.0.2
导入包
在需要使用的Dart文件中导入:
import 'package:progress_bar_steppers/steppers.dart';
截图
水平步骤指示器(正常)
水平步骤指示器(错误)
垂直步骤指示器(正常)
使用方法
水平步骤指示器
var currentStep = 1;
var totalSteps = 0;
final stepsData = [
StepperData(
label: 'Step 1',
),
StepperData(
label: 'Step 2',
),
StepperData(
label: 'Step 3',
),
StepperData(
label: 'Step 4',
),
];
[@override](/user/override)
void initState() {
totalSteps = stepsData.length;
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Steppers(
direction: StepperDirection.horizontal,
labels: stepsData,
currentStep: currentStep,
stepBarStyle: StepperStyle(
maxLineLabel: 2,
),
);
}
垂直步骤指示器
var currentStep = 1;
var totalSteps = 0;
late List<StepperData> stepsData;
[@override](/user/override)
void initState() {
super.initState();
stepsData = [
StepperData(
label: 'Step 1',
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec efficitur risus est, sed consequat libero luctus vitae. Duis ultrices magna quis risus porttitor luctus. Nulla vel tempus nisl, ultricies congue lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
child: ElevatedButton(
child: const Text('Button 1'),
onPressed: () {},
),
),
StepperData(
label: 'Step 2',
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec efficitur risus est, sed consequat libero luctus vitae. Duis ultrices magna quis risus porttitor luctus. Nulla vel tempus nisl, ultricies congue lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
),
StepperData(
label: 'Step 3',
),
StepperData(
label: 'Step 4',
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec efficitur risus est, sed consequat libero luctus vitae. Duis ultrices magna quis risus porttitor luctus. Nulla vel tempus nisl, ultricies congue lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
),
];
totalSteps = stepsData.length;
}
[@override](/user/override)
Widget build(BuildContext context) {
return Steppers(
direction: StepperDirection.vertical,
labels: stepsData,
currentStep: currentStep,
stepBarStyle: StepperStyle(
maxLineLabel: 2,
),
);
}
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:progress_bar_steppers/steppers.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Steppers Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: StepBarPage(),
);
}
}
class StepBarPage extends StatefulWidget {
StepBarPage({Key? key}) : super(key: key);
[@override](/user/override)
State<StepBarPage> createState() => _StepBarPageState();
}
class _StepBarPageState extends State<StepBarPage> {
var currentStep = 1;
var totalSteps = 0;
late List<StepperData> stepsData;
[@override](/user/override)
void initState() {
super.initState();
stepsData = [
StepperData(
label: 'Step 1',
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec efficitur risus est, sed consequat libero luctus vitae. Duis ultrices magna quis risus porttitor luctus. Nulla vel tempus nisl, ultricies congue lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
child: ElevatedButton(
child: const Text('Button 1'),
onPressed: () {},
),
),
StepperData(
label: 'Step 2',
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec efficitur risus est, sed consequat libero luctus vitae. Duis ultrices magna quis risus porttitor luctus. Nulla vel tempus nisl, ultricies congue lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
),
StepperData(
label: 'Step 3',
),
StepperData(
label: 'Step 4',
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec efficitur risus est, sed consequat libero luctus vitae. Duis ultrices magna quis risus porttitor luctus. Nulla vel tempus nisl, ultricies congue lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
),
];
totalSteps = stepsData.length;
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: [
const SizedBox(
height: 16,
),
Text(
'Horizontal Steppers',
style: StepperStyles.t16SB.copyWith(color: StepperColors.grey500s),
),
const SizedBox(
height: 16,
),
Steppers(
direction: StepperDirection.horizontal,
labels: stepsData,
currentStep: currentStep,
stepBarStyle: StepperStyle(
maxLineLabel: 2,
),
),
const SizedBox(
height: 40,
),
Text(
'Vertical Steppers',
style: StepperStyles.t16SB.copyWith(color: StepperColors.grey500s),
),
const SizedBox(
height: 16,
),
Steppers(
direction: StepperDirection.vertical,
labels: stepsData,
currentStep: currentStep,
stepBarStyle: StepperStyle(
maxLineLabel: 2,
),
),
const SizedBox(
height: 16,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
ElevatedButton(
child: const Text('Next'),
onPressed: () {
setState(() {
_nextStep();
});
},
),
ElevatedButton(
child: const Text('Fix Error'),
onPressed: () {
setState(() {
_fixError();
});
},
),
],
),
],
),
),
);
}
_nextStep() {
_doWork();
if (currentStep > totalSteps) return;
// 检查当前步骤是否有错误,然后移动到下一步
if (stepsData[currentStep - 1].state != StepperState.error) {
currentStep++;
}
}
_doWork() {
if (currentStep == 3) {
// 在第3步时模拟一个错误
stepsData[2].state = StepperState.error;
}
}
_fixError() {
// 修复第3步的错误以继续到第4步
if (stepsData[2].state == StepperState.error) {
stepsData[2].state = StepperState.normal;
currentStep++;
}
}
}
更多关于Flutter进度条步骤指示器插件progress_bar_steppers的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复