From 86357f8ed7b462b1967fea112744e5e000c5a090 Mon Sep 17 00:00:00 2001 From: MjKey Date: Sat, 10 Aug 2024 19:33:29 +0300 Subject: [PATCH] 2.0.3 --- assets/styles.json | 25 +++ lang/en.json | 31 +++- lang/ru.json | 31 +++- lib/main.dart | 226 +++++++++++++++++++++-- lib/socket_service.dart | 7 +- lib/style_screen.dart | 400 ++++++++++++++++++++++++++++++++++++++++ pubspec.yaml | 94 ++-------- setup.iss | 37 +++- 8 files changed, 757 insertions(+), 94 deletions(-) create mode 100644 assets/styles.json create mode 100644 lib/style_screen.dart diff --git a/assets/styles.json b/assets/styles.json new file mode 100644 index 0000000..9022c64 --- /dev/null +++ b/assets/styles.json @@ -0,0 +1,25 @@ +{ + "styles": [ + { + "name": "Kode Mono Black", + "img": "data:image/png;base64,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", + "css": "@import url(https://fonts.googleapis.com/css2?family=Kode+Mono:wght@400..700&display=swap);body{background-color:#fff0;margin:0 auto;overflow:hidden}#timer{font-family:'Kode Mono',monospace;font-size:48px;margin-top:50px;text-align:center;color:#000;}" + }, + { + "name": "Kode Mono White", + "img": "data:image/png;base64,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", + "css": "@import url(https://fonts.googleapis.com/css2?family=Kode+Mono:wght@400..700&display=swap);body{background-color:#fff0;margin:0 auto;overflow:hidden}#timer{font-family:'Kode Mono',monospace;font-size:48px;margin-top:50px;text-align:center;color:#fff}" + }, + { + "name": "Pop Art", + "img": "data:image/png;base64,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", + "css": "@import url(https://fonts.googleapis.com/css2?family=Raleway:wght@900&display=swap);body{background-color:#fff0;margin:0 auto;overflow:hidden}#timer{font-family:'Raleway',sans-serif;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:120px;letter-spacing:.1em;-webkit-text-fill-color:#fff0;-webkit-text-stroke-width:3px;-webkit-text-stroke-color:#fff;text-shadow:8px 8px #ff1f8f,20px 20px #000}" + }, + { + "name": "Neon Border", + "img": "data:image/png;base64,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", + "css": "@import url(https://fonts.googleapis.com/css2?family=Kode+Mono:wght@400..700&display=swap);body{background-color:#fff0;margin:0 auto;overflow:hidden;text-align:center}#timer{font-family:'Kode Mono';font-size:3em;display:inline-block;text-shadow:-1px -1px 10px #fff,-1px -1px 10px #fff,0 0 20px #ff00de,0 0 40px #ff00de,0 0 60px #ff00de,0 0 80px #ff00de;padding:30px;box-shadow:0 0 10px #ff00de,inset 0 0 10px #ff00de,0 0 20px 2px #ff00de,inset 0 0 20px 2px #ff00de}" + } + ] + } + \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index 9493413..762c223 100644 --- a/lang/en.json +++ b/lang/en.json @@ -46,5 +46,34 @@ "support":"Support the author", "port_settings": "Port Settings", "port": "Port", - "err_port":"Enter the correct port values" + "err_port":"Enter the correct port values", + "m_styles": "Timer Styles for OBS", + "m_g_styles": "Create Timer Styles", + "timer_styles_title": "Styles for Timer for OBS", + "copy_css": "Copy CSS", + "css_copied": "CSS code copied", + "help": "How to apply styles", + "help_content": "Instructions for applying styles for OBS...", + "style_create": "You can create your own CSS ", + "style_cr_link": ">>HERE<<", + "css_generator_title": "CSS Generator", + "pick_color": "Pick a color", + "select": "Select", + "background": "Background", + "text_shadow": "Text Shadow", + "border": "Border", + "font_size": "Font Size", + "text_color": "Text Color", + "font_family": "Font Family", + "background_color": "Background Color", + "text_shadow_color": "Text Shadow Color", + "text_shadow_offset_x": "Text Shadow Offset X", + "text_shadow_offset_y": "Text Shadow Offset Y", + "border_width": "Border Width", + "border_radius": "Border Radius", + "border_color": "Border Color", + "pick": "Pick", + "width_block": "Width block", + "height_block": "Height block", + "custom_font": "Font Path [C://gachi/myfon.ttf] (leave empty to use Google Fonts)" } \ No newline at end of file diff --git a/lang/ru.json b/lang/ru.json index 1539afe..0fa6b21 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -46,5 +46,34 @@ "support":"Поддержать автора", "port_settings": "Настройки портов", "port": "порт", - "err_port":"Введите корректные значения портов" + "err_port":"Введите корректные значения портов", + "m_styles": "Стили таймера для OBS", + "m_g_styles": "Создать стиль таймера", + "timer_styles_title": "Стили для таймера для OBS", + "css_copied": "CSS-код скопирован", + "help": "Как применять стили?", + "help_content": "Инструкции по применению стилей в OBS...", + "style_create": "Создать свой CSS можно ", + "style_cr_link": ">>ТУТ<<", + "css_generator_title": "Генератор CSS", + "pick_color": "Выберите цвет", + "select": "Выбрать", + "background": "Фон", + "text_shadow": "Тень текста", + "border": "Рамка", + "font_size": "Размер шрифта", + "text_color": "Цвет текста", + "font_family": "Google шрифт", + "background_color": "Цвет фона", + "text_shadow_color": "Цвет тени текста", + "text_shadow_offset_x": "Смещение тени X", + "text_shadow_offset_y": "Смещение тени Y", + "border_width": "Ширина рамки", + "border_radius": "Радиус рамки", + "border_color": "Цвет рамки", + "copy_css": "Скопировать CSS", + "pick": "Выбрать", + "width_block": "Ширина блока", + "height_block": "Высота рамки", + "custom_font": "Путь до шрифта [C://pupka/font.ttf] (оставьте поле пустым, чтобы использовать шрифт Google)" } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 2ca4945..3e5bcfb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,4 @@ -// ignore_for_file: depend_on_referenced_packages, library_private_types_in_public_api, use_build_context_synchronously +// ignore_for_file: depend_on_referenced_packages, library_private_types_in_public_api, use_build_context_synchronously, deprecated_member_use import 'dart:io'; import 'dart:async'; @@ -24,6 +24,9 @@ import 'package:network_info_plus/network_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:webview_windows/webview_windows.dart'; +import 'package:translator/translator.dart'; +import 'style_screen.dart'; class LocalizationProvider with ChangeNotifier { Map _localizedStrings = {}; @@ -61,6 +64,30 @@ class LocalizationProvider with ChangeNotifier { } } +class TimerStyle { + final String name; + final String img; + final String css; + + TimerStyle(this.name, this.img, this.css); + + factory TimerStyle.fromJson(Map json) { + return TimerStyle( + json['name'] as String, + json['img'] as String, + json['css'] as String, + ); + } +} + +Future> _loadStyles() async { + final String response = await rootBundle.loadString('assets/styles.json'); + final data = await json.decode(response); + return (data['styles'] as List) + .map((style) => TimerStyle.fromJson(style)) + .toList(); +} + class ThemeProvider with ChangeNotifier { bool _isDarkMode = false; @@ -144,7 +171,7 @@ void main() async { LogManager.log(Level.INFO, 'Запуск..'); await windowManager.ensureInitialized(); if (Platform.isWindows) { - WindowManager.instance.setMinimumSize(const Size(700, 600)); + WindowManager.instance.setMinimumSize(const Size(700, 725)); WindowManager.instance.setMaximumSize(const Size(700, 1080)); LogManager.log(Level.INFO, 'Размеры окна заданы'); } @@ -213,6 +240,23 @@ class _MainScreenState extends State { int _httpPort = 8080; int _wsPort = 4040; + final String changelog = ''' + ★ Добавлен выбор стилей для таймера + ★ Добавлен генератр стилей (CSS) для таймера + ☆ Фикс получения локального IP [issues/1] + ☆ Немножко поправлен код + + Задумки (в планах на будущее): + ✦ Добавить поддержку: + ✧ Donate.Stream + ✧ Donatty + ✧ Donatepay + ✧ StreamElements (Вряд ли) + '''; + String translatedChangelog = ''; + + final version = "2.0.3"; + @override void initState() { super.initState(); @@ -222,6 +266,16 @@ class _MainScreenState extends State { _startWebServer(); _startWebSocketServer(); _getLocalIpAddress(); + _translateChangelog(); + } + + void _translateChangelog() async { + final translator = GoogleTranslator(); + final translated = + await translator.translate(changelog, from: 'ru', to: 'en'); + setState(() { + translatedChangelog = translated.text; + }); } void _incrementCounter() { @@ -292,8 +346,9 @@ class _MainScreenState extends State { }); } - void _showAuthorInfo() { + void _showAuthorInfo() async { LogManager.log(Level.INFO, 'Отображение информации об авторе'); + SharedPreferences prefs = await SharedPreferences.getInstance(); showDialog( context: context, builder: (BuildContext context) { @@ -340,7 +395,7 @@ class _MainScreenState extends State { style: theme.textTheme.bodyLarge, children: [ TextSpan( - text: '2.0.2', + text: version, style: GoogleFonts.lato( textStyle: const TextStyle( color: Color.fromARGB(255, 243, 33, 226), @@ -371,11 +426,15 @@ class _MainScreenState extends State { )), ), ), - const Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text('• Сделал покарсивше чутка'), - Text('• Испавил QR код в тёмной версии') + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + prefs.getString('language') == 'ru' + ? changelog + : translatedChangelog, + textAlign: TextAlign.left, + ), ], ), const SizedBox(height: 20), @@ -880,6 +939,135 @@ class _MainScreenState extends State { await _initSocketService(); } + void _openTextStyleGenerator() { + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => const StyleGeneratorScreen(), + )); + } + + void _showYouTubeHelpDialog() { + final WebviewController controller = WebviewController(); + + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text(context.read().translate('help')), + content: SizedBox( + width: 600, + height: 400, + child: FutureBuilder( + future: controller.initialize(), + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + controller.loadUrl('https://mjkey.ru/yt.html'); + return Webview(controller); + } else { + return const Center(child: CircularProgressIndicator()); + } + }, + ), + ), + actions: [ + TextButton( + child: + Text(context.read().translate('close')), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ).then((_) { + controller.dispose(); + }); + } + + void _showTimerStylesDialog() async { + List styles = await _loadStyles(); + final localizationProvider = + Provider.of(context, listen: false); + + showDialog( + context: context, + builder: (BuildContext context) { + final theme = Theme.of(context); + return AlertDialog( + title: Text(localizationProvider.translate('timer_styles_title')), + content: SingleChildScrollView( + child: Column( + children: styles.map((style) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Column( + children: [ + Image.memory(base64Decode(style.img.split(',')[1]), + height: 50), + ], + ), + const SizedBox(width: 10), + Column( + children: [ + ElevatedButton( + onPressed: () { + Clipboard.setData(ClipboardData(text: style.css)); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(localizationProvider + .translate('css_copied'))), + ); + }, + child: + Text(localizationProvider.translate('copy_css')), + ), + ], + ), + ], + ); + }).toList(), + ), + ), + actions: [ + RichText( + text: TextSpan( + text: + '${context.read().translate('style_create')} ', + style: theme.textTheme.bodySmall, + children: [ + TextSpan( + text: context + .read() + .translate('style_cr_link'), + style: const TextStyle( + color: Colors.blue, + decoration: TextDecoration.underline, + ), + recognizer: TapGestureRecognizer() + ..onTap = () async { + _openTextStyleGenerator(); + }, + ), + ], + ), + ), + IconButton( + icon: const Icon(Icons.help_outline), + onPressed: _showYouTubeHelpDialog, + ), + TextButton( + child: Text(localizationProvider.translate('close')), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + void _saveStatistics() async { LogManager.log(Level.INFO, 'Сохранение статистик'); SharedPreferences prefs = await SharedPreferences.getInstance(); @@ -1390,8 +1578,8 @@ class _MainScreenState extends State { // GestureDetector( // onTap: _incrementCounter, // child: Image.asset( - // 'assets/pepe.gif', // Укажи ссылку на свою гифку - // height: 50, // Настроить размер + // 'assets/pepe.gif', + // height: 50, // ),), // ], // ), @@ -1440,6 +1628,12 @@ class _MainScreenState extends State { case 'port_settings': _showPortSettingsDialog(); break; + case 'timer_styles': + _showTimerStylesDialog(); + break; + case 'gen_timer_styles': + _openTextStyleGenerator(); + break; } }, itemBuilder: (BuildContext context) { @@ -1479,6 +1673,16 @@ class _MainScreenState extends State { child: Text(context .read() .translate('clear_stat'))), + PopupMenuItem( + value: 'timer_styles', + child: Text(context + .read() + .translate('m_styles'))), + PopupMenuItem( + value: 'gen_timer_styles', + child: Text(context + .read() + .translate('m_g_styles'))), ]; }, ), diff --git a/lib/socket_service.dart b/lib/socket_service.dart index 134e8ff..d5cb2cb 100644 --- a/lib/socket_service.dart +++ b/lib/socket_service.dart @@ -1,3 +1,5 @@ +// ignore_for_file: library_prefixes + import 'package:socket_io_client/socket_io_client.dart' as IO; import 'package:logging/logging.dart'; @@ -25,7 +27,6 @@ class SocketService { }); socket.on('connect_error', (error) { - print('Connection error: $error'); _logger.severe('Ошибка подключения socket: $error'); }); @@ -49,7 +50,7 @@ class SocketService { Future connect() async { _logger.info('Подключение к socket'); socket.connect(); - await Future.delayed(Duration(seconds: 2)); + await Future.delayed(const Duration(seconds: 2)); if (socket.connected) { _logger.info('Socket успешно подключен'); } else { @@ -61,7 +62,7 @@ class SocketService { _logger.info('Закрытие socket соединения'); socket.disconnect(); socket.dispose(); - await Future.delayed(Duration(milliseconds: 500)); + await Future.delayed(const Duration(milliseconds: 500)); _logger.info('Socket соединение закрыто'); } } diff --git a/lib/style_screen.dart b/lib/style_screen.dart new file mode 100644 index 0000000..56ecd20 --- /dev/null +++ b/lib/style_screen.dart @@ -0,0 +1,400 @@ +// ignore_for_file: library_private_types_in_public_api + +import 'package:flutter/material.dart'; +import 'package:flutter_colorpicker/flutter_colorpicker.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:flutter/services.dart'; +import 'package:provider/provider.dart'; +import 'main.dart'; + +class StyleGeneratorScreen extends StatefulWidget { + const StyleGeneratorScreen({super.key}); + + @override + _StyleGeneratorScreenState createState() => _StyleGeneratorScreenState(); +} + +class _StyleGeneratorScreenState extends State { + double _fontSize = 40; + Color _textColor = Colors.black; + Color _backgroundColor = Colors.white; + Color _textShadowColor = Colors.black; + double _textShadowOffsetX = 2.0; + double _textShadowOffsetY = 2.0; + double _borderRadius = 5.0; + double _borderWidth = 1.0; + Color _borderColor = Colors.black; + String _fontFamily = 'Roboto'; + double _widthBlock = 190.0; + double _heightBlock = 75.0; + String _fontPath = ''; + + bool _showBackground = true; + bool _showTextShadow = true; + bool _showBorder = true; + + TextStyle _buildTextStyle() { + return GoogleFonts.getFont( + _fontFamily, + fontSize: _fontSize, + color: _textColor, + shadows: _showTextShadow + ? [ + Shadow( + offset: Offset(_textShadowOffsetX, _textShadowOffsetY), + color: _textShadowColor, + ), + ] + : [], + ); + } + + String getCSS() { + String fontFace = _fontPath.isNotEmpty + ? ''' +@font-face { + font-family: 'CustomFont'; + src: url('file://${Uri.encodeComponent(_fontPath)}'); +} + ''' + : ''' +@import url('https://fonts.googleapis.com/css2?family=${Uri.encodeComponent(_fontFamily)}&display=swap'); + '''; + + return ''' +$fontFace + +body { + background-color: #fff0; + margin: 0 auto; + overflow: hidden; + display: flex; + justify-content: center; + font-family: ${_fontPath.isNotEmpty ? 'CustomFont' : _fontFamily}; +} + +#timer { + color: ${_colorToHex(_textColor)}; + font-size: ${_fontSize}px; + ${_showBackground ? 'background-color: ${_colorToHex(_backgroundColor)};' : ''} + ${_showTextShadow ? 'text-shadow: ${_textShadowOffsetX}px ${_textShadowOffsetY}px ${_colorToHex(_textShadowColor)};' : ''} + ${_showBorder ? 'border-radius: ${_borderRadius}px;' : ''} + ${_showBorder ? 'border: ${_borderWidth}px solid ${_colorToHex(_borderColor)};' : ''} + width: ${_widthBlock}px; + height: ${_heightBlock}px; + display: flex; + flex-wrap: nowrap; + align-items: center; + justify-content: center; + font-family: ${_fontPath.isNotEmpty ? 'CustomFont' : _fontFamily}; +} + '''; + } + + String _colorToHex(Color color) { + return '#${color.value.toRadixString(16).substring(2).toUpperCase()}'; + } + + void _pickColor(Color currentColor, ValueChanged onColorChanged) { + showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: Text( + context.read().translate('pick_color')), + content: SingleChildScrollView( + child: ColorPicker( + pickerColor: currentColor, + onColorChanged: onColorChanged, + ), + ), + actions: [ + ElevatedButton( + child: Text( + context.read().translate('select')), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + + void _copyCSS() { + Clipboard.setData(ClipboardData(text: getCSS())); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + context.read().translate('css_copied'))), + ); + } + + @override + Widget build(BuildContext context) { + final loc = context.read(); + + return Scaffold( + appBar: AppBar( + title: Text(loc.translate('css_generator_title')), + centerTitle: true, + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + fit: FlexFit.loose, + child: Center( + child: Container( + width: _widthBlock, + height: _heightBlock, + decoration: BoxDecoration( + color: _showBackground + ? _backgroundColor + : Colors.transparent, + borderRadius: _showBorder + ? BorderRadius.circular(_borderRadius) + : null, + border: _showBorder + ? Border.all( + color: _borderColor, width: _borderWidth) + : null, + ), + child: Center( + child: Text( + '00:00:00', + style: _buildTextStyle(), + ), + ), + ), + ), + ), + const SizedBox(height: 20), + _buildToggleRow( + loc.translate('background'), _showBackground, (val) { + setState(() { + _showBackground = val; + }); + }), + _buildToggleRow( + loc.translate('text_shadow'), _showTextShadow, (val) { + setState(() { + _showTextShadow = val; + }); + }), + _buildToggleRow(loc.translate('border'), _showBorder, + (val) { + setState(() { + _showBorder = val; + }); + }), + const SizedBox(height: 20), + _buildSliderRow( + loc.translate('font_size'), _fontSize, 10, 100, (val) { + setState(() { + _fontSize = val; + }); + }), + const SizedBox(height: 10), + _buildSliderRow( + loc.translate('width_block'), _widthBlock, 10, 800, + (val) { + setState(() { + _widthBlock = val; + }); + }), + const SizedBox(height: 10), + _buildSliderRow( + loc.translate('height_block'), _heightBlock, 10, 800, + (val) { + setState(() { + _heightBlock = val; + }); + }), + const SizedBox(height: 10), + _buildColorPickerRow( + loc.translate('text_color'), _textColor, (color) { + setState(() { + _textColor = color; + }); + }), + const SizedBox(height: 10), + _buildFontPickerRow( + loc.translate('font_family'), _fontFamily, (font) { + setState(() { + if (font != null) { + _fontFamily = font; + } + }); + }), + const SizedBox(height: 10), + TextField( + decoration: InputDecoration( + labelText: loc.translate('custom_font'), + ), + onChanged: (value) { + setState(() { + _fontPath = value; + }); + }, + ), + const SizedBox(height: 10), + if (_showBackground) + _buildColorPickerRow( + loc.translate('background_color'), _backgroundColor, + (color) { + setState(() { + _backgroundColor = color; + }); + }), + const SizedBox(height: 10), + if (_showTextShadow) ...[ + _buildColorPickerRow( + loc.translate('text_shadow_color'), _textShadowColor, + (color) { + setState(() { + _textShadowColor = color; + }); + }), + const SizedBox(height: 10), + _buildSliderRow(loc.translate('text_shadow_offset_x'), + _textShadowOffsetX, -10, 10, (val) { + setState(() { + _textShadowOffsetX = val; + }); + }), + const SizedBox(height: 10), + _buildSliderRow(loc.translate('text_shadow_offset_y'), + _textShadowOffsetY, -10, 10, (val) { + setState(() { + _textShadowOffsetY = val; + }); + }), + ], + const SizedBox(height: 10), + if (_showBorder) ...[ + _buildSliderRow( + loc.translate('border_width'), _borderWidth, 0, 10, + (val) { + setState(() { + _borderWidth = val; + }); + }), + const SizedBox(height: 10), + _buildSliderRow( + loc.translate('border_radius'), _borderRadius, 0, 50, + (val) { + setState(() { + _borderRadius = val; + }); + }), + const SizedBox(height: 10), + _buildColorPickerRow( + loc.translate('border_color'), _borderColor, (color) { + setState(() { + _borderColor = color; + }); + }), + ], + const SizedBox(height: 20), + ElevatedButton( + onPressed: _copyCSS, + style: ElevatedButton.styleFrom( + padding: + const EdgeInsets.symmetric(horizontal: 24, vertical: 12), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8.0), + ), + ), + child: Text(loc.translate('copy_css')), + ), + ], + ), + ), + ), + ], + ), + ), + ); + } + + Widget _buildSliderRow(String label, double value, double min, double max, + ValueChanged onChanged) { + return Row( + children: [ + Text(label, style: const TextStyle(fontSize: 16)), + Expanded( + child: Slider( + value: value, + min: min, + max: max, + onChanged: onChanged, + ), + ), + Text(value.toStringAsFixed(1), style: const TextStyle(fontSize: 16)), + ], + ); + } + + Widget _buildToggleRow( + String label, bool value, ValueChanged onChanged) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(label, style: const TextStyle(fontSize: 16)), + Switch( + value: value, + onChanged: onChanged, + ), + ], + ); + } + + Widget _buildColorPickerRow( + String label, Color currentColor, ValueChanged onColorChanged) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(label, style: const TextStyle(fontSize: 16)), + ElevatedButton( + onPressed: () => _pickColor(currentColor, onColorChanged), + style: ElevatedButton.styleFrom( + backgroundColor: currentColor, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + ), + child: Text(context.read().translate('pick'), + style: const TextStyle(color: Colors.white)), + ), + ], + ); + } + + Widget _buildFontPickerRow( + String label, String currentFont, ValueChanged onFontChanged) { + final fontNames = GoogleFonts.asMap().keys.toList(); + + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(label, style: const TextStyle(fontSize: 16)), + DropdownButton( + value: currentFont, + items: fontNames.map((String font) { + return DropdownMenuItem( + value: font, + child: Text(font, style: TextStyle(fontFamily: font)), + ); + }).toList(), + onChanged: onFontChanged, + ), + ], + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index f66c4c2..5134c7b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,107 +1,47 @@ -name: donat_timer -description: "Donaton Timer." -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -# In Windows, build-name is used as the major, minor, and patch parts -# of the product and file versions while build-number is used as the build suffix. -version: 2.0.2+1 +name: DonathonTimer +description: "Donathon Timer - A powerful and customizable timer application designed for live streaming and event management." +publish_to: 'none' +version: 2.0.3+1 environment: sdk: '>=3.4.3 <4.0.0' -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. dependencies: flutter_localizations: sdk: flutter flutter: sdk: flutter intl: ^0.19.0 - provider: ^6.0.0 - http: ^1.2.1 + provider: ^6.1.2 + http: ^1.2.2 logging: ^1.2.0 - shared_preferences: ^2.2.3 - socket_io_client: ^1.0.2 - web_socket_channel: ^2.1.0 - cupertino_icons: ^1.0.6 - http_server: ^1.0.0 + shared_preferences: ^2.3.1 + socket_io_client: ^2.0.3+1 + web_socket_channel: ^3.0.1 + cupertino_icons: ^1.0.8 shelf: ^1.4.1 flutter_colorpicker: ^1.1.0 window_manager: ^0.3.9 - path_provider: ^2.1.3 + path_provider: ^2.1.4 url_launcher: ^6.3.0 qr_flutter: ^4.1.0 - network_info_plus: ^5.0.3 + network_info_plus: ^6.0.0 audioplayers: ^6.0.0 google_fonts: ^6.2.1 + desktop_webview_window: ^0.2.3 + webview_windows: ^0.4.0 + translator: ^1.0.0 dev_dependencies: flutter_test: sdk: flutter - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. flutter_lints: ^4.0.0 -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. uses-material-design: true - - # To add assets to your application, add an assets section, like this: assets: + - assets/styles.json - assets/pepe.gif - assets/pepe.mp3 - - lang/ - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages + - lang/ \ No newline at end of file diff --git a/setup.iss b/setup.iss index 8d07437..1a89400 100644 --- a/setup.iss +++ b/setup.iss @@ -1,12 +1,17 @@ [Setup] AppName=Донатон Таймер -AppVersion=2.0.1 +AppVersion=2.0.3 DefaultDirName={pf}\DTimer DefaultGroupName=Донатон OutputBaseFilename=DTimer Setup Compression=lzma SolidCompression=yes SetupIconFile=Донатон Таймер.ico +WizardStyle=modern + +[Languages] +Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl" +Name: "en"; MessagesFile: "compiler:Default.isl" [Files] Source: "build\windows\x64\runner\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs @@ -19,3 +24,33 @@ Name: "{userdesktop}\Донатон Таймер"; Filename: "{app}\donat_timer. [Run] Filename: "{app}\donat_timer.exe"; Description: "Запустить Таймер Донатона"; Flags: nowait postinstall skipifsilent +[Code] +var + DeleteSettingsAndFiles: Boolean; + +procedure InitializeUninstallProgressForm(); +begin + DeleteSettingsAndFiles := False; + if MsgBox(ExpandConstant('{cm:DeleteSettingsPrompt}'), mbConfirmation, MB_YESNO) = IDYES then + begin + DeleteSettingsAndFiles := True; + end; +end; + +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +begin + if (CurUninstallStep = usPostUninstall) and DeleteSettingsAndFiles then + begin + DelTree(ExpandConstant('{userappdata}\MjKey Studio'), True, True, True); + DelTree(ExpandConstant('{app}'), True, True, True); + end; +end; + +[UninstallDelete] +Type: filesandordirs; Name: "{app}" + +[CustomMessages] +ru.SetupWindowTitle=Установка Донатон Таймера +ru.DeleteSettingsPrompt=Вы хотите удалить настройки и все файлы программы? +en.SetupWindowTitle=Installation of Donathon Timer +en.DeleteSettingsPrompt=Do you want to delete settings and all program files? \ No newline at end of file