add certificate tile
This commit is contained in:
+4
-2
@@ -16,6 +16,7 @@ import 'package:weblibre/features/geckoview/domain/providers/tab_session.dart';
|
|||||||
import 'package:weblibre/features/geckoview/domain/repositories/tab.dart';
|
import 'package:weblibre/features/geckoview/domain/repositories/tab.dart';
|
||||||
import 'package:weblibre/features/geckoview/features/browser/presentation/dialogs/qr_code.dart';
|
import 'package:weblibre/features/geckoview/features/browser/presentation/dialogs/qr_code.dart';
|
||||||
import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/browser_modules/address_with_suggestions_field.dart';
|
import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/browser_modules/address_with_suggestions_field.dart';
|
||||||
|
import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/certificate_tile.dart';
|
||||||
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/container.dart';
|
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/container.dart';
|
||||||
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/tab.dart';
|
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/tab.dart';
|
||||||
import 'package:weblibre/features/user/domain/providers.dart';
|
import 'package:weblibre/features/user/domain/providers.dart';
|
||||||
@@ -56,6 +57,8 @@ class WebPageDialog extends HookConsumerWidget {
|
|||||||
padding: const EdgeInsets.fromLTRB(16.0, 12.0, 16.0, 0.0),
|
padding: const EdgeInsets.fromLTRB(16.0, 12.0, 16.0, 0.0),
|
||||||
child: WebsiteTitleTile(url, precachedInfo: precachedInfo),
|
child: WebsiteTitleTile(url, precachedInfo: precachedInfo),
|
||||||
),
|
),
|
||||||
|
CertificateTile(),
|
||||||
|
const Divider(),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
//We need this to stretch the dialog, then padding from dialog is applied
|
//We need this to stretch the dialog, then padding from dialog is applied
|
||||||
width: double.maxFinite,
|
width: double.maxFinite,
|
||||||
@@ -67,8 +70,7 @@ class WebPageDialog extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 4),
|
const SizedBox(height: 8),
|
||||||
const Divider(),
|
|
||||||
Flexible(
|
Flexible(
|
||||||
child: FadingScroll(
|
child: FadingScroll(
|
||||||
fadingSize: 25,
|
fadingSize: 25,
|
||||||
|
|||||||
+60
@@ -0,0 +1,60 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
|
||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:skeletonizer/skeletonizer.dart';
|
||||||
|
import 'package:weblibre/features/geckoview/domain/providers/tab_state.dart';
|
||||||
|
|
||||||
|
class CertificateTile extends HookConsumerWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final tabState = ref.watch(selectedTabStateProvider);
|
||||||
|
|
||||||
|
if (tabState == null) {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
|
||||||
|
final icon = useMemoized(() {
|
||||||
|
if (tabState.url.isScheme('http')) {
|
||||||
|
return ListTile(
|
||||||
|
leading: Icon(
|
||||||
|
MdiIcons.lockOff,
|
||||||
|
color: Theme.of(context).colorScheme.error,
|
||||||
|
),
|
||||||
|
title: Text(
|
||||||
|
'Connection is not secure',
|
||||||
|
style: TextStyle(color: Theme.of(context).colorScheme.error),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else if (!tabState.securityInfoState.secure) {
|
||||||
|
return ListTile(
|
||||||
|
leading: Icon(
|
||||||
|
MdiIcons.lockAlert,
|
||||||
|
color: Theme.of(context).colorScheme.errorContainer,
|
||||||
|
),
|
||||||
|
title: Text(
|
||||||
|
'Connection is not secure',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Theme.of(context).colorScheme.errorContainer,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else if (!tabState.isLoading) {
|
||||||
|
return ListTile(
|
||||||
|
leading: const Icon(MdiIcons.lock),
|
||||||
|
title: const Text('Connection is secure'),
|
||||||
|
subtitle: Text('Verified By: ${tabState.securityInfoState.issuer}'),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Skeletonizer(
|
||||||
|
child: ListTile(
|
||||||
|
leading: const Skeleton.keep(child: Icon(MdiIcons.timerSand)),
|
||||||
|
title: Text(BoneMock.title),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}, [tabState]);
|
||||||
|
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user