feat(ui): Replace the squircles with a simple list
This commit is contained in:
parent
db4b69a24a
commit
c0fb9beef7
@ -154,15 +154,13 @@
|
|||||||
"confirmBody": "One or more chats are unencrypted. This means that the file will be leaked to the server. Do you still want to continue?"
|
"confirmBody": "One or more chats are unencrypted. This means that the file will be leaked to the server. Do you still want to continue?"
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"self": {
|
"general": {
|
||||||
"devices": "Devices"
|
"omemo": "Security"
|
||||||
},
|
},
|
||||||
"conversation": {
|
"conversation": {
|
||||||
"muteChatTooltip": "Mute chat",
|
"notifications": "Notifications",
|
||||||
"unmuteChatTooltip": "Unmute chat",
|
"notificationsMuted": "Muted",
|
||||||
"muteChat": "Mute",
|
"notificationsEnabled": "Enabled"
|
||||||
"unmuteChat": "Unmute",
|
|
||||||
"devices": "Devices"
|
|
||||||
},
|
},
|
||||||
"owndevices": {
|
"owndevices": {
|
||||||
"title": "Own Devices",
|
"title": "Own Devices",
|
||||||
|
@ -154,15 +154,13 @@
|
|||||||
"confirmBody": "Einer oder mehr Chats sind unverschlüsselt. Das bedeutet, dass die Dateien dem Server unverschlüsselt vorliegen. Dateien trotzdem senden?"
|
"confirmBody": "Einer oder mehr Chats sind unverschlüsselt. Das bedeutet, dass die Dateien dem Server unverschlüsselt vorliegen. Dateien trotzdem senden?"
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"self": {
|
"general": {
|
||||||
"devices": "Geräte"
|
"omemo": "Sicherheit"
|
||||||
},
|
},
|
||||||
"conversation": {
|
"conversation": {
|
||||||
"muteChatTooltip": "Chat stummschalten",
|
"notifications": "Benachrichtigungen",
|
||||||
"unmuteChatTooltip": "Chat lautstellen",
|
"notificationsMuted": "Stumm",
|
||||||
"muteChat": "Stummschalten",
|
"notificationsEnabled": "Eingeschaltet"
|
||||||
"unmuteChat": "Lautstellen",
|
|
||||||
"devices": "Geräte"
|
|
||||||
},
|
},
|
||||||
"owndevices": {
|
"owndevices": {
|
||||||
"title": "Eigene Geräte",
|
"title": "Eigene Geräte",
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get_it/get_it.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:moxxyv2/i18n/strings.g.dart';
|
import 'package:moxxyv2/i18n/strings.g.dart';
|
||||||
import 'package:moxxyv2/shared/models/conversation.dart';
|
import 'package:moxxyv2/shared/models/conversation.dart';
|
||||||
import 'package:moxxyv2/ui/bloc/devices_bloc.dart';
|
import 'package:moxxyv2/ui/bloc/devices_bloc.dart';
|
||||||
import 'package:moxxyv2/ui/bloc/profile_bloc.dart';
|
import 'package:moxxyv2/ui/bloc/profile_bloc.dart';
|
||||||
import 'package:moxxyv2/ui/constants.dart';
|
|
||||||
import 'package:moxxyv2/ui/helpers.dart';
|
|
||||||
import 'package:moxxyv2/ui/widgets/avatar.dart';
|
import 'package:moxxyv2/ui/widgets/avatar.dart';
|
||||||
import 'package:moxxyv2/ui/widgets/chat/shared/base.dart';
|
|
||||||
import 'package:moxxyv2/ui/widgets/contact_helper.dart';
|
import 'package:moxxyv2/ui/widgets/contact_helper.dart';
|
||||||
|
import 'package:moxxyv2/ui/widgets/profile/options.dart';
|
||||||
//import 'package:phosphor_flutter/phosphor_flutter.dart';
|
//import 'package:phosphor_flutter/phosphor_flutter.dart';
|
||||||
|
|
||||||
class ConversationProfileHeader extends StatelessWidget {
|
class ConversationProfileHeader extends StatelessWidget {
|
||||||
@ -81,124 +79,97 @@ class ConversationProfileHeader extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 16),
|
|
||||||
child: Row(
|
|
||||||
//mainAxisSize: MainAxisSize.min,
|
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
||||||
children: [
|
|
||||||
Tooltip(
|
|
||||||
message: conversation.muted ?
|
|
||||||
t.pages.profile.conversation.unmuteChatTooltip :
|
|
||||||
t.pages.profile.conversation.muteChatTooltip,
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
SharedMediaContainer(
|
|
||||||
Icon(
|
|
||||||
conversation.muted ?
|
|
||||||
Icons.do_not_disturb_on :
|
|
||||||
Icons.do_not_disturb_off,
|
|
||||||
size: 32,
|
|
||||||
),
|
|
||||||
color: getTileColor(context),
|
|
||||||
onTap: () {
|
|
||||||
GetIt.I.get<ProfileBloc>().add(
|
|
||||||
MuteStateSetEvent(
|
|
||||||
conversation.jid,
|
|
||||||
!conversation.muted,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
conversation.muted ?
|
|
||||||
t.pages.profile.conversation.unmuteChat :
|
|
||||||
t.pages.profile.conversation.muteChat,
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: fontsizeAppbar,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// TODO(PapaTutuWawa): Only show when the chat partner has OMEMO keys
|
|
||||||
Tooltip(
|
|
||||||
message: t.pages.profile.conversation.devices,
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
||||||
children: [
|
|
||||||
SharedMediaContainer(
|
|
||||||
const Icon(
|
|
||||||
Icons.security_outlined,
|
|
||||||
size: 32,
|
|
||||||
),
|
|
||||||
color: getTileColor(context),
|
|
||||||
onTap: () {
|
|
||||||
GetIt.I.get<DevicesBloc>().add(DevicesRequestedEvent(conversation.jid));
|
|
||||||
},
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
t.pages.profile.conversation.devices,
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: fontsizeAppbar,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// TODO(Unknown): How to integrate this into the UI?
|
|
||||||
/*
|
|
||||||
Tooltip(
|
|
||||||
message: subscribed ?
|
|
||||||
'Unsubscribe' :
|
|
||||||
'Subscribe',
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
SharedMediaContainer(
|
|
||||||
ClipRRect(
|
|
||||||
borderRadius: BorderRadius.circular(10),
|
|
||||||
child: ColoredBox(
|
|
||||||
color: getTileColor(context),
|
|
||||||
child: Icon(
|
|
||||||
subscribed ?
|
|
||||||
PhosphorIcons.link :
|
|
||||||
PhosphorIcons.linkBreak,
|
|
||||||
size: 32,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
onTap: () {
|
|
||||||
GetIt.I.get<ProfileBloc>().add(
|
|
||||||
SetSubscriptionStateEvent(
|
|
||||||
conversation.jid,
|
|
||||||
!subscribed,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
Row(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
subscribed ?
|
|
||||||
'Unsubscribe' :
|
|
||||||
'Subscribe',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: fontsizeAppbar,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
Icon(Icons.info),
|
Align(
|
||||||
],
|
alignment: Alignment.centerLeft,
|
||||||
),
|
child: Padding(
|
||||||
],
|
padding: const EdgeInsets.only(
|
||||||
|
top: 16,
|
||||||
|
left: 64,
|
||||||
|
right: 64,
|
||||||
|
),
|
||||||
|
child: ProfileOptions(
|
||||||
|
options: [
|
||||||
|
ProfileOption(
|
||||||
|
icon: Icons.security_outlined,
|
||||||
|
title: t.pages.profile.general.omemo,
|
||||||
|
onTap: () {
|
||||||
|
context.read<DevicesBloc>().add(
|
||||||
|
DevicesRequestedEvent(conversation.jid),
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),*/
|
ProfileOption(
|
||||||
],
|
icon: conversation.muted ?
|
||||||
|
Icons.notifications_off :
|
||||||
|
Icons.notifications,
|
||||||
|
title: t.pages.profile.conversation.notifications,
|
||||||
|
description: conversation.muted ?
|
||||||
|
t.pages.profile.conversation.notificationsMuted :
|
||||||
|
t.pages.profile.conversation.notificationsEnabled,
|
||||||
|
onTap: () {
|
||||||
|
context.read<ProfileBloc>().add(
|
||||||
|
MuteStateSetEvent(
|
||||||
|
conversation.jid,
|
||||||
|
!conversation.muted,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
// TODO(Unknown): How to integrate this into the UI?
|
||||||
|
Tooltip(
|
||||||
|
message: subscribed ?
|
||||||
|
'Unsubscribe' :
|
||||||
|
'Subscribe',
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
SharedMediaContainer(
|
||||||
|
ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
child: ColoredBox(
|
||||||
|
color: getTileColor(context),
|
||||||
|
child: Icon(
|
||||||
|
subscribed ?
|
||||||
|
PhosphorIcons.link :
|
||||||
|
PhosphorIcons.linkBreak,
|
||||||
|
size: 32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
GetIt.I.get<ProfileBloc>().add(
|
||||||
|
SetSubscriptionStateEvent(
|
||||||
|
conversation.jid,
|
||||||
|
!subscribed,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
subscribed ?
|
||||||
|
'Unsubscribe' :
|
||||||
|
'Subscribe',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: fontsizeAppbar,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
Icon(Icons.info),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),*/
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get_it/get_it.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:moxxyv2/i18n/strings.g.dart';
|
import 'package:moxxyv2/i18n/strings.g.dart';
|
||||||
import 'package:moxxyv2/ui/bloc/own_devices_bloc.dart';
|
import 'package:moxxyv2/ui/bloc/own_devices_bloc.dart';
|
||||||
import 'package:moxxyv2/ui/constants.dart';
|
|
||||||
import 'package:moxxyv2/ui/helpers.dart';
|
import 'package:moxxyv2/ui/helpers.dart';
|
||||||
import 'package:moxxyv2/ui/widgets/avatar.dart';
|
import 'package:moxxyv2/ui/widgets/avatar.dart';
|
||||||
import 'package:moxxyv2/ui/widgets/chat/shared/base.dart';
|
import 'package:moxxyv2/ui/widgets/profile/options.dart';
|
||||||
|
|
||||||
class SelfProfileHeader extends StatelessWidget {
|
class SelfProfileHeader extends StatelessWidget {
|
||||||
const SelfProfileHeader(
|
const SelfProfileHeader(
|
||||||
@ -79,36 +78,27 @@ class SelfProfileHeader extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Padding(
|
Align(
|
||||||
padding: const EdgeInsets.only(top: 16),
|
alignment: Alignment.centerLeft,
|
||||||
child: Row(
|
child: Padding(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
padding: const EdgeInsets.only(
|
||||||
children: [
|
top: 16,
|
||||||
Tooltip(
|
left: 64,
|
||||||
message: t.pages.profile.self.devices,
|
right: 64,
|
||||||
child: Column(
|
),
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
child: ProfileOptions(
|
||||||
children: [
|
options: [
|
||||||
SharedMediaContainer(
|
ProfileOption(
|
||||||
const Icon(
|
icon: Icons.security_outlined,
|
||||||
Icons.security_outlined,
|
title: t.pages.profile.general.omemo,
|
||||||
size: 32,
|
onTap: () {
|
||||||
),
|
context.read<OwnDevicesBloc>().add(
|
||||||
color: getTileColor(context),
|
OwnDevicesRequestedEvent(),
|
||||||
onTap: () {
|
);
|
||||||
GetIt.I.get<OwnDevicesBloc>().add(OwnDevicesRequestedEvent());
|
},
|
||||||
},
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
t.pages.profile.self.devices,
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: fontsizeAppbar,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
],
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
67
lib/ui/widgets/profile/options.dart
Normal file
67
lib/ui/widgets/profile/options.dart
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class ProfileOption {
|
||||||
|
const ProfileOption({
|
||||||
|
required this.icon,
|
||||||
|
required this.title,
|
||||||
|
required this.onTap,
|
||||||
|
this.description,
|
||||||
|
});
|
||||||
|
final IconData icon;
|
||||||
|
final String title;
|
||||||
|
final String? description;
|
||||||
|
final void Function() onTap;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProfileOptions extends StatelessWidget {
|
||||||
|
const ProfileOptions({
|
||||||
|
required this.options,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
final List<ProfileOption> options;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: options
|
||||||
|
.map((option) => InkWell(
|
||||||
|
onTap: option.onTap,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 16,
|
||||||
|
horizontal: 8,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 16),
|
||||||
|
child: Icon(
|
||||||
|
option.icon,
|
||||||
|
size: 32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
option.title,
|
||||||
|
style: Theme.of(context).textTheme.headline6,
|
||||||
|
),
|
||||||
|
|
||||||
|
if (option.description != null)
|
||||||
|
Text(
|
||||||
|
option.description!,
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),).toList(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user