From b40ab171979ee594f6e48ce5766c8453e1beb114 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Wed, 19 Oct 2022 18:43:01 +0400 Subject: [PATCH] fix(initializing): Move bloc provider from provider picker to initialization page --- .../setup/initializing/initializing.dart | 23 +++- .../initializing/server_provider_picker.dart | 120 +++++++++--------- 2 files changed, 80 insertions(+), 63 deletions(-) diff --git a/lib/ui/pages/setup/initializing/initializing.dart b/lib/ui/pages/setup/initializing/initializing.dart index eb6f05a5..a4a96435 100644 --- a/lib/ui/pages/setup/initializing/initializing.dart +++ b/lib/ui/pages/setup/initializing/initializing.dart @@ -2,6 +2,7 @@ import 'package:cubit_form/cubit_form.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:selfprivacy/config/brand_theme.dart'; +import 'package:selfprivacy/logic/cubit/forms/setup/initializing/provider_form_cubit.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; import 'package:selfprivacy/logic/cubit/forms/factories/field_cubit_factory.dart'; import 'package:selfprivacy/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart'; @@ -143,13 +144,29 @@ class InitializingPage extends StatelessWidget { Widget _stepServerProviderToken( final ServerInstallationCubit serverInstallationCubit, ) => - const ServerProviderPicker(); + BlocProvider( + create: (final context) => ProviderFormCubit(serverInstallationCubit), + child: Builder( + builder: (final context) { + final providerCubit = context.watch(); + return ServerProviderPicker( + formCubit: providerCubit, + serverInstallationCubit: serverInstallationCubit, + ); + }, + ), + ); Widget _stepServerType( final ServerInstallationCubit serverInstallationCubit, ) => - ServerTypePicker( - serverInstallationCubit: serverInstallationCubit, + BlocProvider( + create: (final context) => ProviderFormCubit(serverInstallationCubit), + child: Builder( + builder: (final context) => ServerTypePicker( + serverInstallationCubit: serverInstallationCubit, + ), + ), ); void _showModal(final BuildContext context, final Widget widget) { diff --git a/lib/ui/pages/setup/initializing/server_provider_picker.dart b/lib/ui/pages/setup/initializing/server_provider_picker.dart index c8b8e828..3984b856 100644 --- a/lib/ui/pages/setup/initializing/server_provider_picker.dart +++ b/lib/ui/pages/setup/initializing/server_provider_picker.dart @@ -11,9 +11,14 @@ import 'package:selfprivacy/ui/components/brand_md/brand_md.dart'; class ServerProviderPicker extends StatefulWidget { const ServerProviderPicker({ + required this.formCubit, + required this.serverInstallationCubit, super.key, }); + final ProviderFormCubit formCubit; + final ServerInstallationCubit serverInstallationCubit; + @override State createState() => _ServerProviderPickerState(); } @@ -32,11 +37,13 @@ class _ServerProviderPickerState extends State { switch (selectedProvider) { case ServerProvider.unknown: return ProviderSelectionPage( + serverInstallationCubit: widget.serverInstallationCubit, callback: setProvider, ); case ServerProvider.hetzner: return ProviderInputDataPage( + providerCubit: widget.formCubit, providerInfo: ProviderPageInfo( providerType: ServerProvider.hetzner, pathToHow: 'hetzner_how', @@ -49,6 +56,7 @@ class _ServerProviderPickerState extends State { case ServerProvider.digitalOcean: return ProviderInputDataPage( + providerCubit: widget.formCubit, providerInfo: ProviderPageInfo( providerType: ServerProvider.digitalOcean, pathToHow: 'hetzner_how', @@ -77,81 +85,75 @@ class ProviderPageInfo { class ProviderInputDataPage extends StatelessWidget { const ProviderInputDataPage({ required this.providerInfo, + required this.providerCubit, super.key, }); final ProviderPageInfo providerInfo; + final ProviderFormCubit providerCubit; @override - Widget build(final BuildContext context) => BlocProvider( - create: (final context) => ProviderFormCubit( - context.watch(), - ), - child: Builder( - builder: (final context) { - final formCubitState = context.watch().state; - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - providerInfo.image, - const SizedBox(height: 10), - Text( - 'initializing.connect_to_server'.tr(), - style: Theme.of(context).textTheme.titleLarge, - ), - const Spacer(), - CubitFormTextField( - formFieldCubit: context.read().apiKey, - textAlign: TextAlign.center, - scrollPadding: const EdgeInsets.only(bottom: 70), - decoration: const InputDecoration( - hintText: 'Provider API Token', - ), - ), - const Spacer(), - FilledButton( - title: 'basis.connect'.tr(), - onPressed: () => formCubitState.isSubmitting - ? null - : () => context.read().trySubmit(), - ), - const SizedBox(height: 10), - OutlinedButton( - child: Text('initializing.how'.tr()), - onPressed: () => showModalBottomSheet( - context: context, - isScrollControlled: true, - backgroundColor: Colors.transparent, - builder: (final BuildContext context) => BrandBottomSheet( - isExpended: true, - child: Padding( - padding: paddingH15V0, - child: ListView( - padding: const EdgeInsets.symmetric(vertical: 16), - children: [ - BrandMarkdown( - fileName: providerInfo.pathToHow, - ), - ], - ), + Widget build(final BuildContext context) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + providerInfo.image, + const SizedBox(height: 10), + Text( + 'initializing.connect_to_server'.tr(), + style: Theme.of(context).textTheme.titleLarge, + ), + const Spacer(), + CubitFormTextField( + formFieldCubit: providerCubit.apiKey, + textAlign: TextAlign.center, + scrollPadding: const EdgeInsets.only(bottom: 70), + decoration: const InputDecoration( + hintText: 'Provider API Token', + ), + ), + const Spacer(), + FilledButton( + title: 'basis.connect'.tr(), + onPressed: () => providerCubit.state.isSubmitting + ? null + : () => providerCubit.trySubmit(), + ), + const SizedBox(height: 10), + OutlinedButton( + child: Text('initializing.how'.tr()), + onPressed: () => showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (final BuildContext context) => BrandBottomSheet( + isExpended: true, + child: Padding( + padding: paddingH15V0, + child: ListView( + padding: const EdgeInsets.symmetric(vertical: 16), + children: [ + BrandMarkdown( + fileName: providerInfo.pathToHow, ), - ), + ], ), ), - ], - ); - }, - ), + ), + ), + ), + ], ); } class ProviderSelectionPage extends StatelessWidget { const ProviderSelectionPage({ required this.callback, + required this.serverInstallationCubit, super.key, }); final Function callback; + final ServerInstallationCubit serverInstallationCubit; @override Widget build(final BuildContext context) => Column( @@ -173,8 +175,7 @@ class ProviderSelectionPage extends StatelessWidget { children: [ InkWell( onTap: () { - context - .read() + serverInstallationCubit .setServerProviderType(ServerProvider.hetzner); callback(ServerProvider.hetzner); }, @@ -188,8 +189,7 @@ class ProviderSelectionPage extends StatelessWidget { ), InkWell( onTap: () { - context - .read() + serverInstallationCubit .setServerProviderType(ServerProvider.digitalOcean); callback(ServerProvider.digitalOcean); },