97 lines
3.2 KiB
Dart
97 lines
3.2 KiB
Dart
import 'package:anyway/modules/onboarding_card.dart';
|
|
import 'package:anyway/pages/new_trip_location.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
const List<Widget> onboardingCards = [
|
|
OnboardingCard(
|
|
title: "Welcome to anyway!",
|
|
description: "Anyway helps you plan a city trip that suits your wishes.",
|
|
imagePath: "assets/city.svg"
|
|
),
|
|
OnboardingCard(
|
|
title: "Find your way",
|
|
description: "Bored by churches? No problem! Hate shopping? No worries! Instead of suggesting the generic trips that bore you, anyway will try to give you recommendations that really suit you.",
|
|
imagePath: "assets/plan.svg"
|
|
),
|
|
OnboardingCard(
|
|
title: "Change your mind",
|
|
description: "Feet get sore, the weather changes. Anyway understands that! Move or remove destinations, visit hidden gems along your journey, do your own thing. Anyway adapts to your spontaneous decisions.",
|
|
imagePath: "assets/cat.svg"
|
|
),
|
|
OnboardingCard(
|
|
title: "Feeling lost?",
|
|
description: "Whenever you are confused or need help with the app, look out for the question mark in the top right corner. Help is just a tap away!",
|
|
imagePath: "assets/confused.svg"
|
|
),
|
|
];
|
|
|
|
class OnboardingPage extends StatefulWidget {
|
|
const OnboardingPage({super.key});
|
|
|
|
@override
|
|
State<OnboardingPage> createState() => _OnboardingPageState();
|
|
}
|
|
|
|
class _OnboardingPageState extends State<OnboardingPage> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final PageController _controller = PageController();
|
|
|
|
return Scaffold(
|
|
body: Stack(
|
|
children: [
|
|
Container(
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
colors: [Colors.red, Colors.blue],
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
),
|
|
),
|
|
child: PageView(
|
|
controller: _controller,
|
|
children: List.generate(
|
|
onboardingCards.length,
|
|
(index) {
|
|
return Container(
|
|
alignment: Alignment.center,
|
|
child: onboardingCards[index],
|
|
);
|
|
}
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
floatingActionButton: FloatingActionButton.extended(
|
|
onPressed: () {
|
|
if (_controller.page == onboardingCards.length - 1) {
|
|
Navigator.of(context).push(
|
|
MaterialPageRoute(
|
|
builder: (context) => const NewTripPage()
|
|
)
|
|
);
|
|
} else {
|
|
_controller.nextPage(duration: Duration(milliseconds: 500), curve: Curves.ease);
|
|
}
|
|
},
|
|
label: ListenableBuilder(
|
|
listenable: _controller,
|
|
builder: (context, child) {
|
|
if (_controller.page == onboardingCards.length - 1) {
|
|
return Row(
|
|
children: [
|
|
const Text("Start planning!"),
|
|
Padding(padding: const EdgeInsets.only(right: 8.0)),
|
|
const Icon(Icons.map_outlined)
|
|
],
|
|
);
|
|
} else {
|
|
return const Icon(Icons.arrow_forward);
|
|
}
|
|
}
|
|
)
|
|
),
|
|
);
|
|
}
|
|
} |