mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-02-02 14:16:58 +00:00
fix(initializing): Move bloc provider from provider picker to initialization page
This commit is contained in:
parent
ea85ce6064
commit
b40ab17197
|
@ -2,6 +2,7 @@ import 'package:cubit_form/cubit_form.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:selfprivacy/config/brand_theme.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/server_installation/server_installation_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/forms/factories/field_cubit_factory.dart';
|
import 'package:selfprivacy/logic/cubit/forms/factories/field_cubit_factory.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart';
|
||||||
|
@ -143,13 +144,29 @@ class InitializingPage extends StatelessWidget {
|
||||||
Widget _stepServerProviderToken(
|
Widget _stepServerProviderToken(
|
||||||
final ServerInstallationCubit serverInstallationCubit,
|
final ServerInstallationCubit serverInstallationCubit,
|
||||||
) =>
|
) =>
|
||||||
const ServerProviderPicker();
|
BlocProvider(
|
||||||
|
create: (final context) => ProviderFormCubit(serverInstallationCubit),
|
||||||
|
child: Builder(
|
||||||
|
builder: (final context) {
|
||||||
|
final providerCubit = context.watch<ProviderFormCubit>();
|
||||||
|
return ServerProviderPicker(
|
||||||
|
formCubit: providerCubit,
|
||||||
|
serverInstallationCubit: serverInstallationCubit,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
Widget _stepServerType(
|
Widget _stepServerType(
|
||||||
final ServerInstallationCubit serverInstallationCubit,
|
final ServerInstallationCubit serverInstallationCubit,
|
||||||
) =>
|
) =>
|
||||||
ServerTypePicker(
|
BlocProvider(
|
||||||
serverInstallationCubit: serverInstallationCubit,
|
create: (final context) => ProviderFormCubit(serverInstallationCubit),
|
||||||
|
child: Builder(
|
||||||
|
builder: (final context) => ServerTypePicker(
|
||||||
|
serverInstallationCubit: serverInstallationCubit,
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
void _showModal(final BuildContext context, final Widget widget) {
|
void _showModal(final BuildContext context, final Widget widget) {
|
||||||
|
|
|
@ -11,9 +11,14 @@ import 'package:selfprivacy/ui/components/brand_md/brand_md.dart';
|
||||||
|
|
||||||
class ServerProviderPicker extends StatefulWidget {
|
class ServerProviderPicker extends StatefulWidget {
|
||||||
const ServerProviderPicker({
|
const ServerProviderPicker({
|
||||||
|
required this.formCubit,
|
||||||
|
required this.serverInstallationCubit,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final ProviderFormCubit formCubit;
|
||||||
|
final ServerInstallationCubit serverInstallationCubit;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<ServerProviderPicker> createState() => _ServerProviderPickerState();
|
State<ServerProviderPicker> createState() => _ServerProviderPickerState();
|
||||||
}
|
}
|
||||||
|
@ -32,11 +37,13 @@ class _ServerProviderPickerState extends State<ServerProviderPicker> {
|
||||||
switch (selectedProvider) {
|
switch (selectedProvider) {
|
||||||
case ServerProvider.unknown:
|
case ServerProvider.unknown:
|
||||||
return ProviderSelectionPage(
|
return ProviderSelectionPage(
|
||||||
|
serverInstallationCubit: widget.serverInstallationCubit,
|
||||||
callback: setProvider,
|
callback: setProvider,
|
||||||
);
|
);
|
||||||
|
|
||||||
case ServerProvider.hetzner:
|
case ServerProvider.hetzner:
|
||||||
return ProviderInputDataPage(
|
return ProviderInputDataPage(
|
||||||
|
providerCubit: widget.formCubit,
|
||||||
providerInfo: ProviderPageInfo(
|
providerInfo: ProviderPageInfo(
|
||||||
providerType: ServerProvider.hetzner,
|
providerType: ServerProvider.hetzner,
|
||||||
pathToHow: 'hetzner_how',
|
pathToHow: 'hetzner_how',
|
||||||
|
@ -49,6 +56,7 @@ class _ServerProviderPickerState extends State<ServerProviderPicker> {
|
||||||
|
|
||||||
case ServerProvider.digitalOcean:
|
case ServerProvider.digitalOcean:
|
||||||
return ProviderInputDataPage(
|
return ProviderInputDataPage(
|
||||||
|
providerCubit: widget.formCubit,
|
||||||
providerInfo: ProviderPageInfo(
|
providerInfo: ProviderPageInfo(
|
||||||
providerType: ServerProvider.digitalOcean,
|
providerType: ServerProvider.digitalOcean,
|
||||||
pathToHow: 'hetzner_how',
|
pathToHow: 'hetzner_how',
|
||||||
|
@ -77,81 +85,75 @@ class ProviderPageInfo {
|
||||||
class ProviderInputDataPage extends StatelessWidget {
|
class ProviderInputDataPage extends StatelessWidget {
|
||||||
const ProviderInputDataPage({
|
const ProviderInputDataPage({
|
||||||
required this.providerInfo,
|
required this.providerInfo,
|
||||||
|
required this.providerCubit,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
final ProviderPageInfo providerInfo;
|
final ProviderPageInfo providerInfo;
|
||||||
|
final ProviderFormCubit providerCubit;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(final BuildContext context) => BlocProvider(
|
Widget build(final BuildContext context) => Column(
|
||||||
create: (final context) => ProviderFormCubit(
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
context.watch<ServerInstallationCubit>(),
|
children: [
|
||||||
),
|
providerInfo.image,
|
||||||
child: Builder(
|
const SizedBox(height: 10),
|
||||||
builder: (final context) {
|
Text(
|
||||||
final formCubitState = context.watch<ProviderFormCubit>().state;
|
'initializing.connect_to_server'.tr(),
|
||||||
return Column(
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
),
|
||||||
children: [
|
const Spacer(),
|
||||||
providerInfo.image,
|
CubitFormTextField(
|
||||||
const SizedBox(height: 10),
|
formFieldCubit: providerCubit.apiKey,
|
||||||
Text(
|
textAlign: TextAlign.center,
|
||||||
'initializing.connect_to_server'.tr(),
|
scrollPadding: const EdgeInsets.only(bottom: 70),
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
decoration: const InputDecoration(
|
||||||
),
|
hintText: 'Provider API Token',
|
||||||
const Spacer(),
|
),
|
||||||
CubitFormTextField(
|
),
|
||||||
formFieldCubit: context.read<ProviderFormCubit>().apiKey,
|
const Spacer(),
|
||||||
textAlign: TextAlign.center,
|
FilledButton(
|
||||||
scrollPadding: const EdgeInsets.only(bottom: 70),
|
title: 'basis.connect'.tr(),
|
||||||
decoration: const InputDecoration(
|
onPressed: () => providerCubit.state.isSubmitting
|
||||||
hintText: 'Provider API Token',
|
? null
|
||||||
),
|
: () => providerCubit.trySubmit(),
|
||||||
),
|
),
|
||||||
const Spacer(),
|
const SizedBox(height: 10),
|
||||||
FilledButton(
|
OutlinedButton(
|
||||||
title: 'basis.connect'.tr(),
|
child: Text('initializing.how'.tr()),
|
||||||
onPressed: () => formCubitState.isSubmitting
|
onPressed: () => showModalBottomSheet<void>(
|
||||||
? null
|
context: context,
|
||||||
: () => context.read<ProviderFormCubit>().trySubmit(),
|
isScrollControlled: true,
|
||||||
),
|
backgroundColor: Colors.transparent,
|
||||||
const SizedBox(height: 10),
|
builder: (final BuildContext context) => BrandBottomSheet(
|
||||||
OutlinedButton(
|
isExpended: true,
|
||||||
child: Text('initializing.how'.tr()),
|
child: Padding(
|
||||||
onPressed: () => showModalBottomSheet<void>(
|
padding: paddingH15V0,
|
||||||
context: context,
|
child: ListView(
|
||||||
isScrollControlled: true,
|
padding: const EdgeInsets.symmetric(vertical: 16),
|
||||||
backgroundColor: Colors.transparent,
|
children: [
|
||||||
builder: (final BuildContext context) => BrandBottomSheet(
|
BrandMarkdown(
|
||||||
isExpended: true,
|
fileName: providerInfo.pathToHow,
|
||||||
child: Padding(
|
|
||||||
padding: paddingH15V0,
|
|
||||||
child: ListView(
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 16),
|
|
||||||
children: [
|
|
||||||
BrandMarkdown(
|
|
||||||
fileName: providerInfo.pathToHow,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
);
|
),
|
||||||
},
|
),
|
||||||
),
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ProviderSelectionPage extends StatelessWidget {
|
class ProviderSelectionPage extends StatelessWidget {
|
||||||
const ProviderSelectionPage({
|
const ProviderSelectionPage({
|
||||||
required this.callback,
|
required this.callback,
|
||||||
|
required this.serverInstallationCubit,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
final Function callback;
|
final Function callback;
|
||||||
|
final ServerInstallationCubit serverInstallationCubit;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(final BuildContext context) => Column(
|
Widget build(final BuildContext context) => Column(
|
||||||
|
@ -173,8 +175,7 @@ class ProviderSelectionPage extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
InkWell(
|
InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
context
|
serverInstallationCubit
|
||||||
.read<ServerInstallationCubit>()
|
|
||||||
.setServerProviderType(ServerProvider.hetzner);
|
.setServerProviderType(ServerProvider.hetzner);
|
||||||
callback(ServerProvider.hetzner);
|
callback(ServerProvider.hetzner);
|
||||||
},
|
},
|
||||||
|
@ -188,8 +189,7 @@ class ProviderSelectionPage extends StatelessWidget {
|
||||||
),
|
),
|
||||||
InkWell(
|
InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
context
|
serverInstallationCubit
|
||||||
.read<ServerInstallationCubit>()
|
|
||||||
.setServerProviderType(ServerProvider.digitalOcean);
|
.setServerProviderType(ServerProvider.digitalOcean);
|
||||||
callback(ServerProvider.digitalOcean);
|
callback(ServerProvider.digitalOcean);
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue