forked from SelfPrivacy/selfprivacy.org.app
update
parent
d79b41a3fe
commit
9566a6ad10
|
@ -61,4 +61,4 @@ SPEC CHECKSUMS:
|
||||||
|
|
||||||
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
|
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
|
||||||
|
|
||||||
COCOAPODS: 1.10.1
|
COCOAPODS: 1.11.2
|
||||||
|
|
|
@ -157,7 +157,7 @@
|
||||||
97C146E61CF9000F007C117D /* Project object */ = {
|
97C146E61CF9000F007C117D /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 1020;
|
LastUpgradeCheck = 1300;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
97C146ED1CF9000F007C117D = {
|
97C146ED1CF9000F007C117D = {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1020"
|
LastUpgradeVersion = "1300"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|
|
@ -2,7 +2,6 @@ import 'dart:convert';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||||
import 'package:hive/hive.dart';
|
|
||||||
import 'package:hive_flutter/hive_flutter.dart';
|
import 'package:hive_flutter/hive_flutter.dart';
|
||||||
import 'package:selfprivacy/logic/models/backblaze_bucket.dart';
|
import 'package:selfprivacy/logic/models/backblaze_bucket.dart';
|
||||||
import 'package:selfprivacy/logic/models/backblaze_credential.dart';
|
import 'package:selfprivacy/logic/models/backblaze_credential.dart';
|
||||||
|
|
|
@ -6,7 +6,6 @@ import 'package:dio/adapter.dart';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
import 'package:selfprivacy/logic/get_it/console.dart';
|
|
||||||
import 'package:selfprivacy/logic/models/message.dart';
|
import 'package:selfprivacy/logic/models/message.dart';
|
||||||
|
|
||||||
abstract class ApiMap {
|
abstract class ApiMap {
|
||||||
|
|
|
@ -3,7 +3,6 @@ import 'dart:async';
|
||||||
import 'package:cubit_form/cubit_form.dart';
|
import 'package:cubit_form/cubit_form.dart';
|
||||||
import 'package:selfprivacy/logic/api_maps/cloudflare.dart';
|
import 'package:selfprivacy/logic/api_maps/cloudflare.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/forms/validations/validations.dart';
|
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
|
||||||
class CloudFlareFormCubit extends FormCubit {
|
class CloudFlareFormCubit extends FormCubit {
|
||||||
|
@ -16,7 +15,11 @@ class CloudFlareFormCubit extends FormCubit {
|
||||||
ValidationModel<String>(
|
ValidationModel<String>(
|
||||||
(s) => regExp.hasMatch(s), 'validations.key_format'.tr()),
|
(s) => regExp.hasMatch(s), 'validations.key_format'.tr()),
|
||||||
LegnthStringValidationWithLenghShowing(
|
LegnthStringValidationWithLenghShowing(
|
||||||
40, 'validations.length'.tr(args: ["40"]))
|
40,
|
||||||
|
'validations.length'.tr(
|
||||||
|
args: ["40"],
|
||||||
|
),
|
||||||
|
)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ import 'dart:async';
|
||||||
|
|
||||||
import 'package:cubit_form/cubit_form.dart';
|
import 'package:cubit_form/cubit_form.dart';
|
||||||
import 'package:selfprivacy/logic/api_maps/hetzner.dart';
|
import 'package:selfprivacy/logic/api_maps/hetzner.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/forms/validations/validations.dart';
|
|
||||||
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ class JobsCubit extends Cubit<JobsState> {
|
||||||
emit(newState);
|
emit(newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
void createOrRemoveServiceToggleJob(ServiceToggleJob job) {
|
void createOrRemoveServiceToggleJob(ToggleJob job) {
|
||||||
var newJobsList = <Job>[];
|
var newJobsList = <Job>[];
|
||||||
if (state is JobsStateWithJobs) {
|
if (state is JobsStateWithJobs) {
|
||||||
newJobsList.addAll((state as JobsStateWithJobs).jobList);
|
newJobsList.addAll((state as JobsStateWithJobs).jobList);
|
||||||
|
|
|
@ -2,7 +2,6 @@ import 'package:hive/hive.dart';
|
||||||
import 'package:selfprivacy/config/hive_config.dart';
|
import 'package:selfprivacy/config/hive_config.dart';
|
||||||
import 'package:selfprivacy/logic/api_maps/server.dart';
|
import 'package:selfprivacy/logic/api_maps/server.dart';
|
||||||
import 'package:selfprivacy/logic/common_enum/common_enum.dart';
|
import 'package:selfprivacy/logic/common_enum/common_enum.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
|
||||||
import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart';
|
||||||
|
|
||||||
part 'services_state.dart';
|
part 'services_state.dart';
|
||||||
|
|
|
@ -6,46 +6,16 @@ part of 'backup.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
Backup _$BackupFromJson(Map<String, dynamic> json) {
|
Backup _$BackupFromJson(Map<String, dynamic> json) => Backup(
|
||||||
return Backup(
|
time: DateTime.parse(json['time'] as String),
|
||||||
time: DateTime.parse(json['time'] as String),
|
id: json['short_id'] as String,
|
||||||
id: json['short_id'] as String,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
BackupStatus _$BackupStatusFromJson(Map<String, dynamic> json) {
|
|
||||||
return BackupStatus(
|
|
||||||
status: _$enumDecode(_$BackupStatusEnumEnumMap, json['status']),
|
|
||||||
progress: (json['progress'] as num).toDouble(),
|
|
||||||
errorMessage: json['error_message'] as String?,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
K _$enumDecode<K, V>(
|
|
||||||
Map<K, V> enumValues,
|
|
||||||
Object? source, {
|
|
||||||
K? unknownValue,
|
|
||||||
}) {
|
|
||||||
if (source == null) {
|
|
||||||
throw ArgumentError(
|
|
||||||
'A value must be provided. Supported values: '
|
|
||||||
'${enumValues.values.join(', ')}',
|
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
return enumValues.entries.singleWhere(
|
BackupStatus _$BackupStatusFromJson(Map<String, dynamic> json) => BackupStatus(
|
||||||
(e) => e.value == source,
|
status: $enumDecode(_$BackupStatusEnumEnumMap, json['status']),
|
||||||
orElse: () {
|
progress: (json['progress'] as num).toDouble(),
|
||||||
if (unknownValue == null) {
|
errorMessage: json['error_message'] as String?,
|
||||||
throw ArgumentError(
|
);
|
||||||
'`$source` is not one of the supported values: '
|
|
||||||
'${enumValues.values.join(', ')}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return MapEntry(unknownValue, enumValues.values.first);
|
|
||||||
},
|
|
||||||
).key;
|
|
||||||
}
|
|
||||||
|
|
||||||
const _$BackupStatusEnumEnumMap = {
|
const _$BackupStatusEnumEnumMap = {
|
||||||
BackupStatusEnum.noKey: 'NO_KEY',
|
BackupStatusEnum.noKey: 'NO_KEY',
|
||||||
|
|
|
@ -6,42 +6,16 @@ part of 'hetzner_server_info.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
HetznerServerInfo _$HetznerServerInfoFromJson(Map<String, dynamic> json) {
|
HetznerServerInfo _$HetznerServerInfoFromJson(Map<String, dynamic> json) =>
|
||||||
return HetznerServerInfo(
|
HetznerServerInfo(
|
||||||
json['id'] as int,
|
json['id'] as int,
|
||||||
json['name'] as String,
|
json['name'] as String,
|
||||||
_$enumDecode(_$ServerStatusEnumMap, json['status']),
|
$enumDecode(_$ServerStatusEnumMap, json['status']),
|
||||||
DateTime.parse(json['created'] as String),
|
DateTime.parse(json['created'] as String),
|
||||||
HetznerServerTypeInfo.fromJson(json['server_type'] as Map<String, dynamic>),
|
HetznerServerTypeInfo.fromJson(
|
||||||
HetznerServerInfo.locationFromJson(json['datacenter'] as Map),
|
json['server_type'] as Map<String, dynamic>),
|
||||||
);
|
HetznerServerInfo.locationFromJson(json['datacenter'] as Map),
|
||||||
}
|
|
||||||
|
|
||||||
K _$enumDecode<K, V>(
|
|
||||||
Map<K, V> enumValues,
|
|
||||||
Object? source, {
|
|
||||||
K? unknownValue,
|
|
||||||
}) {
|
|
||||||
if (source == null) {
|
|
||||||
throw ArgumentError(
|
|
||||||
'A value must be provided. Supported values: '
|
|
||||||
'${enumValues.values.join(', ')}',
|
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
return enumValues.entries.singleWhere(
|
|
||||||
(e) => e.value == source,
|
|
||||||
orElse: () {
|
|
||||||
if (unknownValue == null) {
|
|
||||||
throw ArgumentError(
|
|
||||||
'`$source` is not one of the supported values: '
|
|
||||||
'${enumValues.values.join(', ')}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return MapEntry(unknownValue, enumValues.values.first);
|
|
||||||
},
|
|
||||||
).key;
|
|
||||||
}
|
|
||||||
|
|
||||||
const _$ServerStatusEnumMap = {
|
const _$ServerStatusEnumMap = {
|
||||||
ServerStatus.running: 'running',
|
ServerStatus.running: 'running',
|
||||||
|
@ -56,29 +30,26 @@ const _$ServerStatusEnumMap = {
|
||||||
};
|
};
|
||||||
|
|
||||||
HetznerServerTypeInfo _$HetznerServerTypeInfoFromJson(
|
HetznerServerTypeInfo _$HetznerServerTypeInfoFromJson(
|
||||||
Map<String, dynamic> json) {
|
Map<String, dynamic> json) =>
|
||||||
return HetznerServerTypeInfo(
|
HetznerServerTypeInfo(
|
||||||
json['cores'] as int,
|
json['cores'] as int,
|
||||||
json['memory'] as num,
|
json['memory'] as num,
|
||||||
json['disk'] as int,
|
json['disk'] as int,
|
||||||
(json['prices'] as List<dynamic>)
|
(json['prices'] as List<dynamic>)
|
||||||
.map((e) => HetznerPriceInfo.fromJson(e as Map<String, dynamic>))
|
.map((e) => HetznerPriceInfo.fromJson(e as Map<String, dynamic>))
|
||||||
.toList(),
|
.toList(),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
HetznerPriceInfo _$HetznerPriceInfoFromJson(Map<String, dynamic> json) {
|
HetznerPriceInfo _$HetznerPriceInfoFromJson(Map<String, dynamic> json) =>
|
||||||
return HetznerPriceInfo(
|
HetznerPriceInfo(
|
||||||
HetznerPriceInfo.getPrice(json['price_hourly'] as Map),
|
HetznerPriceInfo.getPrice(json['price_hourly'] as Map),
|
||||||
HetznerPriceInfo.getPrice(json['price_monthly'] as Map),
|
HetznerPriceInfo.getPrice(json['price_monthly'] as Map),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
HetznerLocation _$HetznerLocationFromJson(Map<String, dynamic> json) {
|
HetznerLocation _$HetznerLocationFromJson(Map<String, dynamic> json) =>
|
||||||
return HetznerLocation(
|
HetznerLocation(
|
||||||
json['country'] as String,
|
json['country'] as String,
|
||||||
json['city'] as String,
|
json['city'] as String,
|
||||||
json['description'] as String,
|
json['description'] as String,
|
||||||
json['network_zone'] as String,
|
json['network_zone'] as String,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
|
@ -42,19 +42,29 @@ class DeleteUserJob extends Job {
|
||||||
List<Object> get props => [id, title, user];
|
List<Object> get props => [id, title, user];
|
||||||
}
|
}
|
||||||
|
|
||||||
class ServiceToggleJob extends Job {
|
class ToggleJob extends Job {
|
||||||
ServiceToggleJob({
|
ToggleJob({
|
||||||
required this.type,
|
required this.type,
|
||||||
required this.needToTurnOn,
|
required String title,
|
||||||
}) : super(
|
}) : super(title: title);
|
||||||
title:
|
|
||||||
'${needToTurnOn ? "jobs.serviceTurnOn".tr() : "jobs.serviceTurnOff".tr()} ${type.title}');
|
|
||||||
|
|
||||||
final ServiceTypes type;
|
final dynamic type;
|
||||||
final bool needToTurnOn;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [id, title, type, needToTurnOn];
|
List<Object> get props => [...super.props, type];
|
||||||
|
}
|
||||||
|
|
||||||
|
class ServiceToggleJob extends ToggleJob {
|
||||||
|
ServiceToggleJob({
|
||||||
|
required ServiceTypes type,
|
||||||
|
required this.needToTurnOn,
|
||||||
|
}) : super(
|
||||||
|
title:
|
||||||
|
'${needToTurnOn ? "jobs.serviceTurnOn".tr() : "jobs.serviceTurnOff".tr()} ${type.title}',
|
||||||
|
type: type,
|
||||||
|
);
|
||||||
|
|
||||||
|
final bool needToTurnOn;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CreateSSHKeyJob extends Job {
|
class CreateSSHKeyJob extends Job {
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'server_configurations.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(createToJson: true)
|
||||||
|
class AutoUpgradeConfigurations extends Equatable {
|
||||||
|
const AutoUpgradeConfigurations({
|
||||||
|
required this.enable,
|
||||||
|
required this.allowReboot,
|
||||||
|
});
|
||||||
|
|
||||||
|
final bool enable;
|
||||||
|
final bool allowReboot;
|
||||||
|
|
||||||
|
factory AutoUpgradeConfigurations.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$AutoUpgradeConfigurationsFromJson(json);
|
||||||
|
Map<String, dynamic> toJson() => _$AutoUpgradeConfigurationsToJson(this);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [enable, allowReboot];
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'server_configurations.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// JsonSerializableGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
AutoUpgradeConfigurations _$AutoUpgradeConfigurationsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
AutoUpgradeConfigurations(
|
||||||
|
enable: json['enable'] as bool,
|
||||||
|
allowReboot: json['allowReboot'] as bool,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$AutoUpgradeConfigurationsToJson(
|
||||||
|
AutoUpgradeConfigurations instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'enable': instance.enable,
|
||||||
|
'allowReboot': instance.allowReboot,
|
||||||
|
};
|
|
@ -0,0 +1,18 @@
|
||||||
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:timezone/timezone.dart';
|
||||||
|
|
||||||
|
class ServerTimezone extends Equatable {
|
||||||
|
final Location timezone;
|
||||||
|
|
||||||
|
const ServerTimezone({required this.timezone});
|
||||||
|
|
||||||
|
factory ServerTimezone.fromJson(Map<String, dynamic> json) {
|
||||||
|
var timezone = getLocation(json['timezone']);
|
||||||
|
return ServerTimezone(timezone: timezone);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => {'timezone': timezone.name};
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [timezone.name];
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import 'package:selfprivacy/ui/pages/onboarding/onboarding.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:selfprivacy/ui/pages/rootRoute.dart';
|
import 'package:selfprivacy/ui/pages/rootRoute.dart';
|
||||||
import 'package:wakelock/wakelock.dart';
|
import 'package:wakelock/wakelock.dart';
|
||||||
|
import 'package:timezone/data/latest.dart' as tz;
|
||||||
|
|
||||||
import 'config/bloc_config.dart';
|
import 'config/bloc_config.dart';
|
||||||
import 'config/bloc_observer.dart';
|
import 'config/bloc_observer.dart';
|
||||||
|
@ -19,12 +20,15 @@ void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
await HiveConfig.init();
|
await HiveConfig.init();
|
||||||
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||||
Bloc.observer = SimpleBlocObserver();
|
|
||||||
Wakelock.enable();
|
Wakelock.enable();
|
||||||
await getItSetup();
|
await getItSetup();
|
||||||
await EasyLocalization.ensureInitialized();
|
await EasyLocalization.ensureInitialized();
|
||||||
|
tz.initializeTimeZones();
|
||||||
|
|
||||||
runApp(MyApp());
|
BlocOverrides.runZoned(
|
||||||
|
() => runApp(Localization(child: MyApp())),
|
||||||
|
blocObserver: SimpleBlocObserver(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import 'package:selfprivacy/config/brand_colors.dart';
|
||||||
import 'package:selfprivacy/config/brand_theme.dart';
|
import 'package:selfprivacy/config/brand_theme.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/jobs/jobs_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/jobs/jobs_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/users/users_cubit.dart';
|
|
||||||
import 'package:selfprivacy/ui/components/action_button/action_button.dart';
|
import 'package:selfprivacy/ui/components/action_button/action_button.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_alert/brand_alert.dart';
|
import 'package:selfprivacy/ui/components/brand_alert/brand_alert.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_button/brand_button.dart';
|
import 'package:selfprivacy/ui/components/brand_button/brand_button.dart';
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import 'package:cubit_form/cubit_form.dart';
|
import 'package:cubit_form/cubit_form.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/rendering.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
||||||
import 'package:selfprivacy/config/brand_theme.dart';
|
import 'package:selfprivacy/config/brand_theme.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/forms/initializing/backblaze_form_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/forms/initializing/backblaze_form_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/forms/initializing/cloudflare_form_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/forms/initializing/cloudflare_form_cubit.dart';
|
||||||
|
@ -9,7 +7,6 @@ import 'package:selfprivacy/logic/cubit/forms/initializing/domain_cloudflare.dar
|
||||||
import 'package:selfprivacy/logic/cubit/forms/initializing/hetzner_form_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/forms/initializing/hetzner_form_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/forms/initializing/root_user_form_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/forms/initializing/root_user_form_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
|
||||||
import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart';
|
import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_button/brand_button.dart';
|
import 'package:selfprivacy/ui/components/brand_button/brand_button.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart';
|
import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart';
|
||||||
|
|
|
@ -3,7 +3,6 @@ import 'dart:collection';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:selfprivacy/config/brand_colors.dart';
|
import 'package:selfprivacy/config/brand_colors.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
import 'package:selfprivacy/logic/get_it/console.dart';
|
|
||||||
import 'package:selfprivacy/logic/models/message.dart';
|
import 'package:selfprivacy/logic/models/message.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_divider/brand_divider.dart';
|
import 'package:selfprivacy/ui/components/brand_divider/brand_divider.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_header/brand_header.dart';
|
import 'package:selfprivacy/ui/components/brand_header/brand_header.dart';
|
||||||
|
|
|
@ -2,10 +2,8 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:selfprivacy/config/brand_theme.dart';
|
import 'package:selfprivacy/config/brand_theme.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/backups/backups_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/backups/backups_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/jobs/jobs_cubit.dart';
|
|
||||||
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/models/provider.dart';
|
import 'package:selfprivacy/logic/models/provider.dart';
|
||||||
import 'package:selfprivacy/logic/models/state_types.dart';
|
|
||||||
import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart';
|
import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart';
|
import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_header/brand_header.dart';
|
import 'package:selfprivacy/ui/components/brand_header/brand_header.dart';
|
||||||
|
|
|
@ -1,122 +1,116 @@
|
||||||
import 'package:flutter/material.dart';
|
// import 'package:flutter/material.dart';
|
||||||
import 'package:selfprivacy/config/brand_colors.dart';
|
// import 'package:selfprivacy/config/brand_colors.dart';
|
||||||
import 'package:selfprivacy/config/brand_theme.dart';
|
// import 'package:selfprivacy/config/brand_theme.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_divider/brand_divider.dart';
|
// import 'package:selfprivacy/ui/components/brand_divider/brand_divider.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_header/brand_header.dart';
|
// import 'package:selfprivacy/ui/components/brand_header/brand_header.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_text/brand_text.dart';
|
// import 'package:selfprivacy/ui/components/brand_text/brand_text.dart';
|
||||||
import 'package:selfprivacy/ui/components/switch_block/switch_bloc.dart';
|
// import 'package:selfprivacy/ui/components/switch_block/switch_bloc.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
// import 'package:easy_localization/easy_localization.dart';
|
||||||
|
// import 'package:selfprivacy/ui/pages/providers/settings/time_zone.dart';
|
||||||
|
// import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
||||||
|
|
||||||
class SettingsPage extends StatelessWidget {
|
// class SettingsPage extends StatelessWidget {
|
||||||
const SettingsPage({Key? key}) : super(key: key);
|
// const SettingsPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
Widget build(BuildContext context) {
|
// Widget build(BuildContext context) {
|
||||||
return ListView(
|
// return ListView(
|
||||||
padding: paddingH15V0,
|
// padding: paddingH15V0,
|
||||||
children: [
|
// children: [
|
||||||
SizedBox(height: 10),
|
// SizedBox(height: 10),
|
||||||
BrandHeader(title: 'basis.settings'.tr(), hasBackButton: true),
|
// BrandHeader(title: 'basis.settings'.tr(), hasBackButton: true),
|
||||||
BrandDivider(),
|
// BrandDivider(),
|
||||||
SwitcherBlock(
|
// SwitcherBlock(
|
||||||
onChange: (_) {},
|
// onChange: (_) {},
|
||||||
child: _TextColumn(
|
// child: _TextColumn(
|
||||||
title: 'Allow Auto-upgrade',
|
// title: 'Allow Auto-upgrade',
|
||||||
value: 'Wether to allow automatic packages upgrades',
|
// value: 'Wether to allow automatic packages upgrades',
|
||||||
),
|
// ),
|
||||||
isActive: true,
|
// isActive: true,
|
||||||
),
|
// ),
|
||||||
SwitcherBlock(
|
// SwitcherBlock(
|
||||||
onChange: (_) {},
|
// onChange: (_) {},
|
||||||
child: _TextColumn(
|
// child: _TextColumn(
|
||||||
title: 'Reboot after upgrade',
|
// title: 'Reboot after upgrade',
|
||||||
value: 'Reboot without prompt after applying updates',
|
// value: 'Reboot without prompt after applying updates',
|
||||||
),
|
// ),
|
||||||
isActive: false,
|
// isActive: false,
|
||||||
),
|
// ),
|
||||||
_Button(
|
// _Button(
|
||||||
onTap: () {},
|
// onTap: () {
|
||||||
child: _TextColumn(
|
// print('aaa');
|
||||||
title: 'Server Timezone',
|
// Navigator.of(context).push(
|
||||||
value: 'Europe/Kyiv',
|
// materialRoute(
|
||||||
),
|
// SelectTimezone(),
|
||||||
),
|
// ),
|
||||||
_Button(
|
// );
|
||||||
onTap: () {},
|
// },
|
||||||
child: _TextColumn(
|
// child: _TextColumn(
|
||||||
title: 'Server Locale',
|
// title: 'Server Timezone',
|
||||||
value: 'Default',
|
// value: 'Europe/Kyssiv',
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
_Button(
|
// ],
|
||||||
onTap: () {},
|
// );
|
||||||
child: _TextColumn(
|
// }
|
||||||
hasWarning: true,
|
// }
|
||||||
title: 'Factory Reset',
|
|
||||||
value: 'Restore default settings on your server',
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class _Button extends StatelessWidget {
|
// class _Button extends StatelessWidget {
|
||||||
const _Button({
|
// const _Button({
|
||||||
Key? key,
|
// Key? key,
|
||||||
required this.onTap,
|
// required this.onTap,
|
||||||
required this.child,
|
// required this.child,
|
||||||
}) : super(key: key);
|
// }) : super(key: key);
|
||||||
|
|
||||||
final Widget child;
|
// final Widget child;
|
||||||
final VoidCallback onTap;
|
// final VoidCallback onTap;
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
Widget build(BuildContext context) {
|
// Widget build(BuildContext context) {
|
||||||
return InkWell(
|
// return InkWell(
|
||||||
onTap: onTap,
|
// onTap: onTap,
|
||||||
child: Container(
|
// child: Container(
|
||||||
padding: EdgeInsets.only(top: 20, bottom: 5),
|
// padding: EdgeInsets.only(top: 20, bottom: 5),
|
||||||
decoration: BoxDecoration(
|
// decoration: BoxDecoration(
|
||||||
border: Border(
|
// border: Border(
|
||||||
bottom: BorderSide(width: 1, color: BrandColors.dividerColor),
|
// bottom: BorderSide(width: 1, color: BrandColors.dividerColor),
|
||||||
)),
|
// )),
|
||||||
child: child,
|
// child: child,
|
||||||
),
|
// ),
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
class _TextColumn extends StatelessWidget {
|
// class _TextColumn extends StatelessWidget {
|
||||||
const _TextColumn({
|
// const _TextColumn({
|
||||||
Key? key,
|
// Key? key,
|
||||||
required this.title,
|
// required this.title,
|
||||||
required this.value,
|
// required this.value,
|
||||||
this.hasWarning = false,
|
// this.hasWarning = false,
|
||||||
}) : super(key: key);
|
// }) : super(key: key);
|
||||||
|
|
||||||
final String title;
|
// final String title;
|
||||||
final String value;
|
// final String value;
|
||||||
final bool hasWarning;
|
// final bool hasWarning;
|
||||||
@override
|
// @override
|
||||||
Widget build(BuildContext context) {
|
// Widget build(BuildContext context) {
|
||||||
return Column(
|
// return Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
// children: [
|
||||||
BrandText.body1(
|
// BrandText.body1(
|
||||||
title,
|
// title,
|
||||||
style: TextStyle(color: hasWarning ? BrandColors.warning : null),
|
// style: TextStyle(color: hasWarning ? BrandColors.warning : null),
|
||||||
),
|
// ),
|
||||||
SizedBox(height: 5),
|
// SizedBox(height: 5),
|
||||||
BrandText.body1(
|
// BrandText.body1(
|
||||||
value,
|
// value,
|
||||||
style: TextStyle(
|
// style: TextStyle(
|
||||||
fontSize: 13,
|
// fontSize: 13,
|
||||||
height: 1.53,
|
// height: 1.53,
|
||||||
color: hasWarning ? BrandColors.warning : BrandColors.gray1,
|
// color: hasWarning ? BrandColors.warning : BrandColors.gray1,
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
],
|
// ],
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_tab_bar/brand_tab_bar.dart';
|
import 'package:selfprivacy/ui/components/brand_tab_bar/brand_tab_bar.dart';
|
||||||
|
|
|
@ -8,6 +8,7 @@ import 'package:selfprivacy/logic/cubit/hetzner_metrics/hetzner_metrics_cubit.da
|
||||||
import 'package:selfprivacy/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/models/state_types.dart';
|
import 'package:selfprivacy/logic/models/state_types.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_divider/brand_divider.dart';
|
import 'package:selfprivacy/ui/components/brand_divider/brand_divider.dart';
|
||||||
|
import 'package:selfprivacy/ui/components/brand_header/brand_header.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_icons/brand_icons.dart';
|
import 'package:selfprivacy/ui/components/brand_icons/brand_icons.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_radio_tile/brand_radio_tile.dart';
|
import 'package:selfprivacy/ui/components/brand_radio_tile/brand_radio_tile.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_text/brand_text.dart';
|
import 'package:selfprivacy/ui/components/brand_text/brand_text.dart';
|
||||||
|
@ -15,13 +16,17 @@ import 'package:selfprivacy/ui/components/icon_status_mask/icon_status_mask.dart
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:selfprivacy/ui/components/switch_block/switch_bloc.dart';
|
import 'package:selfprivacy/ui/components/switch_block/switch_bloc.dart';
|
||||||
import 'package:selfprivacy/utils/named_font_weight.dart';
|
import 'package:selfprivacy/utils/named_font_weight.dart';
|
||||||
|
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
||||||
|
import 'package:timezone/timezone.dart';
|
||||||
import 'cpu_chart.dart';
|
import 'cpu_chart.dart';
|
||||||
import 'network_charts.dart';
|
import 'network_charts.dart';
|
||||||
|
import 'package:selfprivacy/utils/extensions/duration.dart';
|
||||||
|
|
||||||
part 'server_settings.dart';
|
part 'server_settings.dart';
|
||||||
part 'text_details.dart';
|
part 'text_details.dart';
|
||||||
part 'chart.dart';
|
part 'chart.dart';
|
||||||
part 'header.dart';
|
part 'header.dart';
|
||||||
|
part 'time_zone.dart';
|
||||||
|
|
||||||
var navigatorKey = GlobalKey<NavigatorState>();
|
var navigatorKey = GlobalKey<NavigatorState>();
|
||||||
|
|
||||||
|
|
|
@ -49,27 +49,14 @@ class _ServerSettings extends StatelessWidget {
|
||||||
isActive: false,
|
isActive: false,
|
||||||
),
|
),
|
||||||
_Button(
|
_Button(
|
||||||
onTap: () {},
|
onTap: () {
|
||||||
|
Navigator.of(context).push(materialRoute(SelectTimezone()));
|
||||||
|
},
|
||||||
child: _TextColumn(
|
child: _TextColumn(
|
||||||
title: 'Server Timezone',
|
title: 'Server Timezone',
|
||||||
value: 'Europe/Kyiv',
|
value: 'Europe/Kyiv',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
_Button(
|
|
||||||
onTap: () {},
|
|
||||||
child: _TextColumn(
|
|
||||||
title: 'Server Locale',
|
|
||||||
value: 'Default',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
_Button(
|
|
||||||
onTap: () {},
|
|
||||||
child: _TextColumn(
|
|
||||||
hasWarning: true,
|
|
||||||
title: 'Factory Reset',
|
|
||||||
value: 'Restore default settings on your server',
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
part of 'server_details.dart';
|
||||||
|
|
||||||
|
final List<Location> locations = timeZoneDatabase.locations.values.toList()
|
||||||
|
..sort((l1, l2) =>
|
||||||
|
l1.currentTimeZone.offset.compareTo(l2.currentTimeZone.offset));
|
||||||
|
|
||||||
|
class SelectTimezone extends StatefulWidget {
|
||||||
|
SelectTimezone({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_SelectTimezoneState createState() => _SelectTimezoneState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _SelectTimezoneState extends State<SelectTimezone> {
|
||||||
|
final ScrollController controller = ScrollController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
WidgetsBinding.instance!.addPostFrameCallback(_afterLayout);
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _afterLayout(_) {
|
||||||
|
var t = DateTime.now().timeZoneOffset;
|
||||||
|
var index = locations.indexWhere((element) =>
|
||||||
|
Duration(milliseconds: element.currentTimeZone.offset) == t);
|
||||||
|
if (index >= 0) {
|
||||||
|
controller.animateTo(40.0 * index,
|
||||||
|
duration: Duration(milliseconds: 300), curve: Curves.easeIn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
controller.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: PreferredSize(
|
||||||
|
child: BrandHeader(
|
||||||
|
title: 'select timezone',
|
||||||
|
hasBackButton: true,
|
||||||
|
),
|
||||||
|
preferredSize: Size.fromHeight(52),
|
||||||
|
),
|
||||||
|
body: ListView(
|
||||||
|
controller: controller,
|
||||||
|
children: locations
|
||||||
|
.asMap()
|
||||||
|
.map((key, value) {
|
||||||
|
var duration =
|
||||||
|
Duration(milliseconds: value.currentTimeZone.offset);
|
||||||
|
var area = value.currentTimeZone.abbreviation
|
||||||
|
.replaceAll(RegExp(r'[\d+()-]'), '');
|
||||||
|
return MapEntry(
|
||||||
|
key,
|
||||||
|
Container(
|
||||||
|
height: 40,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: Text(
|
||||||
|
'${duration.toDayHourMinuteFormat()} ${area.isNotEmpty ? '($area)' : ''}'),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
flex: 2,
|
||||||
|
child: Text(value.name),
|
||||||
|
),
|
||||||
|
// Text(value.toString()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
color: BrandColors.dividerColor,
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.values
|
||||||
|
.toList(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
// ignore_for_file: unnecessary_this
|
||||||
|
|
||||||
|
extension DurationFormatter on Duration {
|
||||||
|
String toDayHourMinuteSecondFormat() {
|
||||||
|
return [
|
||||||
|
this.inHours.remainder(24),
|
||||||
|
this.inMinutes.remainder(60),
|
||||||
|
this.inSeconds.remainder(60)
|
||||||
|
].map((seg) {
|
||||||
|
return seg.toString().padLeft(2, '0');
|
||||||
|
}).join(':');
|
||||||
|
}
|
||||||
|
|
||||||
|
String toDayHourMinuteFormat() {
|
||||||
|
var designator = this >= Duration.zero ? '+' : '-';
|
||||||
|
|
||||||
|
var segments = [
|
||||||
|
this.inHours.remainder(24).abs(),
|
||||||
|
this.inMinutes.remainder(60).abs(),
|
||||||
|
].map((seg) {
|
||||||
|
return seg.toString().padLeft(2, '0');
|
||||||
|
});
|
||||||
|
|
||||||
|
return '$designator${segments.first}:${segments.last}';
|
||||||
|
}
|
||||||
|
|
||||||
|
String toHoursMinutesSecondsFormat() {
|
||||||
|
// WAT: https://flutterigniter.com/how-to-format-duration/
|
||||||
|
return this.toString().split('.').first.padLeft(8, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
String toDayHourMinuteFormat2() {
|
||||||
|
var segments = [
|
||||||
|
this.inHours.remainder(24),
|
||||||
|
this.inMinutes.remainder(60),
|
||||||
|
].map((seg) {
|
||||||
|
return seg.toString().padLeft(2, '0');
|
||||||
|
});
|
||||||
|
return segments.first + " h" + " " + segments.last + " min";
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,3 @@
|
||||||
import 'dart:ui';
|
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
|
||||||
extension TextExtension on Text {
|
extension TextExtension on Text {
|
||||||
|
|
79
pubspec.lock
79
pubspec.lock
|
@ -7,14 +7,14 @@ packages:
|
||||||
name: _fe_analyzer_shared
|
name: _fe_analyzer_shared
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "22.0.0"
|
version: "31.0.0"
|
||||||
analyzer:
|
analyzer:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: analyzer
|
name: analyzer
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.7.2"
|
version: "2.8.0"
|
||||||
archive:
|
archive:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -28,7 +28,7 @@ packages:
|
||||||
name: args
|
name: args
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
version: "2.0.0"
|
||||||
asn1lib:
|
asn1lib:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -42,7 +42,7 @@ packages:
|
||||||
name: async
|
name: async
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.8.1"
|
version: "2.8.2"
|
||||||
auto_size_text:
|
auto_size_text:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -56,14 +56,14 @@ packages:
|
||||||
name: basic_utils
|
name: basic_utils
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.5.0"
|
version: "3.4.0"
|
||||||
bloc:
|
bloc:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: bloc
|
name: bloc
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.2.1"
|
version: "8.0.2"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -105,14 +105,14 @@ packages:
|
||||||
name: build_runner
|
name: build_runner
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.5"
|
||||||
build_runner_core:
|
build_runner_core:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: build_runner_core
|
name: build_runner_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.1.0"
|
version: "7.2.3"
|
||||||
built_collection:
|
built_collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -133,7 +133,7 @@ packages:
|
||||||
name: characters
|
name: characters
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.2.0"
|
||||||
charcode:
|
charcode:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -210,14 +210,14 @@ packages:
|
||||||
name: cubit_form
|
name: cubit_form
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.18"
|
version: "2.0.1"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.3"
|
version: "1.0.2"
|
||||||
dart_style:
|
dart_style:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -231,7 +231,7 @@ packages:
|
||||||
name: dio
|
name: dio
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.0"
|
version: "4.0.1"
|
||||||
easy_localization:
|
easy_localization:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -267,13 +267,6 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
version: "2.0.3"
|
||||||
extended_masked_text:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: extended_masked_text
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.3.1"
|
|
||||||
fake_async:
|
fake_async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -320,14 +313,14 @@ packages:
|
||||||
name: flutter_bloc
|
name: flutter_bloc
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.3.3"
|
version: "8.0.1"
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: flutter_launcher_icons
|
name: flutter_launcher_icons
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.9.2"
|
version: "0.9.0"
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -339,7 +332,7 @@ packages:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.5"
|
version: "0.6.9"
|
||||||
flutter_plugin_android_lifecycle:
|
flutter_plugin_android_lifecycle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -398,7 +391,7 @@ packages:
|
||||||
name: hive
|
name: hive
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.4"
|
version: "2.0.5"
|
||||||
hive_flutter:
|
hive_flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -412,7 +405,7 @@ packages:
|
||||||
name: hive_generator
|
name: hive_generator
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.1"
|
||||||
http:
|
http:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -475,14 +468,14 @@ packages:
|
||||||
name: json_annotation
|
name: json_annotation
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.1"
|
version: "4.3.0"
|
||||||
json_serializable:
|
json_serializable:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: json_serializable
|
name: json_serializable
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.4"
|
version: "6.0.1"
|
||||||
local_auth:
|
local_auth:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -504,13 +497,20 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.0"
|
version: "4.0.0"
|
||||||
|
mask_text_input_formatter:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: mask_text_input_formatter
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: matcher
|
name: matcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.10"
|
version: "0.12.11"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -566,7 +566,7 @@ packages:
|
||||||
name: package_info
|
name: package_info
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.2"
|
version: "2.0.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -830,7 +830,7 @@ packages:
|
||||||
name: source_helper
|
name: source_helper
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.3.1"
|
||||||
source_map_stack_trace:
|
source_map_stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -900,21 +900,28 @@ packages:
|
||||||
name: test
|
name: test
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.17.10"
|
version: "1.17.12"
|
||||||
test_api:
|
test_api:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.2"
|
version: "0.4.3"
|
||||||
test_core:
|
test_core:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_core
|
name: test_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.0"
|
version: "0.4.2"
|
||||||
|
timezone:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: timezone
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.8.0"
|
||||||
timing:
|
timing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -942,7 +949,7 @@ packages:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.9"
|
version: "6.0.2"
|
||||||
url_launcher_linux:
|
url_launcher_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -984,7 +991,7 @@ packages:
|
||||||
name: vector_math
|
name: vector_math
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.1"
|
||||||
vm_service:
|
vm_service:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -998,7 +1005,7 @@ packages:
|
||||||
name: wakelock
|
name: wakelock
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.3+3"
|
version: "0.5.0+2"
|
||||||
wakelock_macos:
|
wakelock_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1077,5 +1084,5 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.1.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.13.4 <3.0.0"
|
dart: ">=2.14.0 <3.0.0"
|
||||||
flutter: ">=2.5.0"
|
flutter: ">=2.5.0"
|
||||||
|
|
69
pubspec.yaml
69
pubspec.yaml
|
@ -8,46 +8,47 @@ environment:
|
||||||
flutter: ">=2.5.0"
|
flutter: ">=2.5.0"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
|
auto_size_text: 3.0.0-nullsafety.0
|
||||||
|
basic_utils: 3.4.0
|
||||||
|
crypt: 4.0.1
|
||||||
|
cubit_form: 2.0.1
|
||||||
|
cupertino_icons: 1.0.2
|
||||||
|
dio: 4.0.1
|
||||||
|
easy_localization: 3.0.0
|
||||||
|
either_option: 2.0.1-dev.1
|
||||||
|
equatable: 2.0.3
|
||||||
|
fl_chart: 0.40.0
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
crypt: ^4.0.1
|
flutter_bloc: 8.0.1
|
||||||
cubit_form: ^1.0.0-nullsafety.0
|
flutter_markdown: 0.6.9
|
||||||
cupertino_icons: ^1.0.2
|
flutter_secure_storage: 4.2.1
|
||||||
dio: ^4.0.0-beta7
|
get_it: 7.2.0
|
||||||
easy_localization: ^3.0.0
|
hive: 2.0.5
|
||||||
either_option: ^2.0.1-dev.1
|
hive_flutter: 1.1.0
|
||||||
equatable: ^2.0.3
|
ionicons: 0.1.2
|
||||||
fl_chart: ^0.40.0
|
json_annotation: 4.3.0
|
||||||
flutter_bloc: ^7.3.3
|
local_auth: 1.1.7
|
||||||
flutter_markdown: ^0.6.0
|
modal_bottom_sheet: 2.0.0
|
||||||
flutter_secure_storage: ^4.1.0
|
nanoid: 1.0.0
|
||||||
get_it: ^7.2.0
|
package_info: 2.0.0
|
||||||
hive: ^2.0.0
|
pointycastle: 3.3.2
|
||||||
hive_flutter: ^1.0.0
|
pretty_dio_logger: 1.2.0-beta-1
|
||||||
json_annotation: ^4.0.0
|
provider: 6.0.0
|
||||||
modal_bottom_sheet: ^2.0.0
|
rsa_encrypt: 2.0.0
|
||||||
nanoid: ^1.0.0
|
share_plus: 2.1.4
|
||||||
package_info: ^2.0.0
|
ssh_key: 0.7.0
|
||||||
pretty_dio_logger: ^1.1.1
|
timezone: ^0.8.0
|
||||||
provider: ^6.0.0
|
url_launcher: 6.0.2
|
||||||
share_plus: ^2.1.4
|
wakelock: 0.5.0+2
|
||||||
url_launcher: ^6.0.2
|
|
||||||
wakelock: ^0.5.0+2
|
|
||||||
basic_utils: ^3.4.0
|
|
||||||
ionicons: ^0.1.2
|
|
||||||
pointycastle: ^3.3.2
|
|
||||||
rsa_encrypt: ^2.0.0
|
|
||||||
ssh_key: ^0.7.0
|
|
||||||
local_auth: ^1.1.7
|
|
||||||
auto_size_text: ^3.0.0-nullsafety.0
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
build_runner: 2.1.5
|
||||||
|
flutter_launcher_icons: 0.9.0
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
build_runner: ^2.1.1
|
hive_generator: 1.1.1
|
||||||
flutter_launcher_icons: ^0.9.0
|
json_serializable: 6.0.1
|
||||||
hive_generator: ^1.0.0
|
|
||||||
json_serializable: ^4.0.2
|
|
||||||
|
|
||||||
flutter_icons:
|
flutter_icons:
|
||||||
android: "launcher_icon"
|
android: "launcher_icon"
|
||||||
|
|
Loading…
Reference in New Issue