mirror of
https://github.com/Iconica-Development/flutter_form_wizard.git
synced 2025-05-19 19:03:47 +02:00
229 lines
7.6 KiB
Dart
229 lines
7.6 KiB
Dart
// SPDX-FileCopyrightText: 2022 Iconica
|
|
//
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_form_wizard/flutter_form.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:form_example/example_pages/age_page.dart';
|
|
import 'package:form_example/example_pages/carousel_page.dart';
|
|
import 'package:form_example/example_pages/check_page.dart';
|
|
import 'package:form_example/example_pages/name_page.dart';
|
|
import 'package:intl/intl.dart';
|
|
|
|
import 'example_pages/date_page.dart';
|
|
|
|
class FormExample extends ConsumerStatefulWidget {
|
|
const FormExample({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
ConsumerState<ConsumerStatefulWidget> createState() => _FormExampleState();
|
|
}
|
|
|
|
class _FormExampleState extends ConsumerState<FormExample> {
|
|
final FlutterFormController formController = FlutterFormController();
|
|
|
|
final String checkPageText = "All entered info: ";
|
|
|
|
final phoneInputController = FlutterFormInputPhoneController(
|
|
id: 'phone',
|
|
onChanged: (value) {
|
|
debugPrint(
|
|
'${value?.dialCode ?? 'no dial'} ${value?.number ?? 'no number'}');
|
|
},
|
|
);
|
|
|
|
final ageInputController = FlutterFormInputNumberPickerController(
|
|
id: "age",
|
|
checkPageTitle: (dynamic amount) {
|
|
return "Age: $amount years";
|
|
},
|
|
onChanged: (value) => debugPrint(value.toString()),
|
|
);
|
|
|
|
late final FlutterFormInputCarouselController carouselInputController;
|
|
|
|
final List<Map<String, dynamic>> cars = [
|
|
{
|
|
"title": "Mercedes",
|
|
"description": "Mercedes is a car",
|
|
},
|
|
{
|
|
"title": "BMW",
|
|
"description": "BMW is a car",
|
|
},
|
|
{
|
|
"title": "Mazda",
|
|
'description': "Mazda is a car",
|
|
},
|
|
];
|
|
|
|
FlutterFormInputPlainTextController firstNameController =
|
|
FlutterFormInputPlainTextController(
|
|
mandatory: true,
|
|
id: "firstName",
|
|
checkPageTitle: (dynamic firstName) {
|
|
return "First Name: $firstName";
|
|
},
|
|
onChanged: (value) => debugPrint(value),
|
|
);
|
|
|
|
FlutterFormInputPlainTextController lastNameController =
|
|
FlutterFormInputPlainTextController(
|
|
mandatory: true,
|
|
id: "lastName",
|
|
checkPageTitle: (dynamic lastName) {
|
|
return "Last Name: $lastName";
|
|
},
|
|
onChanged: (value) => debugPrint(value),
|
|
);
|
|
|
|
FlutterFormInputDateTimeController dateController =
|
|
FlutterFormInputDateTimeController(
|
|
id: "date",
|
|
dateTimeType: FlutterFormDateTimeType.date,
|
|
dateFormat: DateFormat('dd-MM-yyyy'),
|
|
checkPageTitle: (dynamic date) => "Date: $date",
|
|
onChanged: (String? value) => () {
|
|
debugPrint(value.toString());
|
|
},
|
|
value: DateTime.now().toString(),
|
|
);
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
carouselInputController = FlutterFormInputCarouselController(
|
|
id: 'carCarousel',
|
|
checkPageTitle: (dynamic index) {
|
|
return cars[index]["title"];
|
|
},
|
|
checkPageDescription: (dynamic index) {
|
|
return cars[index]["description"];
|
|
},
|
|
onChanged: (value) => debugPrint(value.toString()),
|
|
);
|
|
}
|
|
|
|
bool showLastName = true;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
var size = MediaQuery.of(context).size;
|
|
var fontSize = size.height / 40;
|
|
|
|
return GestureDetector(
|
|
onTap: () => FocusScope.of(context).unfocus(),
|
|
child: Scaffold(
|
|
body: Center(
|
|
child: FlutterForm(
|
|
formController: formController,
|
|
options: FlutterFormOptions(
|
|
onFinished: (Map<int, Map<String, dynamic>> results) {
|
|
debugPrint("Final full results: $results");
|
|
Navigator.of(context).pushReplacementNamed('/thanks');
|
|
},
|
|
onNext: (int pageNumber, Map<String, dynamic> results) {
|
|
debugPrint("Results page $pageNumber: $results");
|
|
},
|
|
nextButton: (int pageNumber, bool checkingPages) {
|
|
return Align(
|
|
alignment: Alignment.bottomCenter,
|
|
child: Padding(
|
|
padding: EdgeInsets.only(
|
|
bottom: size.height * 0.05,
|
|
),
|
|
child: SizedBox(
|
|
height: size.height * 0.07,
|
|
width: size.width * 0.7,
|
|
child: ElevatedButton(
|
|
style: ElevatedButton.styleFrom(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(5),
|
|
),
|
|
backgroundColor: Colors.black,
|
|
textStyle: TextStyle(
|
|
fontSize: fontSize,
|
|
fontWeight: FontWeight.w600,
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
onPressed: () async {
|
|
await formController.autoNextStep();
|
|
},
|
|
child: Text(checkingPages ? "Save" : "Next Page"),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
},
|
|
backButton: (int pageNumber, bool checkingPages, int pageAmount) {
|
|
if (pageNumber != 0) {
|
|
if (!checkingPages || pageNumber >= pageAmount) {
|
|
return Align(
|
|
alignment: Alignment.topLeft,
|
|
child: Container(
|
|
margin: EdgeInsets.only(
|
|
top: size.height * 0.045,
|
|
left: size.width * 0.07,
|
|
),
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(90),
|
|
color: const Color(0xFFD8D8D8).withOpacity(0.50),
|
|
),
|
|
child: IconButton(
|
|
padding: EdgeInsets.zero,
|
|
splashRadius: size.width * 0.06,
|
|
onPressed: () {
|
|
formController.previousStep();
|
|
},
|
|
icon: const Icon(Icons.chevron_left),
|
|
)),
|
|
);
|
|
}
|
|
}
|
|
return Container();
|
|
},
|
|
pages: [
|
|
FlutterFormPage(
|
|
child: Center(
|
|
child: FlutterFormInputPhone(
|
|
controller: phoneInputController,
|
|
validationMessage: 'Please fill in a valid phone number',
|
|
),
|
|
),
|
|
),
|
|
FlutterFormPage(
|
|
child: AgePage(
|
|
inputController: ageInputController,
|
|
),
|
|
),
|
|
FlutterFormPage(
|
|
child: NamePage(
|
|
firstNameController: firstNameController,
|
|
lastNameController: lastNameController,
|
|
showLastName: showLastName,
|
|
),
|
|
),
|
|
FlutterFormPage(
|
|
child: CarouselPage(
|
|
inputController: carouselInputController,
|
|
cars: cars,
|
|
),
|
|
),
|
|
FlutterFormPage(
|
|
child: DatePage(
|
|
dateController: dateController,
|
|
),
|
|
),
|
|
],
|
|
checkPage: CheckPageExample()
|
|
.showCheckpage(context, size, fontSize, checkPageText),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|