Initial commit
This commit is contained in:
22
lib/pages/settings_chat/settings_chat.dart
Normal file
22
lib/pages/settings_chat/settings_chat.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
// SPDX-FileCopyrightText: 2019-Present Christian Kußowski
|
||||
// SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
import 'settings_chat_view.dart';
|
||||
|
||||
class SettingsChat extends StatefulWidget {
|
||||
const SettingsChat({super.key});
|
||||
|
||||
@override
|
||||
SettingsChatController createState() => SettingsChatController();
|
||||
}
|
||||
|
||||
class SettingsChatController extends State<SettingsChat> {
|
||||
void updateState() => setState(() {});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => SettingsChatView(this);
|
||||
}
|
||||
172
lib/pages/settings_chat/settings_chat_view.dart
Normal file
172
lib/pages/settings_chat/settings_chat_view.dart
Normal file
@@ -0,0 +1,172 @@
|
||||
// SPDX-FileCopyrightText: 2019-Present Christian Kußowski
|
||||
// SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
|
||||
import 'package:tatchat/config/setting_keys.dart';
|
||||
import 'package:tatchat/config/themes.dart';
|
||||
import 'package:tatchat/l10n/l10n.dart';
|
||||
import 'package:tatchat/utils/adaptive_bottom_sheet.dart';
|
||||
import 'package:tatchat/utils/platform_infos.dart';
|
||||
import 'package:tatchat/widgets/layouts/max_width_body.dart';
|
||||
import 'package:tatchat/widgets/settings_switch_list_tile.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
import 'settings_chat.dart';
|
||||
|
||||
class SettingsChatView extends StatelessWidget {
|
||||
final SettingsChatController controller;
|
||||
const SettingsChatView(this.controller, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(L10n.of(context).chat),
|
||||
automaticallyImplyLeading: !FluffyThemes.isColumnMode(context),
|
||||
centerTitle: FluffyThemes.isColumnMode(context),
|
||||
),
|
||||
body: ListTileTheme(
|
||||
iconColor: theme.textTheme.bodyLarge!.color,
|
||||
child: MaxWidthBody(
|
||||
child: Column(
|
||||
children: [
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).formattedMessages,
|
||||
subtitle: L10n.of(context).formattedMessagesDescription,
|
||||
setting: AppSettings.renderHtml,
|
||||
),
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).hideRedactedMessages,
|
||||
subtitle: L10n.of(context).hideRedactedMessagesBody,
|
||||
setting: AppSettings.hideRedactedEvents,
|
||||
),
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).hideRoomsInSpaces,
|
||||
setting: AppSettings.hideRoomsInSpaces,
|
||||
),
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).hideInvalidOrUnknownMessageFormats,
|
||||
setting: AppSettings.hideUnknownEvents,
|
||||
),
|
||||
if (PlatformInfos.isMobile)
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).autoplayImages,
|
||||
setting: AppSettings.autoplayImages,
|
||||
),
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).sendOnEnter,
|
||||
setting: AppSettings.sendOnEnter,
|
||||
),
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).swipeRightToLeftToReply,
|
||||
setting: AppSettings.swipeRightToLeftToReply,
|
||||
),
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).showThumbnailsInTimeline,
|
||||
setting: AppSettings.showThumbnailsInTimeline,
|
||||
),
|
||||
SettingsSwitchListTile.adaptive(
|
||||
title: L10n.of(context).doubleTapToReact,
|
||||
subtitle: L10n.of(context).doubleTapToReactDescription,
|
||||
setting: AppSettings.doubleTapToReact,
|
||||
onChanged: (_) => controller.updateState(),
|
||||
),
|
||||
if (AppSettings.doubleTapToReact.value)
|
||||
ListTile(
|
||||
title: Text(L10n.of(context).doubleTapReaction),
|
||||
trailing: Text(
|
||||
AppSettings.doubleTapReaction.value,
|
||||
style: const TextStyle(fontSize: 24),
|
||||
),
|
||||
onTap: () async {
|
||||
final emoji = await showAdaptiveBottomSheet<String>(
|
||||
context: context,
|
||||
builder: (context) => Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(L10n.of(context).doubleTapReaction),
|
||||
leading: CloseButton(
|
||||
onPressed: () => Navigator.of(context).pop(null),
|
||||
),
|
||||
),
|
||||
body: SizedBox(
|
||||
height: double.infinity,
|
||||
child: EmojiPicker(
|
||||
onEmojiSelected: (_, emoji) =>
|
||||
Navigator.of(context).pop(emoji.emoji),
|
||||
config: Config(
|
||||
locale: Localizations.localeOf(context),
|
||||
emojiViewConfig: const EmojiViewConfig(
|
||||
backgroundColor: Colors.transparent,
|
||||
),
|
||||
bottomActionBarConfig:
|
||||
const BottomActionBarConfig(enabled: false),
|
||||
categoryViewConfig: CategoryViewConfig(
|
||||
initCategory: Category.SMILEYS,
|
||||
backspaceColor: theme.colorScheme.primary,
|
||||
iconColor: theme.colorScheme.primary.withAlpha(
|
||||
128,
|
||||
),
|
||||
iconColorSelected: theme.colorScheme.primary,
|
||||
indicatorColor: theme.colorScheme.primary,
|
||||
backgroundColor: theme.colorScheme.surface,
|
||||
),
|
||||
skinToneConfig: SkinToneConfig(
|
||||
dialogBackgroundColor: Color.lerp(
|
||||
theme.colorScheme.surface,
|
||||
theme.colorScheme.primaryContainer,
|
||||
0.75,
|
||||
)!,
|
||||
indicatorColor: theme.colorScheme.onSurface,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
if (emoji != null) {
|
||||
await AppSettings.doubleTapReaction.setItem(emoji);
|
||||
controller.updateState();
|
||||
}
|
||||
},
|
||||
),
|
||||
Divider(color: theme.dividerColor),
|
||||
ListTile(
|
||||
title: Text(
|
||||
L10n.of(context).customEmojisAndStickers,
|
||||
style: TextStyle(
|
||||
color: theme.colorScheme.secondary,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: Text(L10n.of(context).customEmojisAndStickers),
|
||||
subtitle: Text(L10n.of(context).customEmojisAndStickersBody),
|
||||
onTap: () => context.go('/rooms/settings/chat/emotes'),
|
||||
trailing: const Padding(
|
||||
padding: EdgeInsets.all(16.0),
|
||||
child: Icon(Icons.chevron_right_outlined),
|
||||
),
|
||||
),
|
||||
Divider(color: theme.dividerColor),
|
||||
ListTile(
|
||||
title: Text(
|
||||
L10n.of(context).calls,
|
||||
style: TextStyle(
|
||||
color: theme.colorScheme.secondary,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user