Flutter Survey Flow
Flutter Survey Flow is a comprehensive package designed to facilitate the creation and management of surveys within Flutter applications. It provides a variety of survey steps, including multiple-choice, yes/no, date picker, time picker, slider, toggle switch, rating, and more. This package is ideal for applications that require user feedback, data collection, or any form of interactive questionnaire.
Features
- Multiple Choice (Single Select): Allows users to select one option from a list.
- Multiple Choice (Multi Select): Allows users to select multiple options from a list.
- Yes/No Questions: Simple binary choice questions.
- Date Picker: Allows users to select a date.
- Time Picker: Allows users to select a time.
- Slider: Allows users to rate or select a value within a range.
- Toggle Switch: Allows users to toggle between two states.
- Rating: Allows users to rate on a scale.
- Notification and Preparation Steps: Custom steps for notifications and preparation.
Getting Started
Prerequisites
- Flutter SDK:
>=1.17.0
- Dart SDK:
>=3.2.2 <4.0.0
Installation
Add the following to your pubspec.yaml
file:
dependencies:
flutter:
sdk: flutter
flutter_survey_flow: ^0.0.1
Then, run flutter pub get
to install the package.
Usage
Basic Example
Here is a basic example of how to use the Flutter Survey Flow package in your Flutter application:
import 'package:flutter/material.dart';
import 'package:flutter_survey_flow/flutter_survey_flow.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Survey Flow Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const SurveyFlowScreen(),
);
}
}
Advanced Example
Here is an advanced example of how to use the Flutter Survey Flow package in your Flutter application:
import 'package:flutter/material.dart';
import 'package:flutter_survey_flow/flutter_survey_flow.dart';
void main() {
runApp(const MyApp());
}
/// MyApp is the root widget of the application.
/// It sets up the main theme and home screen of the app.
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Survey Flow Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Survey Flow Demo Home Page'),
);
}
}
/// MyHomePage is a stateful widget that demonstrates the usage of the
/// Flutter Survey Flow package with various survey steps.
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
/// Increments the counter and starts the survey.
void _incrementCounter() {
setState(() {
_counter++;
});
FlutterSurveyFlow.startSurvey(
context: context,
steps: [
SurveyStep.multipleChoiceSingleSelect(
id: '1',
title: 'What is your favorite color?',
description: 'Please select an option',
options: [
SurveyOption(
id: '1',
title: 'Red',
),
SurveyOption(
id: '2',
title: 'Green',
),
SurveyOption(
id: '3',
title: 'Blue',
),
SurveyOption(
id: '4',
title: 'Yellow',
),
],
),
SurveyStep<String>.yesNo(
id: '2',
title: 'Do you like Flutter?',
description: 'Please select Yes or No',
),
SurveyStep<DateTime>.datePicker(
id: '3',
title: 'What is your birthday?',
description: 'Please choose your birth date from the date picker',
answer: DateTime.now(),
),
SurveyStep<TimeOfDay>.timePicker(
id: '4',
title: 'What time do you wake up?',
description: 'Please choose your preferred time from the time picker',
answer: TimeOfDay.now().replacing(minute: 0),
),
SurveyStep<double>.slider(
id: '5',
title: 'How satisfied are you with this app?',
description: 'Please rate your satisfaction on a scale from 0 to 100',
answer: 50.0, // Default value
),
SurveyStep<bool>.toggleSwitch(
id: '6',
title: 'Do you want to receive notifications?',
description: 'Please select Yes or No',
answer: true,
),
SurveyStep<int>.rating(
id: '7',
title: 'Rate this app',
description: 'Please rate your satisfaction on a scale from 1 to 5',
answer: 5,
),
SurveyStep<bool>.notification(
id: '8',
title: 'Thank you for taking the survey!',
message: 'Your feedback is greatly appreciated.',
answer: true,
),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
Additional Information
- For more information about the package, please visit the GitHub repository.
- To contribute to the package, please open a pull request on the GitHub repository.
- To file an issue or report a bug, please open an issue on the GitHub repository.
- The package authors will respond to issues and pull requests as soon as possible.
Libraries
- enums/survey_step_type
- flutter_survey_flow
- models/survey_option
- models/survey_step
- providers/survey_provider
- widgets/survey_header
- widgets/survey_scaffold
- widgets/survey_step_builder
- widgets/survey_step_widget
- widgets/survey_steps/step_custom_widget
- widgets/survey_steps/step_date_picker_widget
- widgets/survey_steps/step_multiple_choice_multi_select_widget
- widgets/survey_steps/step_multiple_choice_single_select_widget
- widgets/survey_steps/step_notification_widget
- widgets/survey_steps/step_preparation_widget
- widgets/survey_steps/step_rating_widget
- widgets/survey_steps/step_slider_widget
- widgets/survey_steps/step_success_widget
- widgets/survey_steps/step_time_picker_widget
- widgets/survey_steps/step_toggle_switch_widget
- widgets/survey_steps/step_yes_no_widget