5.3 Skip、Next、Start 按钮联动
实现步骤:
第 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; CarouselController carouselController = CarouselController();
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
| 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, ), ); }
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>[ buildSlider(), buildBar(), ] .toColumn( mainAxisAlignment: MainAxisAlignment.spaceAround, ) .paddingAll(AppSpace.page); }
|
最后:运行
提交代码到 git