Skip to content

Commit

Permalink
✨ Save custom publisher
Browse files Browse the repository at this point in the history
  • Loading branch information
gthvmt committed Jun 4, 2023
1 parent 71d4b48 commit 877115e
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 52 deletions.
7 changes: 6 additions & 1 deletion src/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:seventv_for_whatsapp/screens/browser.dart';
// import 'package:flutter_local_notifications/flutter_local_notifications.dart';

Expand All @@ -12,8 +13,12 @@ class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);

var theme = ThemeData.from(
colorScheme: ColorScheme.fromSeed(seedColor: const Color(0x00f49236), brightness: Brightness.dark),
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0x00f49236), brightness: Brightness.dark),
useMaterial3: true);

return MaterialApp(
Expand Down
36 changes: 36 additions & 0 deletions src/lib/models/settings.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import 'dart:convert';

import 'package:seventv_for_whatsapp/models/shared_preferences_keys.dart';
import 'package:shared_preferences/shared_preferences.dart';

class Settings {
String defaultPublisher = '7TV for WhatsApp';

Settings();

Settings.fromJson(Map<String, dynamic> json)
: defaultPublisher = json['defaultPublisher'];

Map<String, dynamic> toJson() => {
'defaultPublisher': defaultPublisher,
};
}

class SettingsManager {
static Future<Settings> load() async {
final sharedPreferences = await SharedPreferences.getInstance();
final jsonString = sharedPreferences.getString(SharedPreferencesKeys.settings);
if(jsonString == null) {
return Settings();
}
return Settings.fromJson(jsonDecode(jsonString));
}

static Future<void> save(Settings settings) async {
final sharedPreferences = await SharedPreferences.getInstance();
sharedPreferences.setString(
SharedPreferencesKeys.settings,
jsonEncode(settings.toJson()),
);
}
}
1 change: 1 addition & 0 deletions src/lib/models/shared_preferences_keys.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
class SharedPreferencesKeys {
static const stickerPacks = 'stickerPacks';
static const settings = 'settings';
}
112 changes: 61 additions & 51 deletions src/lib/screens/browser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:seventv_for_whatsapp/models/settings.dart';
import 'package:seventv_for_whatsapp/models/seventv.dart';
import 'package:seventv_for_whatsapp/screens/stickerpacks.dart';
import 'package:seventv_for_whatsapp/services/notification_service.dart';
Expand Down Expand Up @@ -201,57 +202,66 @@ class _BrowserState extends State<Browser> {

Future<StickerPack?> _emoteToStickerPack(
Emote emote, List<String> emojis) async {
var publisherController = TextEditingController(text: '7TV for WhatsApp');
var nameController = TextEditingController(text: emote.name);
return showDialog(
context: context,
builder: (dialogContext) {
return Dialog(
child: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.all(20),
child: Column(
children: [
TextField(
controller: nameController,
autofocus: true,
decoration: const InputDecoration(
border: OutlineInputBorder(), labelText: 'Name'),
),
const SizedBox(height: 10),
TextField(
controller: publisherController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Publisher'),
),
const SizedBox(height: 5),
SizedBox(
width: double.infinity,
child: OutlinedButton(
onPressed: () async {
var stickerPack = StickerPack.withDefaults(
nameController.text,
publisherController.text);
await stickerPack.save();
debugPrint('created sticker pack');
if (mounted) {
Navigator.pop(dialogContext, stickerPack);
}
var sticker =
await _emoteToSticker(emote, emojis);
stickerPack.addSticker(sticker);
stickerPack.isAnimated = sticker.isAnimated;
await stickerPack.save();
debugPrint(
'added sticker to pack - isAnimated: ${sticker.isAnimated}');
},
child: const Text('Create Sticker Pack')),
)
],
))),
);
});
final settings = await SettingsManager.load();
final publisherController =
TextEditingController(text: settings.defaultPublisher);
final nameController = TextEditingController(text: emote.name);
if (context.mounted) {
return showDialog(
context: context,
builder: (dialogContext) {
return Dialog(
child: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.all(20),
child: Column(
children: [
TextField(
controller: nameController,
autofocus: true,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Name'),
),
const SizedBox(height: 10),
TextField(
controller: publisherController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Publisher'),
),
const SizedBox(height: 5),
SizedBox(
width: double.infinity,
child: OutlinedButton(
onPressed: () async {
var stickerPack = StickerPack.withDefaults(
nameController.text,
publisherController.text);
SettingsManager.save(settings
..defaultPublisher =
publisherController.text);
await stickerPack.save();
debugPrint('created sticker pack');
if (mounted) {
Navigator.pop(dialogContext, stickerPack);
}
var sticker =
await _emoteToSticker(emote, emojis);
stickerPack.addSticker(sticker);
stickerPack.isAnimated = sticker.isAnimated;
await stickerPack.save();
debugPrint(
'added sticker to pack - isAnimated: ${sticker.isAnimated}');
},
child: const Text('Create Sticker Pack')),
)
],
))),
);
});
}
return null;
}

Future<Sticker> _emoteToSticker(Emote emote, List<String> emojis) async {
Expand Down

0 comments on commit 877115e

Please sign in to comment.