selfprivacy.org.app/lib/ui/pages/onboarding/onboarding.dart

168 lines
5.4 KiB
Dart
Raw Normal View History

2020-11-29 20:07:46 +00:00
import 'package:flutter/material.dart';
2021-01-06 17:35:57 +00:00
import 'package:selfprivacy/logic/cubit/app_settings/app_settings_cubit.dart';
2020-11-29 20:07:46 +00:00
import 'package:selfprivacy/ui/components/brand_button/brand_button.dart';
2020-12-06 07:28:31 +00:00
import 'package:selfprivacy/utils/route_transitions/basic.dart';
2021-03-15 15:39:44 +00:00
import 'package:easy_localization/easy_localization.dart';
2020-11-29 20:07:46 +00:00
2020-12-30 14:13:25 +00:00
class OnboardingPage extends StatefulWidget {
const OnboardingPage({required this.nextPage, super.key});
2020-11-29 20:07:46 +00:00
2021-01-06 17:35:57 +00:00
final Widget nextPage;
2020-12-30 14:13:25 +00:00
@override
State<OnboardingPage> createState() => _OnboardingPageState();
2020-12-30 14:13:25 +00:00
}
class _OnboardingPageState extends State<OnboardingPage> {
PageController pageController = PageController();
@override
void initState() {
super.initState();
}
2020-11-29 20:07:46 +00:00
@override
Widget build(final BuildContext context) => Scaffold(
body: PageView(
controller: pageController,
children: [
_withPadding(firstPage()),
_withPadding(secondPage()),
],
),
);
2020-12-30 14:13:25 +00:00
2022-06-05 19:36:32 +00:00
Widget _withPadding(final Widget child) => Padding(
padding: const EdgeInsets.symmetric(
horizontal: 15,
),
child: child,
);
2020-12-30 14:13:25 +00:00
2022-06-05 19:36:32 +00:00
Widget firstPage() => ConstrainedBox(
constraints: BoxConstraints(
maxHeight: MediaQuery.of(context).size.height,
),
child: Column(
children: [
Expanded(
child: ListView(
children: [
const SizedBox(height: 30),
Text(
'onboarding.page1_title'.tr(),
style: Theme.of(context).textTheme.headlineSmall,
),
const SizedBox(height: 16),
Text(
'onboarding.page1_text'.tr(),
style: Theme.of(context).textTheme.bodyMedium,
),
const SizedBox(height: 32),
Center(
child: Image.asset(
_fileName(
context: context,
path: 'assets/images/onboarding',
fileExtention: 'png',
fileName: 'onboarding1',
),
),
),
],
2020-12-30 14:13:25 +00:00
),
),
BrandButton.rised(
onPressed: () {
pageController.animateToPage(
1,
duration: const Duration(milliseconds: 300),
curve: Curves.easeIn,
);
},
text: 'basis.next'.tr(),
),
const SizedBox(height: 30),
],
),
);
2020-12-30 14:13:25 +00:00
2022-06-05 19:36:32 +00:00
Widget secondPage() => ConstrainedBox(
constraints: BoxConstraints(
maxHeight: MediaQuery.of(context).size.height,
),
child: Column(
children: [
Expanded(
child: ListView(
children: [
const SizedBox(height: 30),
Text(
'onboarding.page2_title'.tr(),
style: Theme.of(context).textTheme.headlineSmall,
),
const SizedBox(height: 16),
Text(
'onboarding.page2_text'.tr(),
style: Theme.of(context).textTheme.bodyMedium,
),
const SizedBox(height: 16),
Text(
'onboarding.page2_server_provider_title'.tr(),
style: Theme.of(context).textTheme.titleLarge,
),
const SizedBox(height: 16),
Text(
'onboarding.page2_server_provider_text'.tr(),
style: Theme.of(context).textTheme.bodyMedium,
),
const SizedBox(height: 16),
Text(
'onboarding.page2_dns_provider_title'.tr(),
style: Theme.of(context).textTheme.titleLarge,
),
const SizedBox(height: 16),
Text(
'onboarding.page2_dns_provider_text'.tr(),
style: Theme.of(context).textTheme.bodyMedium,
),
const SizedBox(height: 16),
Text(
'onboarding.page2_backup_provider_title'.tr(),
style: Theme.of(context).textTheme.titleLarge,
),
const SizedBox(height: 16),
Text(
'onboarding.page2_backup_provider_text'.tr(),
style: Theme.of(context).textTheme.bodyMedium,
),
const SizedBox(height: 16),
],
),
),
BrandButton.rised(
onPressed: () {
context.read<AppSettingsCubit>().turnOffOnboarding();
Navigator.of(context).pushAndRemoveUntil(
materialRoute(widget.nextPage),
(final route) => false,
);
},
text: 'basis.got_it'.tr(),
),
const SizedBox(height: 30),
],
),
);
2020-12-03 16:52:53 +00:00
}
2021-02-17 16:20:09 +00:00
String _fileName({
2022-06-05 19:36:32 +00:00
required final BuildContext context,
required final String path,
required final String fileName,
required final String fileExtention,
2021-02-17 16:20:09 +00:00
}) {
2022-06-05 19:36:32 +00:00
final ThemeData theme = Theme.of(context);
final bool isDark = theme.brightness == Brightness.dark;
2021-02-17 16:20:09 +00:00
return '$path/$fileName${isDark ? '-dark' : '-light'}.$fileExtention';
}