mirror of
https://github.com/Iconica-Development/flutter_form_wizard.git
synced 2025-05-19 19:03:47 +02:00
Added some functionality and expanded the example with it.
This commit is contained in:
parent
63431dfad6
commit
d14980e624
5 changed files with 52 additions and 15 deletions
|
@ -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(
|
||||||
|
|
|
@ -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,13 +38,14 @@ class _NamePageState extends State<NamePage> {
|
||||||
controller: widget.firstNameController,
|
controller: widget.firstNameController,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Padding(
|
if (widget.showLastName)
|
||||||
padding: const EdgeInsets.fromLTRB(40, 0, 40, 0),
|
Padding(
|
||||||
child: ShellFormInputPlainText(
|
padding: const EdgeInsets.fromLTRB(40, 0, 40, 0),
|
||||||
label: const Text("Last Name"),
|
child: ShellFormInputPlainText(
|
||||||
controller: widget.lastNameController,
|
label: const Text("Last Name"),
|
||||||
|
controller: widget.lastNameController,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue