Co-authored-by: Inex Code <inex.code@selfprivacy.org>
pull/90/head
NaiJi ✨ 2022-05-25 15:21:56 +03:00
parent 14acfdec6b
commit 5dcaa060a1
32 changed files with 93 additions and 61 deletions

View File

@ -9,6 +9,10 @@
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
analyzer:
exclude:
- lib/generated_plugin_registrant.dart
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`

View File

@ -6,10 +6,10 @@ abstract class LengthStringValidation extends ValidationModel<String> {
: super(predicate, errorMessage);
@override
String? check(String value) {
var length = value.length;
String? check(String val) {
var length = val.length;
var errorMessage = errorMassage.replaceAll('[]', length.toString());
return test(value) ? errorMessage : null;
return test(val) ? errorMessage : null;
}
}

View File

@ -7,7 +7,7 @@ import 'package:selfprivacy/config/hive_config.dart';
import 'package:selfprivacy/theming/factory/app_theme_factory.dart';
import 'package:selfprivacy/ui/pages/setup/initializing.dart';
import 'package:selfprivacy/ui/pages/onboarding/onboarding.dart';
import 'package:selfprivacy/ui/pages/rootRoute.dart';
import 'package:selfprivacy/ui/pages/root_route.dart';
import 'package:wakelock/wakelock.dart';
import 'package:timezone/data/latest.dart' as tz;
@ -55,9 +55,10 @@ void main() async {
class MyApp extends StatelessWidget {
const MyApp({
Key? key,
required this.lightThemeData,
required this.darkThemeData,
});
}) : super(key: key);
final ThemeData lightThemeData;
final ThemeData darkThemeData;
@ -84,7 +85,7 @@ class MyApp extends StatelessWidget {
themeMode:
appSettings.isDarkModeOn ? ThemeMode.dark : ThemeMode.light,
home: appSettings.isOnboardingShowing
? OnboardingPage(nextPage: InitializingPage())
? const OnboardingPage(nextPage: InitializingPage())
: const RootPage(),
builder: (BuildContext context, Widget? widget) {
Widget error = const Text('...rendering error...');

View File

@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:selfprivacy/ui/components/brand_button/FilledButton.dart';
import 'package:selfprivacy/ui/components/brand_button/filled_button.dart';
import 'package:selfprivacy/ui/components/brand_text/brand_text.dart';
enum BrandButtonTypes { rised, text, iconText }

View File

@ -15,7 +15,7 @@ class BrandMarkdown extends StatefulWidget {
final String fileName;
@override
_BrandMarkdownState createState() => _BrandMarkdownState();
State<BrandMarkdown> createState() => _BrandMarkdownState();
}
class _BrandMarkdownState extends State<BrandMarkdown> {

View File

@ -7,7 +7,7 @@ class BrandTabBar extends StatefulWidget {
final TabController? controller;
@override
_BrandTabBarState createState() => _BrandTabBarState();
State<BrandTabBar> createState() => _BrandTabBarState();
}
class _BrandTabBarState extends State<BrandTabBar> {

View File

@ -16,7 +16,7 @@ class BrandTimer extends StatefulWidget {
final Duration duration;
@override
_BrandTimerState createState() => _BrandTimerState();
State<BrandTimer> createState() => _BrandTimerState();
}
class _BrandTimerState extends State<BrandTimer> {

View File

@ -3,7 +3,11 @@ import 'package:selfprivacy/config/brand_colors.dart';
import 'package:selfprivacy/logic/models/state_types.dart';
class IconStatusMask extends StatelessWidget {
const IconStatusMask({required this.child, required this.status});
const IconStatusMask({
Key? key,
required this.child,
required this.status,
}) : super(key: key);
final Icon child;
final StateType status;

View File

@ -27,7 +27,7 @@ class NotReadyCard extends StatelessWidget {
child: GestureDetector(
onTap: () => Navigator.of(context).push(
materialRoute(
InitializingPage(),
const InitializingPage(),
),
),
child: Text(

View File

@ -11,7 +11,7 @@ class BrandFab extends StatefulWidget {
const BrandFab({Key? key}) : super(key: key);
@override
_BrandFabState createState() => _BrandFabState();
State<BrandFab> createState() => _BrandFabState();
}
class _BrandFabState extends State<BrandFab>

View File

@ -17,7 +17,7 @@ class ProgressBar extends StatefulWidget {
final List<String> steps;
@override
_ProgressBarState createState() => _ProgressBarState();
State<ProgressBar> createState() => _ProgressBarState();
}
class _ProgressBarState extends State<ProgressBar> {

View File

@ -21,7 +21,7 @@ class BackupDetails extends StatefulWidget {
const BackupDetails({Key? key}) : super(key: key);
@override
_BackupDetailsState createState() => _BackupDetailsState();
State<BackupDetails> createState() => _BackupDetailsState();
}
class _BackupDetailsState extends State<BackupDetails>

View File

@ -8,8 +8,10 @@ import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.da
import 'package:selfprivacy/ui/components/brand_icons/brand_icons.dart';
class DnsDetailsPage extends StatefulWidget {
const DnsDetailsPage({Key? key}) : super(key: key);
@override
_DnsDetailsPageState createState() => _DnsDetailsPageState();
State<DnsDetailsPage> createState() => _DnsDetailsPageState();
}
class _DnsDetailsPageState extends State<DnsDetailsPage> {

View File

@ -16,7 +16,7 @@ class AppSettingsPage extends StatefulWidget {
const AppSettingsPage({Key? key}) : super(key: key);
@override
_AppSettingsPageState createState() => _AppSettingsPageState();
State<AppSettingsPage> createState() => _AppSettingsPageState();
}
class _AppSettingsPageState extends State<AppSettingsPage> {
@ -50,6 +50,7 @@ class _AppSettingsPageState extends State<AppSettingsPage> {
child: _TextColumn(
title: 'more.settings.1'.tr(),
value: 'more.settings.2'.tr(),
hasWarning: false,
),
),
const SizedBox(width: 5),
@ -76,6 +77,7 @@ class _AppSettingsPageState extends State<AppSettingsPage> {
child: _TextColumn(
title: 'more.settings.3'.tr(),
value: 'more.settings.4'.tr(),
hasWarning: false,
),
),
const SizedBox(width: 5),
@ -144,6 +146,7 @@ class _AppSettingsPageState extends State<AppSettingsPage> {
child: _TextColumn(
title: 'more.settings.5'.tr(),
value: 'more.settings.6'.tr(),
hasWarning: false,
),
),
const SizedBox(width: 5),
@ -177,6 +180,7 @@ class _AppSettingsPageState extends State<AppSettingsPage> {
await context
.read<ServerInstallationCubit>()
.serverDelete();
if (!mounted) return;
Navigator.of(context).pop();
}),
ActionButton(

View File

@ -11,7 +11,7 @@ class Console extends StatefulWidget {
const Console({Key? key}) : super(key: key);
@override
_ConsoleState createState() => _ConsoleState();
State<Console> createState() => _ConsoleState();
}
class _ConsoleState extends State<Console> {

View File

@ -10,7 +10,7 @@ import 'package:selfprivacy/ui/components/brand_icons/brand_icons.dart';
import 'package:selfprivacy/ui/components/brand_text/brand_text.dart';
import 'package:selfprivacy/ui/pages/setup/initializing.dart';
import 'package:selfprivacy/ui/pages/onboarding/onboarding.dart';
import 'package:selfprivacy/ui/pages/rootRoute.dart';
import 'package:selfprivacy/ui/pages/root_route.dart';
import 'package:selfprivacy/ui/pages/ssh_keys/ssh_keys.dart';
import 'package:selfprivacy/utils/route_transitions/basic.dart';
@ -43,7 +43,7 @@ class MorePage extends StatelessWidget {
_NavItem(
title: 'more.configuration_wizard'.tr(),
iconData: BrandIcons.triangle,
goTo: InitializingPage(),
goTo: const InitializingPage(),
),
_NavItem(
title: 'more.settings.title'.tr(),

View File

@ -10,7 +10,7 @@ class OnboardingPage extends StatefulWidget {
final Widget nextPage;
@override
_OnboardingPageState createState() => _OnboardingPageState();
State<OnboardingPage> createState() => _OnboardingPageState();
}
class _OnboardingPageState extends State<OnboardingPage> {

View File

@ -24,7 +24,7 @@ class ProvidersPage extends StatefulWidget {
const ProvidersPage({Key? key}) : super(key: key);
@override
_ProvidersPageState createState() => _ProvidersPageState();
State<ProvidersPage> createState() => _ProvidersPageState();
}
class _ProvidersPageState extends State<ProvidersPage> {
@ -124,7 +124,7 @@ class _Card extends StatelessWidget {
stableText = 'providers.domain.status'.tr();
onTap = () => Navigator.of(context).push(materialRoute(
DnsDetailsPage(),
const DnsDetailsPage(),
));
break;
case ProviderType.backup:

View File

@ -13,7 +13,7 @@ class RootPage extends StatefulWidget {
const RootPage({Key? key}) : super(key: key);
@override
_RootPageState createState() => _RootPageState();
State<RootPage> createState() => _RootPageState();
}
class _RootPageState extends State<RootPage>

View File

@ -90,7 +90,11 @@ class _Chart extends StatelessWidget {
return SizedBox(
height: 200,
child: CpuChart(data, state.period, state.start),
child: CpuChart(
data: data,
period: state.period,
start: state.start,
),
);
}
@ -101,9 +105,9 @@ class _Chart extends StatelessWidget {
return SizedBox(
height: 200,
child: NetworkChart(
[ppsIn, ppsOut],
state.period,
state.start,
listData: [ppsIn, ppsOut],
period: state.period,
start: state.start,
),
);
}
@ -115,9 +119,9 @@ class _Chart extends StatelessWidget {
return SizedBox(
height: 200,
child: NetworkChart(
[ppsIn, ppsOut],
state.period,
state.start,
listData: [ppsIn, ppsOut],
period: state.period,
start: state.start,
),
);
}

View File

@ -7,7 +7,12 @@ import 'package:selfprivacy/logic/models/hetzner_metrics.dart';
import 'package:intl/intl.dart';
class CpuChart extends StatelessWidget {
const CpuChart(this.data, this.period, this.start);
const CpuChart({
Key? key,
required this.data,
required this.period,
required this.start,
}) : super(key: key);
final List<TimeSeriesData> data;
final Period period;
@ -103,8 +108,8 @@ class CpuChart extends StatelessWidget {
} else if (value == 0) {
return true;
}
var _value = value - minValue;
var v = _value / 20;
var localValue = value - minValue;
var v = localValue / 20;
return v - v.floor() == 0;
}

View File

@ -9,11 +9,12 @@ import 'package:selfprivacy/logic/models/hetzner_metrics.dart';
import 'package:intl/intl.dart';
class NetworkChart extends StatelessWidget {
const NetworkChart(
this.listData,
this.period,
this.start,
);
const NetworkChart({
Key? key,
required this.listData,
required this.period,
required this.start,
}) : super(key: key);
final List<List<TimeSeriesData>> listData;
final Period period;
@ -132,9 +133,9 @@ class NetworkChart extends StatelessWidget {
} else if (value == 0) {
return true;
}
var _value = value - minValue;
var v = _value / 20;
return v - v.floor() == 0;
var diff = value - minValue;
var finalValue = diff / 20;
return finalValue - finalValue.floor() == 0;
}
String bottomTitle(int value) {

View File

@ -37,7 +37,7 @@ class ServerDetailsScreen extends StatefulWidget {
const ServerDetailsScreen({Key? key}) : super(key: key);
@override
_ServerDetailsScreenState createState() => _ServerDetailsScreenState();
State<ServerDetailsScreen> createState() => _ServerDetailsScreenState();
}
class _ServerDetailsScreenState extends State<ServerDetailsScreen>

View File

@ -42,6 +42,7 @@ class _ServerSettings extends StatelessWidget {
child: const _TextColumn(
title: 'Allow Auto-upgrade',
value: 'Wether to allow automatic packages upgrades',
hasWarning: false,
),
),
SwitcherBlock(
@ -50,15 +51,17 @@ class _ServerSettings extends StatelessWidget {
child: const _TextColumn(
title: 'Reboot after upgrade',
value: 'Reboot without prompt after applying updates',
hasWarning: false,
),
),
_Button(
onTap: () {
Navigator.of(context).push(materialRoute(SelectTimezone()));
Navigator.of(context).push(materialRoute(const SelectTimezone()));
},
child: _TextColumn(
title: 'Server Timezone',
value: serverDetailsState.serverTimezone.timezone.name,
hasWarning: false,
),
),
],

View File

@ -8,7 +8,7 @@ class SelectTimezone extends StatefulWidget {
const SelectTimezone({Key? key}) : super(key: key);
@override
_SelectTimezoneState createState() => _SelectTimezoneState();
State<SelectTimezone> createState() => _SelectTimezoneState();
}
class _SelectTimezoneState extends State<SelectTimezone> {

View File

@ -35,13 +35,13 @@ class ServicesPage extends StatefulWidget {
const ServicesPage({Key? key}) : super(key: key);
@override
_ServicesPageState createState() => _ServicesPageState();
State<ServicesPage> createState() => _ServicesPageState();
}
void _launchURL(url) async {
var _possible = await canLaunchUrlString(url);
var canLaunch = await canLaunchUrlString(url);
if (_possible) {
if (canLaunch) {
try {
await launchUrlString(
url,

View File

@ -21,6 +21,8 @@ import 'package:selfprivacy/ui/pages/setup/recovering/recovery_routing.dart';
import 'package:selfprivacy/utils/route_transitions/basic.dart';
class InitializingPage extends StatelessWidget {
const InitializingPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
var cubit = context.watch<ServerInstallationCubit>();

View File

@ -10,7 +10,9 @@ import 'package:selfprivacy/logic/cubit/forms/factories/field_cubit_factory.dart
class RecoverByOldTokenInstruction extends StatelessWidget {
@override
const RecoverByOldTokenInstruction({required this.instructionFilename});
const RecoverByOldTokenInstruction(
{Key? key, required this.instructionFilename})
: super(key: key);
@override
Widget build(BuildContext context) {

View File

@ -11,7 +11,7 @@ class RecoveryConfirmServer extends StatefulWidget {
const RecoveryConfirmServer({Key? key}) : super(key: key);
@override
_RecoveryConfirmServerState createState() => _RecoveryConfirmServerState();
State<RecoveryConfirmServer> createState() => _RecoveryConfirmServerState();
}
class _RecoveryConfirmServerState extends State<RecoveryConfirmServer> {
@ -57,11 +57,11 @@ class _RecoveryConfirmServerState extends State<RecoveryConfirmServer> {
children: [
if (servers.length == 1 ||
(!_isExtended && _isServerFound(servers)))
_ConfirmServer(context, _firstValidServer(servers),
confirmServer(context, _firstValidServer(servers),
servers.length > 1),
if (servers.length > 1 &&
(_isExtended || !_isServerFound(servers)))
_ChooseServer(context, servers),
chooseServer(context, servers),
],
),
if (servers?.isEmpty ?? true)
@ -84,14 +84,14 @@ class _RecoveryConfirmServerState extends State<RecoveryConfirmServer> {
);
}
Widget _ConfirmServer(
Widget confirmServer(
BuildContext context,
ServerBasicInfoWithValidators server,
bool showMoreServersButton,
) {
return Column(
children: [
_ServerCard(
serverCard(
context: context,
server: server,
),
@ -110,14 +110,14 @@ class _RecoveryConfirmServerState extends State<RecoveryConfirmServer> {
);
}
Widget _ChooseServer(
Widget chooseServer(
BuildContext context, List<ServerBasicInfoWithValidators> servers) {
return Column(
children: [
for (final server in servers)
Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: _ServerCard(
child: serverCard(
context: context,
server: server,
onTap: () => _showConfirmationDialog(context, server),
@ -127,7 +127,7 @@ class _RecoveryConfirmServerState extends State<RecoveryConfirmServer> {
);
}
Widget _ServerCard(
Widget serverCard(
{required BuildContext context,
required ServerBasicInfoWithValidators server,
VoidCallback? onTap}) {

View File

@ -47,7 +47,7 @@ class RecoveryMethodSelect extends StatelessWidget {
BrandButton.text(
title: 'recovering.method_select_nothing'.tr(),
onPressed: () => Navigator.of(context)
.push(materialRoute(RecoveryFallbackMethodSelect())),
.push(materialRoute(const RecoveryFallbackMethodSelect())),
)
],
);

View File

@ -36,10 +36,10 @@ class RecoveryRouting extends StatelessWidget {
currentPage = const RecoverByRecoveryKey();
break;
case RecoveryStep.newDeviceKey:
currentPage = RecoverByNewDeviceKeyInstruction();
currentPage = const RecoverByNewDeviceKeyInstruction();
break;
case RecoveryStep.oldToken:
currentPage = RecoverByOldToken();
currentPage = const RecoverByOldToken();
break;
case RecoveryStep.hetznerToken:
currentPage = const RecoveryHetznerConnected();

View File

@ -24,7 +24,7 @@ class SshKeysPage extends StatefulWidget {
const SshKeysPage({Key? key, required this.user}) : super(key: key);
@override
_SshKeysPageState createState() => _SshKeysPageState();
State<SshKeysPage> createState() => _SshKeysPageState();
}
class _SshKeysPageState extends State<SshKeysPage> {