flutter_form_wizard/example/lib/form_example.dart

228 lines
7.5 KiB
Dart
Raw Normal View History

2022-11-01 08:23:35 +01:00
// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart';
2022-11-29 09:43:55 +01:00
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';
2023-09-26 11:07:29 +02:00
import 'package:intl/intl.dart';
2022-10-12 11:43:37 +02:00
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> {
2022-09-28 12:02:40 +02:00
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'}');
},
);
2022-09-28 12:02:40 +02:00
final ageInputController = FlutterFormInputNumberPickerController(
2022-09-27 15:30:20 +02:00
id: "age",
checkPageTitle: (dynamic amount) {
return "Age: $amount years";
},
2022-10-12 16:32:47 +02:00
onChanged: (value) => debugPrint(value.toString()),
2022-09-27 15:30:20 +02:00
);
2022-09-28 12:02:40 +02:00
late final FlutterFormInputCarouselController carouselInputController;
2022-09-27 15:30:20 +02:00
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",
},
];
2022-09-28 12:02:40 +02:00
FlutterFormInputPlainTextController firstNameController =
FlutterFormInputPlainTextController(
2022-09-27 15:30:20 +02:00
mandatory: true,
id: "firstName",
checkPageTitle: (dynamic firstName) {
return "First Name: $firstName";
},
2022-10-12 16:32:47 +02:00
onChanged: (value) => debugPrint(value),
2022-09-27 15:30:20 +02:00
);
2022-09-28 12:02:40 +02:00
FlutterFormInputPlainTextController lastNameController =
FlutterFormInputPlainTextController(
2022-09-27 15:30:20 +02:00
mandatory: true,
id: "lastName",
checkPageTitle: (dynamic lastName) {
return "Last Name: $lastName";
},
2022-10-12 16:32:47 +02:00
onChanged: (value) => debugPrint(value),
2022-09-27 15:30:20 +02:00
);
2023-09-26 11:07:29 +02:00
FlutterFormInputDateTimeController dateController =
FlutterFormInputDateTimeController(
2022-10-12 11:43:37 +02:00
id: "date",
2023-09-26 11:07:29 +02:00
dateTimeType: FlutterFormDateTimeType.date,
dateFormat: DateFormat('dd-MM-yyyy'),
checkPageTitle: (dynamic date) => "Date: $date",
onChanged: (String? value) => () {
debugPrint(value.toString());
2022-10-12 11:43:37 +02:00
},
2023-09-26 11:07:29 +02:00
value: DateTime.now().toString(),
2022-10-12 11:43:37 +02:00
);
2022-09-27 15:30:20 +02:00
@override
void initState() {
super.initState();
2022-09-28 12:02:40 +02:00
carouselInputController = FlutterFormInputCarouselController(
2022-09-27 15:30:20 +02:00
id: 'carCarousel',
checkPageTitle: (dynamic index) {
return cars[index]["title"];
},
checkPageDescription: (dynamic index) {
return cars[index]["description"];
},
2022-10-12 16:32:47 +02:00
onChanged: (value) => debugPrint(value.toString()),
2022-09-27 15:30:20 +02:00
);
}
bool showLastName = true;
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
var fontSize = size.height / 40;
2022-09-20 16:14:09 +02:00
return GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: Scaffold(
body: Center(
2022-09-28 11:51:28 +02:00
child: FlutterForm(
2022-09-20 16:14:09 +02:00
formController: formController,
2022-09-28 12:02:40 +02:00
options: FlutterFormOptions(
2022-09-20 16:14:09 +02:00
onFinished: (Map<int, Map<String, dynamic>> results) {
2022-09-28 11:58:59 +02:00
debugPrint("Final full results: $results");
Navigator.of(context).pushReplacementNamed('/thanks');
2022-09-20 16:14:09 +02:00
},
onNext: (int pageNumber, Map<String, dynamic> results) {
2022-09-28 11:58:59 +02:00
debugPrint("Results page $pageNumber: $results");
2022-09-20 16:14:09 +02:00
},
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,
),
),
2022-09-27 15:30:20 +02:00
onPressed: () async {
await formController.autoNextStep();
2022-09-20 16:14:09 +02:00
},
child: Text(checkingPages ? "Save" : "Next Page"),
),
),
),
2022-09-20 16:14:09 +02:00
);
},
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),
)),
);
}
}
2022-09-20 16:14:09 +02:00
return Container();
},
pages: [
FlutterFormPage(
child: Center(
child: FlutterFormInputPhone(
controller: phoneInputController,
),
),
),
2022-09-28 12:02:40 +02:00
FlutterFormPage(
2022-09-27 15:30:20 +02:00
child: AgePage(
inputController: ageInputController,
),
),
2022-09-28 12:02:40 +02:00
FlutterFormPage(
2022-09-27 15:30:20 +02:00
child: NamePage(
firstNameController: firstNameController,
lastNameController: lastNameController,
showLastName: showLastName,
),
),
2022-09-28 12:02:40 +02:00
FlutterFormPage(
child: CarouselPage(
inputController: carouselInputController,
cars: cars,
2022-09-27 15:30:20 +02:00
),
),
2022-10-12 11:43:37 +02:00
FlutterFormPage(
child: DatePage(
dateController: dateController,
),
),
2022-09-20 16:14:09 +02:00
],
checkPage: CheckPageExample()
.showCheckpage(context, size, fontSize, checkPageText),
),
),
),
),
);
}
}