diff --git a/example/lib/example_pages/carousel_page.dart b/example/lib/example_pages/carousel_page.dart index beb8274..8d7d8e7 100644 --- a/example/lib/example_pages/carousel_page.dart +++ b/example/lib/example_pages/carousel_page.dart @@ -26,7 +26,7 @@ class _CarouselPageState extends State { size: size, fontSize: fontSize, title: "What's your favorite car?", - pageNumber: 2, + pageNumber: 3, amountOfPages: 3, shellFormWidgets: [ ShellFormInputCarousel( diff --git a/example/lib/example_pages/name_page.dart b/example/lib/example_pages/name_page.dart index a3a9eda..b617a2b 100644 --- a/example/lib/example_pages/name_page.dart +++ b/example/lib/example_pages/name_page.dart @@ -6,11 +6,13 @@ class NamePage extends StatefulWidget { const NamePage({ required this.firstNameController, required this.lastNameController, + required this.showLastName, super.key, }); final ShellFormInputPlainTextController firstNameController; final ShellFormInputPlainTextController lastNameController; + final bool showLastName; @override State createState() => _NamePageState(); @@ -25,7 +27,7 @@ class _NamePageState extends State { return TemplatePage( size: size, fontSize: fontSize, - pageNumber: 3, + pageNumber: 2, amountOfPages: 3, title: "Please enter your name", shellFormWidgets: [ @@ -36,13 +38,14 @@ class _NamePageState extends State { controller: widget.firstNameController, ), ), - Padding( - padding: const EdgeInsets.fromLTRB(40, 0, 40, 0), - child: ShellFormInputPlainText( - label: const Text("Last Name"), - controller: widget.lastNameController, + if (widget.showLastName) + Padding( + padding: const EdgeInsets.fromLTRB(40, 0, 40, 0), + child: ShellFormInputPlainText( + label: const Text("Last Name"), + controller: widget.lastNameController, + ), ), - ), ], ); } diff --git a/example/lib/form_example.dart b/example/lib/form_example.dart index 87d8b6b..c6e6844 100644 --- a/example/lib/form_example.dart +++ b/example/lib/form_example.dart @@ -75,6 +75,8 @@ class _FormExampleState extends ConsumerState { ); } + bool showLastName = true; + @override Widget build(BuildContext context) { var size = MediaQuery.of(context).size; @@ -93,6 +95,21 @@ class _FormExampleState extends ConsumerState { }, onNext: (int pageNumber, Map results) { print("Results page $pageNumber: $results"); + + if (pageNumber == 0) { + if (results['age'] >= 18) { + if (showLastName == false) { + showLastName = true; + formController.disableCheckingPages(); + } + } else { + if (showLastName == true) { + showLastName = false; + formController.disableCheckingPages(); + } + } + setState(() {}); + } }, nextButton: (int pageNumber, bool checkingPages) { return Align( @@ -160,16 +177,17 @@ class _FormExampleState extends ConsumerState { inputController: ageInputController, ), ), - ShellFormPage( - child: CarouselPage( - inputController: carouselInputController, - cars: cars, - ), - ), ShellFormPage( child: NamePage( firstNameController: firstNameController, lastNameController: lastNameController, + showLastName: showLastName, + ), + ), + ShellFormPage( + child: CarouselPage( + inputController: carouselInputController, + cars: cars, ), ), ], diff --git a/lib/shell_form.dart b/lib/shell_form.dart index af38d8e..a4474e4 100644 --- a/lib/shell_form.dart +++ b/lib/shell_form.dart @@ -425,6 +425,18 @@ class ShellFormController extends ChangeNotifier { _formPageControllers = controllers; } + disableCheckingPages() { + _checkingPages = false; + + clearController(); + } + + clearController() { + for (var controller in _formPageControllers) { + controller.clearControllers(); + } + } + Future autoNextStep() async { if (_currentStep >= _options.pages.length && _options.checkPage != null) { _options.onFinished(getAllResults()); diff --git a/lib/src/utils/form_page_controller.dart b/lib/src/utils/form_page_controller.dart index b04e57a..2ee77cb 100644 --- a/lib/src/utils/form_page_controller.dart +++ b/lib/src/utils/form_page_controller.dart @@ -1,12 +1,16 @@ import 'package:flutter_form/flutter_form.dart'; class ShellFormPageController { - final List _controllers = []; + List _controllers = []; void register(ShellFormInputController inputController) { _controllers.add(inputController); } + clearControllers() { + _controllers = []; + } + bool _isRegisteredById(String id) { return _controllers.any((element) => (element.id == id)); }