5.3 Skip、Next、Start 按钮联动

5.3 Skip、Next、Start 按钮联动

image-20220713135816995

实现步骤:


第 1 步:控制器

lib/pages/system/welcome/controller.dart

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 List<WelcomeModel>? items; // 滚动集合
int currentIndex = 0; // 当前项
bool isShowStart = false; // 是否显示 Start
CarouselController carouselController = CarouselController(); // slider 控制器

// 当前位置发生变化
void onPageChanged(int index) {
currentIndex = index;
isShowStart = currentIndex == 2;
update(['slider', 'bar']);
}

// 去首页
void onToMain() {
Get.offAllNamed(RouteNames.systemMain);
}

// 下一个
void onNext() {
carouselController.nextPage();
}

第 2 步:视图

lib/pages/system/welcome/view.dart

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// slider
Widget _buildSlider() {
return GetBuilder<WelcomeController>(
id: "slider",
init: controller,
builder: (controller) => controller.items == null
? const SizedBox()
: WelcomeSliderWidget(
controller.items!,
carouselController: controller.carouselController,
onPageChanged: controller.onPageChanged,
),
);
}

// bar
// skip + indicator + next
Widget _buildBar() {
return GetBuilder<WelcomeController>(
id: "bar",
init: controller,
builder: (controller) {
return controller.isShowStart
?
// 开始
ButtonWidget.primary(
LocaleKeys.welcomeStart.tr,
onTap: controller.onToMain,
).tight(
width: double.infinity,
height: 50.h,
)
: <Widget>[
// 跳过
ButtonWidget.text(
LocaleKeys.welcomeSkip.tr,
onTap: controller.onToMain,
),
// 指示标
SliderIndicatorWidget(
length: 3,
currentIndex: controller.currentIndex,
),
// 下一页
ButtonWidget.text(
LocaleKeys.welcomeNext.tr,
onTap: controller.onNext,
),
].toRow(
mainAxisAlignment: MainAxisAlignment.spaceAround,
);
},
);
}

// 内容页
Widget _buildView() {
return <Widget>[
// slider切换
buildSlider(),
// 控制栏
buildBar(),
]
.toColumn(
mainAxisAlignment: MainAxisAlignment.spaceAround,
)
.paddingAll(AppSpace.page);
}

最后:运行

img img

提交代码到 git