Added some functionality and expanded the example with it.

This commit is contained in:
Jacques Doeleman 2022-09-28 09:31:08 +02:00
parent 63431dfad6
commit d14980e624
5 changed files with 52 additions and 15 deletions

View file

@ -26,7 +26,7 @@ class _CarouselPageState extends State<CarouselPage> {
size: size, size: size,
fontSize: fontSize, fontSize: fontSize,
title: "What's your favorite car?", title: "What's your favorite car?",
pageNumber: 2, pageNumber: 3,
amountOfPages: 3, amountOfPages: 3,
shellFormWidgets: [ shellFormWidgets: [
ShellFormInputCarousel( ShellFormInputCarousel(

View file

@ -6,11 +6,13 @@ class NamePage extends StatefulWidget {
const NamePage({ const NamePage({
required this.firstNameController, required this.firstNameController,
required this.lastNameController, required this.lastNameController,
required this.showLastName,
super.key, super.key,
}); });
final ShellFormInputPlainTextController firstNameController; final ShellFormInputPlainTextController firstNameController;
final ShellFormInputPlainTextController lastNameController; final ShellFormInputPlainTextController lastNameController;
final bool showLastName;
@override @override
State<NamePage> createState() => _NamePageState(); State<NamePage> createState() => _NamePageState();
@ -25,7 +27,7 @@ class _NamePageState extends State<NamePage> {
return TemplatePage( return TemplatePage(
size: size, size: size,
fontSize: fontSize, fontSize: fontSize,
pageNumber: 3, pageNumber: 2,
amountOfPages: 3, amountOfPages: 3,
title: "Please enter your name", title: "Please enter your name",
shellFormWidgets: [ shellFormWidgets: [
@ -36,6 +38,7 @@ class _NamePageState extends State<NamePage> {
controller: widget.firstNameController, controller: widget.firstNameController,
), ),
), ),
if (widget.showLastName)
Padding( Padding(
padding: const EdgeInsets.fromLTRB(40, 0, 40, 0), padding: const EdgeInsets.fromLTRB(40, 0, 40, 0),
child: ShellFormInputPlainText( child: ShellFormInputPlainText(

View file

@ -75,6 +75,8 @@ class _FormExampleState extends ConsumerState<FormExample> {
); );
} }
bool showLastName = true;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var size = MediaQuery.of(context).size; var size = MediaQuery.of(context).size;
@ -93,6 +95,21 @@ class _FormExampleState extends ConsumerState<FormExample> {
}, },
onNext: (int pageNumber, Map<String, dynamic> results) { onNext: (int pageNumber, Map<String, dynamic> results) {
print("Results page $pageNumber: $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) { nextButton: (int pageNumber, bool checkingPages) {
return Align( return Align(
@ -160,16 +177,17 @@ class _FormExampleState extends ConsumerState<FormExample> {
inputController: ageInputController, inputController: ageInputController,
), ),
), ),
ShellFormPage(
child: CarouselPage(
inputController: carouselInputController,
cars: cars,
),
),
ShellFormPage( ShellFormPage(
child: NamePage( child: NamePage(
firstNameController: firstNameController, firstNameController: firstNameController,
lastNameController: lastNameController, lastNameController: lastNameController,
showLastName: showLastName,
),
),
ShellFormPage(
child: CarouselPage(
inputController: carouselInputController,
cars: cars,
), ),
), ),
], ],

View file

@ -425,6 +425,18 @@ class ShellFormController extends ChangeNotifier {
_formPageControllers = controllers; _formPageControllers = controllers;
} }
disableCheckingPages() {
_checkingPages = false;
clearController();
}
clearController() {
for (var controller in _formPageControllers) {
controller.clearControllers();
}
}
Future<void> autoNextStep() async { Future<void> autoNextStep() async {
if (_currentStep >= _options.pages.length && _options.checkPage != null) { if (_currentStep >= _options.pages.length && _options.checkPage != null) {
_options.onFinished(getAllResults()); _options.onFinished(getAllResults());

View file

@ -1,12 +1,16 @@
import 'package:flutter_form/flutter_form.dart'; import 'package:flutter_form/flutter_form.dart';
class ShellFormPageController { class ShellFormPageController {
final List<ShellFormInputController> _controllers = []; List<ShellFormInputController> _controllers = [];
void register(ShellFormInputController inputController) { void register(ShellFormInputController inputController) {
_controllers.add(inputController); _controllers.add(inputController);
} }
clearControllers() {
_controllers = [];
}
bool _isRegisteredById(String id) { bool _isRegisteredById(String id) {
return _controllers.any((element) => (element.id == id)); return _controllers.any((element) => (element.id == id));
} }