From 98b4c60e21ba8e16cccb49497fe9dab4f7b37187 Mon Sep 17 00:00:00 2001 From: otsmr Date: Tue, 29 Apr 2025 20:54:29 +0200 Subject: [PATCH] fix #125 --- lib/src/model/json/userdata.dart | 1 + lib/src/model/json/userdata.g.dart | 6 ++- .../image_editor/modules/all_emojis.dart | 48 ++++++++++++++++--- 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/lib/src/model/json/userdata.dart b/lib/src/model/json/userdata.dart index f3b33a4..2c52da5 100644 --- a/lib/src/model/json/userdata.dart +++ b/lib/src/model/json/userdata.dart @@ -24,6 +24,7 @@ class UserData { ThemeMode? themeMode; Map>? autoDownloadOptions; bool? storeMediaFilesInGallery; + List? lastUsedEditorEmojis; final int userId; diff --git a/lib/src/model/json/userdata.g.dart b/lib/src/model/json/userdata.g.dart index bd02f3b..7c06a10 100644 --- a/lib/src/model/json/userdata.g.dart +++ b/lib/src/model/json/userdata.g.dart @@ -25,7 +25,10 @@ UserData _$UserDataFromJson(Map json) => UserData( (k, e) => MapEntry(k, (e as List).map((e) => e as String).toList()), ) - ..storeMediaFilesInGallery = json['storeMediaFilesInGallery'] as bool?; + ..storeMediaFilesInGallery = json['storeMediaFilesInGallery'] as bool? + ..lastUsedEditorEmojis = (json['lastUsedEditorEmojis'] as List?) + ?.map((e) => e as String) + .toList(); Map _$UserDataToJson(UserData instance) => { 'username': instance.username, @@ -39,6 +42,7 @@ Map _$UserDataToJson(UserData instance) => { 'themeMode': _$ThemeModeEnumMap[instance.themeMode], 'autoDownloadOptions': instance.autoDownloadOptions, 'storeMediaFilesInGallery': instance.storeMediaFilesInGallery, + 'lastUsedEditorEmojis': instance.lastUsedEditorEmojis, 'userId': instance.userId, }; diff --git a/lib/src/views/camera/image_editor/modules/all_emojis.dart b/lib/src/views/camera/image_editor/modules/all_emojis.dart index 263427a..2c89d48 100755 --- a/lib/src/views/camera/image_editor/modules/all_emojis.dart +++ b/lib/src/views/camera/image_editor/modules/all_emojis.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:twonly/src/utils/storage.dart'; import 'package:twonly/src/views/camera/image_editor/data/data.dart'; import 'package:twonly/src/views/camera/image_editor/data/layer.dart'; @@ -10,6 +11,44 @@ class Emojis extends StatefulWidget { } class _EmojisState extends State { + List lastUsed = emojis; + + @override + void initState() { + super.initState(); + initAsync(); + } + + Future initAsync() async { + final user = await getUser(); + if (user == null) return; + setState(() { + lastUsed = user.lastUsedEditorEmojis ?? []; + lastUsed.addAll(emojis); + }); + } + + Future selectEmojis(String emoji) async { + final user = await getUser(); + if (user == null) return; + if (user.lastUsedEditorEmojis == null) { + user.lastUsedEditorEmojis = [emoji]; + } else { + user.lastUsedEditorEmojis!.insert(0, emoji); + if (user.lastUsedEditorEmojis!.length > 12) { + user.lastUsedEditorEmojis = user.lastUsedEditorEmojis!.sublist(0, 12); + } + } + await updateUser(user); + if (!context.mounted) return; + Navigator.pop( + context, + EmojiLayerData( + text: emoji, + ), + ); + } + @override Widget build(BuildContext context) { return SingleChildScrollView( @@ -43,16 +82,11 @@ class _EmojisState extends State { mainAxisSpacing: 0.0, maxCrossAxisExtent: 60.0, ), - children: emojis.map((String emoji) { + children: lastUsed.map((String emoji) { return GridTile( child: GestureDetector( onTap: () { - Navigator.pop( - context, - EmojiLayerData( - text: emoji, - ), - ); + selectEmojis(emoji); }, child: Container( padding: EdgeInsets.zero,