survey_kit 2.0.0-beta4
survey_kit: ^2.0.0-beta4 copied to clipboard
Create beautiful surveys with Flutter (inspired by iOS ResearchKit Surveys)
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:survey_kit/survey_kit.dart';
import 'package:survey_kit_audio/survey_kit_audio.dart';
import 'package:survey_kit_lottie/survey_kit_lottie.dart';
import 'package:survey_kit_video/survey_kit_video.dart';
import 'package:surveykit_example/health_survey_page.dart';
import 'package:surveykit_example/json_survey_page.dart';
void main() {
registerPluginJsonFactories();
runApp(const MyApp());
}
void registerPluginJsonFactories() {
Content.registerFromJson(AudioContent.type, AudioContent.fromJson);
Content.registerFromJson(VideoContent.type, VideoContent.fromJson);
Content.registerFromJson(LottieContent.type, LottieContent.fromJson);
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF00C4CC),
brightness: Brightness.light,
),
useMaterial3: true,
scaffoldBackgroundColor: Colors.white,
appBarTheme: const AppBarTheme(
backgroundColor: Colors.white,
elevation: 0,
centerTitle: true,
iconTheme: IconThemeData(color: Color(0xFF00C4CC)),
titleTextStyle: TextStyle(
color: Color(0xFF00C4CC),
fontSize: 18,
fontWeight: FontWeight.w600,
),
),
inputDecorationTheme: InputDecorationTheme(
fillColor: const Color(0xFFF7F7F9),
filled: true,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(16),
borderSide: BorderSide.none,
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(16),
borderSide: BorderSide.none,
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(16),
borderSide: const BorderSide(color: Color(0xFF00C4CC), width: 2),
),
contentPadding: const EdgeInsets.symmetric(
horizontal: 20,
vertical: 16,
),
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
textStyle: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
backgroundColor: const Color(0xFF00C4CC),
foregroundColor: Colors.white,
elevation: 0,
),
),
outlinedButtonTheme: OutlinedButtonThemeData(
style: OutlinedButton.styleFrom(
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 18),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
side: const BorderSide(color: Color(0xFF00C4CC), width: 1.5),
textStyle: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
),
foregroundColor: const Color(0xFF00C4CC),
),
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
textStyle: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
),
foregroundColor: const Color(0xFF00C4CC),
),
),
textTheme: const TextTheme(
headlineMedium: TextStyle(
fontWeight: FontWeight.bold,
color: Color(0xFF1E1E2C),
),
bodyLarge: TextStyle(fontSize: 18, color: Color(0xFF4A4A5A)),
),
),
localizationsDelegates: const [
SurveyKitLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: SurveyKitLocalizations.supportedLocales,
home: const HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('SurveyKit')),
body: Center(
child: Padding(
padding: const EdgeInsets.all(24),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
ElevatedButton(
onPressed: () => _open(context, const HealthSurveyPage()),
child: const Text('Health survey (Dart)'),
),
const SizedBox(height: 16),
OutlinedButton(
onPressed: () => _open(context, const JsonSurveyPage()),
child: const Text('Media survey (JSON)'),
),
],
),
),
),
);
}
void _open(BuildContext context, Widget page) {
Navigator.of(
context,
).push<void>(MaterialPageRoute<void>(builder: (_) => page));
}
}