add certificate tile

This commit is contained in:
Fabian Freund
2025-07-18 14:34:51 +02:00
parent 8430b1a5a9
commit e241a1222a
2 changed files with 64 additions and 2 deletions
@@ -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/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/certificate_tile.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/user/domain/providers.dart';
@@ -56,6 +57,8 @@ class WebPageDialog extends HookConsumerWidget {
padding: const EdgeInsets.fromLTRB(16.0, 12.0, 16.0, 0.0),
child: WebsiteTitleTile(url, precachedInfo: precachedInfo),
),
CertificateTile(),
const Divider(),
SizedBox(
//We need this to stretch the dialog, then padding from dialog is applied
width: double.maxFinite,
@@ -67,8 +70,7 @@ class WebPageDialog extends HookConsumerWidget {
),
),
),
const SizedBox(height: 4),
const Divider(),
const SizedBox(height: 8),
Flexible(
child: FadingScroll(
fadingSize: 25,
@@ -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;
}
}