When I write this article, I have used some steps to describe our tutorials. In this situation, we can use a stepper to implement this.
Container( color:RED, child:Stepper( steps: [Step( title:Text("Start"), content:Text("Before starting, we should create a page."), ),Step( title:Text("Constructor"), content:Text("Let's look at its construtor."), ), ], ), ),
It will show as follows.
Constructor
Let's look at its constructor. The steps is a list, onStepTapped, onStepContinue, onStepCancel,controlsBuilder are functions. The currentStep is the int. The type is the enum. I will tell the detail of them one by one.
The title, subtitle, content are the widgets, the state is an enum.
So let's see an example.
Widget_steps() =>Container( margin:EdgeInsets.only(top:10), color:GREEN, child:Stepper( steps: [Step( title:Text("First"), subtitle:Text("This is our first article"), content:Text("In this article, I will tell you how to create a page."), ),Step( title:Text("Second"), subtitle:Text("Constructor"), content:Text("Let's look at its construtor."), state:StepState.editing, isActive:true),Step( title:Text("Third"), subtitle:Text("Constructor"), content:Text("Let's look at its construtor."), state:StepState.error), ], ), );
It will show you like this.
type
It has two types, the default value is the vertical. We use the horizontal in this example.
Widget_typeStep() =>Container( margin:EdgeInsets.only(top:10), constraints:BoxConstraints.expand(height:200), color:BLUE_LIGHT, child:Stepper( type:StepperType.horizontal, steps: [Step( title:Text("First"), content:Text("This is our first example."), ),Step( title:Text("Second"), content:Text("This is our second example."), ), ], ), );
It shows as follows.
onStepTapped¤tStep
In the fore example, when we click the second title, it doesn't show the content of the second. We need some handle.
Widget_tabStep() =>Container( margin:EdgeInsets.only(top:10), color:PURPLE, child:Stepper( steps: [Step( title:Text("First"), content:Text("This is our first example."), ),Step( title:Text("Second"), content:Text("This is our second example."), ),Step( title:Text("Third"), content:Text("This is our third example."), ),Step( title:Text("Forth"), content:Text("This is our forth example."), ), ], currentStep: _index, onStepTapped: (index) {setState(() { _index = index; }); }, onStepCancel: () {print("You are clicking the cancel button."); }, onStepContinue: () {print("You are clicking the continue button."); }, ), );
When you click the third title, it will show as follows.
When you click the continue or cancel, it will print as follows.
I/flutter ( 6888):You are clicking the continue button.I/flutter ( 6888):You are clicking the cancel button.
controlsBuilder
If you want to custom your own continue, cancel button, you can use the controlsBuilder to define them. The function is the same as the above. But this time, I will hide these two buttons.
Widget_builderStep() =>Container( margin:EdgeInsets.only(top:10), color:PURPLE, child:Stepper( steps: [Step( title:Text("First"), content:Text("This is our first example."), ),Step( title:Text("Second"), content:Text("This is our second example."), ),Step( title:Text("Third"), content:Text("This is our third example."), ),Step( title:Text("Forth"), content:Text("This is our forth example."), ), ], currentStep: _index, onStepTapped: (index) {setState(() { _index = index; }); }, controlsBuilder: (BuildContext context, {VoidCallback onStepContinue, VoidCallback onStepCancel}) =>Container(), ), );
It will hide these two buttons.
Conclusion
Today, we have learned the Stepper. It has many parameters, the most thing you should know that this widget is very special widget. You can learn it when you need time.