From 63431dfad6e83f6639a33e26d5db8408a7fbdb6c Mon Sep 17 00:00:00 2001 From: Jacques Doeleman Date: Tue, 27 Sep 2022 15:30:20 +0200 Subject: [PATCH] Made the example working again --- example/lib/example_pages/age_page.dart | 59 +++++------ example/lib/example_pages/carousel_page.dart | 80 +++++++-------- example/lib/example_pages/name_page.dart | 97 ++++++++----------- example/lib/form_example.dart | 80 ++++++++++++++- lib/shell_form.dart | 2 + .../input_number_picker.dart | 4 +- 6 files changed, 185 insertions(+), 137 deletions(-) diff --git a/example/lib/example_pages/age_page.dart b/example/lib/example_pages/age_page.dart index 5bca754..ef7178d 100644 --- a/example/lib/example_pages/age_page.dart +++ b/example/lib/example_pages/age_page.dart @@ -1,35 +1,38 @@ import 'package:flutter/material.dart'; import 'package:flutter_form/flutter_form.dart'; -import 'package:flutter_form/next_shell/form.dart'; import 'package:form_example/template_page.dart'; -class AgePage { - ShellFormPage returnPage( - Size size, - double fontSize, - int pageNumber, - int amountOfPages, - ) { - return ShellFormPage( - child: TemplatePage( - size: size, - fontSize: fontSize, - title: "What is your age?", - pageNumber: pageNumber, - amountOfPages: amountOfPages, - shellFormWidgets: [ - ShellFormInputNumberPicker( - minValue: 12, - maxValue: 120, - controller: ShellFormInputNumberPickerController( - id: "age", - checkPageTitle: (dynamic amount) { - return "Age: $amount years"; - }, - ), - ), - ], - ), +class AgePage extends StatefulWidget { + const AgePage({ + required this.inputController, + super.key, + }); + + final ShellFormInputNumberPickerController inputController; + + @override + State createState() => _AgePageState(); +} + +class _AgePageState extends State { + @override + Widget build(BuildContext context) { + var size = MediaQuery.of(context).size; + var fontSize = size.height / 40; + + return TemplatePage( + size: size, + fontSize: fontSize, + title: "What is your age?", + pageNumber: 1, + amountOfPages: 3, + shellFormWidgets: [ + ShellFormInputNumberPicker( + minValue: 12, + maxValue: 120, + controller: widget.inputController, + ), + ], ); } } diff --git a/example/lib/example_pages/carousel_page.dart b/example/lib/example_pages/carousel_page.dart index 1122b1c..beb8274 100644 --- a/example/lib/example_pages/carousel_page.dart +++ b/example/lib/example_pages/carousel_page.dart @@ -1,26 +1,42 @@ import 'package:flutter/material.dart'; import 'package:flutter_form/flutter_form.dart'; -import 'package:flutter_form/next_shell/form.dart'; import 'package:form_example/template_page.dart'; -class CarouselPage { - final List> cars = [ - { - "title": "Mercedes", - "description": "Mercedes is a car", - }, - { - "title": "BMW", - "description": "BMW is a car", - }, - { - "title": "Mazda", - 'description': "Mazda is a car", - }, - ]; +class CarouselPage extends StatefulWidget { + const CarouselPage({ + required this.inputController, + required this.cars, + super.key, + }); + + final ShellFormInputCarouselController inputController; + final List> cars; + + @override + State createState() => _CarouselPageState(); +} + +class _CarouselPageState extends State { + @override + Widget build(BuildContext context) { + var size = MediaQuery.of(context).size; + var fontSize = size.height / 40; + + return TemplatePage( + size: size, + fontSize: fontSize, + title: "What's your favorite car?", + pageNumber: 2, + amountOfPages: 3, + shellFormWidgets: [ + ShellFormInputCarousel( + controller: widget.inputController, items: getCars()) + ], + ); + } List getCars() { - return cars.map((car) { + return widget.cars.map((car) { return Builder( builder: (BuildContext context) { return Column( @@ -61,34 +77,4 @@ class CarouselPage { ); }).toList(); } - - ShellFormPage returnPage( - Size size, - double fontSize, - int pageNumber, - int amountOfPages, - ) { - return ShellFormPage( - child: TemplatePage( - size: size, - fontSize: fontSize, - title: "What's your favorite car?", - pageNumber: pageNumber, - amountOfPages: amountOfPages, - shellFormWidgets: [ - ShellFormInputCarousel( - controller: ShellFormInputCarouselController( - id: 'carCarousel', - checkPageTitle: (dynamic index) { - return cars[index]["title"]; - }, - checkPageDescription: (dynamic index) { - return cars[index]["description"]; - }, - ), - items: getCars()) - ], - ), - ); - } } diff --git a/example/lib/example_pages/name_page.dart b/example/lib/example_pages/name_page.dart index 9db736a..a3a9eda 100644 --- a/example/lib/example_pages/name_page.dart +++ b/example/lib/example_pages/name_page.dart @@ -1,64 +1,49 @@ import 'package:flutter/material.dart'; import 'package:flutter_form/flutter_form.dart'; -import 'package:flutter_form/next_shell/form.dart'; import 'package:form_example/template_page.dart'; -class NamePage { - ShellFormPage returnPage( - Size size, - double fontSize, - int pageNumber, - int amountOfPages, - ) { - return ShellFormPage( - child: TemplatePage( - size: size, - fontSize: fontSize, - pageNumber: pageNumber, - amountOfPages: amountOfPages, - title: "Please enter your name", - shellFormWidgets: [ - // Padding( - // padding: const EdgeInsets.fromLTRB(40, 0, 40, 40), - // child: ShellFormInputPlainText( - // label: const Text("Name"), - // controller: ShellFormInputPlainTextController( - // mandatory: true, - // id: "name", - // checkPageTitle: (dynamic name) { - // return "Name: $name"; - // }, - // ), - // ), - // ), - Padding( - padding: const EdgeInsets.fromLTRB(40, 0, 40, 40), - child: ShellFormInputPlainText( - label: const Text("First Name"), - controller: ShellFormInputPlainTextController( - mandatory: true, - id: "firstName", - checkPageTitle: (dynamic firstName) { - return "First Name: $firstName"; - }, - ), - ), +class NamePage extends StatefulWidget { + const NamePage({ + required this.firstNameController, + required this.lastNameController, + super.key, + }); + + final ShellFormInputPlainTextController firstNameController; + final ShellFormInputPlainTextController lastNameController; + + @override + State createState() => _NamePageState(); +} + +class _NamePageState extends State { + @override + Widget build(BuildContext context) { + var size = MediaQuery.of(context).size; + var fontSize = size.height / 40; + + return TemplatePage( + size: size, + fontSize: fontSize, + pageNumber: 3, + amountOfPages: 3, + title: "Please enter your name", + shellFormWidgets: [ + Padding( + padding: const EdgeInsets.fromLTRB(40, 0, 40, 40), + child: ShellFormInputPlainText( + label: const Text("First Name"), + controller: widget.firstNameController, ), - // Padding( - // padding: const EdgeInsets.fromLTRB(40, 0, 40, 0), - // child: ShellFormInputPlainText( - // label: const Text("Last Name"), - // controller: ShellFormInputPlainTextController( - // mandatory: true, - // id: "lastName", - // checkPageTitle: (dynamic lastName) { - // return "Last Name: $lastName"; - // }, - // ), - // ), - // ), - ], - ), + ), + 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 4b89a7f..87d8b6b 100644 --- a/example/lib/form_example.dart +++ b/example/lib/form_example.dart @@ -19,6 +19,62 @@ class _FormExampleState extends ConsumerState { final String checkPageText = "All entered info: "; + final ageInputController = ShellFormInputNumberPickerController( + id: "age", + checkPageTitle: (dynamic amount) { + return "Age: $amount years"; + }, + ); + + late final ShellFormInputCarouselController carouselInputController; + + final List> cars = [ + { + "title": "Mercedes", + "description": "Mercedes is a car", + }, + { + "title": "BMW", + "description": "BMW is a car", + }, + { + "title": "Mazda", + 'description': "Mazda is a car", + }, + ]; + + ShellFormInputPlainTextController firstNameController = + ShellFormInputPlainTextController( + mandatory: true, + id: "firstName", + checkPageTitle: (dynamic firstName) { + return "First Name: $firstName"; + }, + ); + + ShellFormInputPlainTextController lastNameController = + ShellFormInputPlainTextController( + mandatory: true, + id: "lastName", + checkPageTitle: (dynamic lastName) { + return "Last Name: $lastName"; + }, + ); + + @override + void initState() { + super.initState(); + carouselInputController = ShellFormInputCarouselController( + id: 'carCarousel', + checkPageTitle: (dynamic index) { + return cars[index]["title"]; + }, + checkPageDescription: (dynamic index) { + return cars[index]["description"]; + }, + ); + } + @override Widget build(BuildContext context) { var size = MediaQuery.of(context).size; @@ -60,8 +116,8 @@ class _FormExampleState extends ConsumerState { color: Colors.white, ), ), - onPressed: () { - formController.autoNextStep(); + onPressed: () async { + await formController.autoNextStep(); }, child: Text(checkingPages ? "Save" : "Next Page"), ), @@ -99,9 +155,23 @@ class _FormExampleState extends ConsumerState { return Container(); }, pages: [ - AgePage().returnPage(size, fontSize, 1, 3), - // NamePage().returnPage(size, fontSize, 2, 3), - CarouselPage().returnPage(size, fontSize, 3, 3), + ShellFormPage( + child: AgePage( + inputController: ageInputController, + ), + ), + ShellFormPage( + child: CarouselPage( + inputController: carouselInputController, + cars: cars, + ), + ), + ShellFormPage( + child: NamePage( + firstNameController: firstNameController, + lastNameController: lastNameController, + ), + ), ], checkPage: CheckPageExample() .showCheckpage(context, size, fontSize, checkPageText), diff --git a/lib/shell_form.dart b/lib/shell_form.dart index 8693eb6..af38d8e 100644 --- a/lib/shell_form.dart +++ b/lib/shell_form.dart @@ -430,6 +430,8 @@ class ShellFormController extends ChangeNotifier { _options.onFinished(getAllResults()); } else { if (validateAndSaveCurrentStep()) { + FocusManager.instance.primaryFocus?.unfocus(); + _options.onNext( _currentStep, _formPageControllers[_currentStep].getAllValues()); diff --git a/lib/src/widgets/input/input_types/input_number_picker/input_number_picker.dart b/lib/src/widgets/input/input_types/input_number_picker/input_number_picker.dart index 2c83380..f548307 100644 --- a/lib/src/widgets/input/input_types/input_number_picker/input_number_picker.dart +++ b/lib/src/widgets/input/input_types/input_number_picker/input_number_picker.dart @@ -28,7 +28,9 @@ class ShellFormInputNumberPicker extends ShellFormInputWidget { return NumberPickerFormField( minValue: minValue, maxValue: maxValue, - onSaved: (value) => controller.onSaved(value), + onSaved: (value) { + controller.onSaved(value); + }, validator: (value) => controller.onValidate(value, _), initialValue: controller.value ?? minValue, );