import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:vrouter/vrouter.dart'; import 'package:fluffychat/utils/beautify_string_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'settings_security.dart'; class SettingsSecurityView extends StatelessWidget { final SettingsSecurityController controller; const SettingsSecurityView(this.controller, {Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(L10n.of(context)!.security)), body: ListTileTheme( iconColor: Theme.of(context).textTheme.bodyText1!.color, child: MaxWidthBody( withScrolling: true, child: Column( children: [ ListTile( trailing: const Icon(Icons.panorama_fish_eye), title: Text(L10n.of(context)!.whoCanSeeMyStories), onTap: () => VRouter.of(context).to('stories'), ), ListTile( trailing: const Icon(Icons.close), title: Text(L10n.of(context)!.ignoredUsers), onTap: () => VRouter.of(context).to('ignorelist'), ), ListTile( trailing: const Icon(Icons.vpn_key_outlined), title: Text( L10n.of(context)!.changePassword, ), onTap: controller.changePasswordAccountAction, ), ListTile( trailing: const Icon(Icons.mail_outlined), title: Text(L10n.of(context)!.passwordRecovery), onTap: () => VRouter.of(context).to('3pid'), ), if (Matrix.of(context).client.encryption != null) ...{ const Divider(thickness: 1), if (PlatformInfos.isMobile) ListTile( trailing: const Icon(Icons.lock_outlined), title: Text(L10n.of(context)!.appLock), onTap: controller.setAppLockAction, ), ListTile( title: Text(L10n.of(context)!.yourPublicKey), onTap: () => showOkAlertDialog( useRootNavigator: false, context: context, title: L10n.of(context)!.yourPublicKey, message: Matrix.of(context).client.fingerprintKey.beautified, okLabel: L10n.of(context)!.ok, ), trailing: const Icon(Icons.vpn_key_outlined), ), if (!Matrix.of(context).client.encryption!.crossSigning.enabled) ListTile( title: Text(L10n.of(context)!.crossSigningEnabled), trailing: const Icon(Icons.error, color: Colors.red), onTap: () => controller.showBootstrapDialog(context), ), if (!Matrix.of(context).client.encryption!.keyManager.enabled) ListTile( title: Text(L10n.of(context)!.onlineKeyBackupEnabled), trailing: const Icon(Icons.error, color: Colors.red), onTap: () => controller.showBootstrapDialog(context), ), if (Matrix.of(context).client.isUnknownSession) ListTile( title: const Text('Session verified'), trailing: const Icon(Icons.error, color: Colors.red), onTap: () => controller.showBootstrapDialog(context), ), FutureBuilder( future: () async { return (await Matrix.of(context) .client .encryption! .keyManager .isCached()) && (await Matrix.of(context) .client .encryption! .crossSigning .isCached()); }(), builder: (context, snapshot) => snapshot.data == true ? Container() : ListTile( title: Text(L10n.of(context)!.keysCached), trailing: const Icon(Icons.error, color: Colors.red), onTap: () => controller.showBootstrapDialog(context), ), ), }, ], ), ), ), ); } }