This commit is contained in:
otsmr 2025-04-29 20:54:29 +02:00
parent ac9820261c
commit 98b4c60e21
3 changed files with 47 additions and 8 deletions

View file

@ -24,6 +24,7 @@ class UserData {
ThemeMode? themeMode; ThemeMode? themeMode;
Map<String, List<String>>? autoDownloadOptions; Map<String, List<String>>? autoDownloadOptions;
bool? storeMediaFilesInGallery; bool? storeMediaFilesInGallery;
List<String>? lastUsedEditorEmojis;
final int userId; final int userId;

View file

@ -25,7 +25,10 @@ UserData _$UserDataFromJson(Map<String, dynamic> json) => UserData(
(k, e) => (k, e) =>
MapEntry(k, (e as List<dynamic>).map((e) => e as String).toList()), MapEntry(k, (e as List<dynamic>).map((e) => e as String).toList()),
) )
..storeMediaFilesInGallery = json['storeMediaFilesInGallery'] as bool?; ..storeMediaFilesInGallery = json['storeMediaFilesInGallery'] as bool?
..lastUsedEditorEmojis = (json['lastUsedEditorEmojis'] as List<dynamic>?)
?.map((e) => e as String)
.toList();
Map<String, dynamic> _$UserDataToJson(UserData instance) => <String, dynamic>{ Map<String, dynamic> _$UserDataToJson(UserData instance) => <String, dynamic>{
'username': instance.username, 'username': instance.username,
@ -39,6 +42,7 @@ Map<String, dynamic> _$UserDataToJson(UserData instance) => <String, dynamic>{
'themeMode': _$ThemeModeEnumMap[instance.themeMode], 'themeMode': _$ThemeModeEnumMap[instance.themeMode],
'autoDownloadOptions': instance.autoDownloadOptions, 'autoDownloadOptions': instance.autoDownloadOptions,
'storeMediaFilesInGallery': instance.storeMediaFilesInGallery, 'storeMediaFilesInGallery': instance.storeMediaFilesInGallery,
'lastUsedEditorEmojis': instance.lastUsedEditorEmojis,
'userId': instance.userId, 'userId': instance.userId,
}; };

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; 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/data.dart';
import 'package:twonly/src/views/camera/image_editor/data/layer.dart'; import 'package:twonly/src/views/camera/image_editor/data/layer.dart';
@ -10,6 +11,44 @@ class Emojis extends StatefulWidget {
} }
class _EmojisState extends State<Emojis> { class _EmojisState extends State<Emojis> {
List<String> 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SingleChildScrollView( return SingleChildScrollView(
@ -43,16 +82,11 @@ class _EmojisState extends State<Emojis> {
mainAxisSpacing: 0.0, mainAxisSpacing: 0.0,
maxCrossAxisExtent: 60.0, maxCrossAxisExtent: 60.0,
), ),
children: emojis.map((String emoji) { children: lastUsed.map((String emoji) {
return GridTile( return GridTile(
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
Navigator.pop( selectEmojis(emoji);
context,
EmojiLayerData(
text: emoji,
),
);
}, },
child: Container( child: Container(
padding: EdgeInsets.zero, padding: EdgeInsets.zero,