diff --git a/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png b/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png new file mode 100644 index 0000000..9362da3 Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..584769d Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..1c22bd9 Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png b/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png new file mode 100644 index 0000000..43459f4 Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..e896bc5 Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..721f2e0 Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png b/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png new file mode 100644 index 0000000..778d138 Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..522f054 Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..cd8dc1b Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png new file mode 100644 index 0000000..91e3d43 Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..d6c08e1 Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..df86c18 Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png new file mode 100644 index 0000000..42d88ac Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..66bb099 Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..8f70299 Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..854fef6 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..6431225 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b7..144c1e6 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d4391..022cca9 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..ebd3cdb 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..8ac516d 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/assets/blaster.svg b/assets/blaster.svg new file mode 100644 index 0000000..f578cca --- /dev/null +++ b/assets/blaster.svg @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/assets/blaster_bg.png b/assets/blaster_bg.png new file mode 100644 index 0000000..5503a0d Binary files /dev/null and b/assets/blaster_bg.png differ diff --git a/assets/blaster_fg.png b/assets/blaster_fg.png new file mode 100644 index 0000000..368f234 Binary files /dev/null and b/assets/blaster_fg.png differ diff --git a/assets/blaster_icon.png b/assets/blaster_icon.png new file mode 100644 index 0000000..d8db2e8 Binary files /dev/null and b/assets/blaster_icon.png differ diff --git a/assets/blaster_mono.png b/assets/blaster_mono.png new file mode 100644 index 0000000..ba05833 Binary files /dev/null and b/assets/blaster_mono.png differ diff --git a/lib/note_editor.dart b/lib/note_editor.dart index 5431d1a..44f1dd9 100644 --- a/lib/note_editor.dart +++ b/lib/note_editor.dart @@ -3,8 +3,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_code_editor/flutter_code_editor.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown_latex/flutter_markdown_latex.dart'; +import 'package:flutter_svg/svg.dart'; import 'package:markdown/markdown.dart' as md; -import 'package:path/path.dart' as path; +import 'package:shared_preferences/shared_preferences.dart'; import 'themes/day.dart'; import 'themes/night.dart'; import 'themes/markdown.dart'; @@ -25,57 +26,102 @@ class NoteEditorScreen extends StatefulWidget { } class _NoteEditorScreenState extends State { - bool isLoading = true; - bool _isPreviewMode = false; // Default: Editing mode late CodeController _controller; - double _fontSize = 16.0; // Default font size + late String _initialContent; + bool _isPreviewMode = false; + bool _isLoading = true; + bool _autoSaveEnabled = false; // Controlled by user toggle + double _fontSize = 16.0; @override void initState() { super.initState(); + _loadPreferences(); _loadNoteContent(); } + Future _loadPreferences() async { + final prefs = await SharedPreferences.getInstance(); + setState(() { + _autoSaveEnabled = prefs.getBool('auto_save_enabled') ?? false; + }); + } + + Future _setAutoSaveEnabled(bool value) async { + final prefs = await SharedPreferences.getInstance(); + await prefs.setBool('auto_save_enabled', value); + setState(() { + _autoSaveEnabled = value; + }); + } + Future _loadNoteContent() async { - String content = ""; try { - content = await widget.note.readAsString(); + _initialContent = await widget.note.readAsString(); } catch (e) { print("❌ Failed to read file: ${widget.note.path}"); + _initialContent = ""; } setState(() { _controller = CodeController( - text: content, + text: _initialContent, language: markdown, ); - _controller.addListener(_saveNote); - _controller.popupController.enabled = false; - isLoading = false; + _controller.addListener(_onTextChanged); + _isLoading = false; }); } + void _onTextChanged() { + if (_autoSaveEnabled && _controller.text != _initialContent) { + _saveNote(); + } + } + Future _saveNote() async { try { - final notesDirectory = widget.notesDirectoryPath ?? - widget.note.parent.path; // ✅ Use correct directory + if (_controller.text == _initialContent) return; // No change, skip saving - // Get the full path of the original file, preserving subfolder structure - final relativeNotePath = path.relative(widget.note.path, from: notesDirectory); - final newFilePath = path.join(notesDirectory, relativeNotePath); // ✅ Preserve subfolder + await widget.note.writeAsString(_controller.text); + _initialContent = _controller.text; // Update initial state - print("📝 Attempting to save note at: $newFilePath"); - final newFile = File(newFilePath); - await newFile.writeAsString(_controller.text); - - print("✅ Successfully saved note at: $newFilePath"); - } catch (e, stackTrace) { + print("✅ Note saved successfully"); + } catch (e) { print("❌ Error saving note: ${widget.note.path}"); - print("⚠️ Exception: $e"); - print("🛠 Stack trace: $stackTrace"); } } + Future _onWillPop() async { + if (_controller.text == _initialContent) return true; // No changes, exit + + return await showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text("Save Changes?"), + content: Text("You have unsaved changes. Save before exiting?"), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(true), // Discard and exit + child: Text("Discard"), + ), + TextButton( + onPressed: () async { + await _saveNote(); + Navigator.of(context).pop(true); // Save and exit + }, + child: Text("Save"), + ), + TextButton( + onPressed: () => Navigator.of(context).pop(false), // Stay on page + child: Text("Cancel"), + ), + ], + ), + ) ?? + false; + } + void _updateFontSize(double newSize) { setState(() { _fontSize = newSize; @@ -84,138 +130,153 @@ class _NoteEditorScreenState extends State { @override void dispose() { - _controller.removeListener(_saveNote); + _controller.removeListener(_onTextChanged); _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(widget.note.uri.pathSegments.last.replaceAll('.md', '')), - actions: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: 15), - child: PopupMenuButton( - icon: Icon(Icons.radio_button_checked, color: Colors.orange), - onSelected: (String value) { - if (value == 'Toggle Preview') { - setState(() { - _isPreviewMode = !_isPreviewMode; - }); - } + return WillPopScope( + onWillPop: _onWillPop, + child: Scaffold( + appBar: AppBar( + title: Text(widget.note.uri.pathSegments.last.replaceAll('.md', '')), + leading: IconButton( + icon: Icon(Icons.arrow_back), + onPressed: () async { + if (await _onWillPop()) { + Navigator.pop(context); + } + }, + ), + actions: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 15), + child: PopupMenuButton( + icon: SvgPicture.asset( + "assets/blaster.svg", + width: 30, + color: Colors.orange, + ), + onSelected: (String value) { + switch (value) { + case 'Save': + _saveNote(); + break; + case 'Toggle Autosave': + _setAutoSaveEnabled(!_autoSaveEnabled); + break; + case 'Toggle Preview': + setState(() { + _isPreviewMode = !_isPreviewMode; + }); + break; + } + }, + itemBuilder: (BuildContext context) => [ + PopupMenuItem( + value: 'Save', + child: ListTile( + leading: Icon(Icons.save), + title: Text("Save"), + ), + ), + PopupMenuItem( + value: 'Toggle Autosave', + child: ListTile( + leading: Icon(_autoSaveEnabled + ? Icons.toggle_on + : Icons.toggle_off), + title: Text(_autoSaveEnabled + ? "Disable Autosave" + : "Enable Autosave"), + ), + ), + PopupMenuItem( + value: 'Toggle Preview', + child: ListTile( + leading: + Icon(_isPreviewMode ? Icons.edit : Icons.preview), + title: + Text(_isPreviewMode ? "Edit Mode" : "Preview Mode"), + ), + ), + ], + ), + ), + ], + ), + body: _isLoading + ? Center(child: CircularProgressIndicator()) + : _isPreviewMode + ? Padding( + padding: const EdgeInsets.all(16.0), + child: SingleChildScrollView( + child: MarkdownBody( + builders: { + 'latex': LatexElementBuilder( + textStyle: TextStyle( + color: widget.isDarkMode + ? Colors.white + : Colors.black)), }, - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - value: 'Toggle Preview', - child: ListTile( - leading: Icon(_isPreviewMode ? Icons.edit : Icons.preview), - title: Text(_isPreviewMode ? 'Edit Mode' : 'Preview Mode'), - ), - ), - PopupMenuItem( - enabled: false, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text('Font Size'), - StatefulBuilder( - builder: (context, setState) { - return Slider( - value: _fontSize, - min: 12.0, - max: 24.0, - divisions: 6, - label: _fontSize.toString(), - onChanged: (newSize) { - setState(() { - _fontSize = newSize; - }); - _updateFontSize(newSize); - }, - ); - }, - ), - ], - ), - ), - ], + extensionSet: md.ExtensionSet( + [LatexBlockSyntax()], + [LatexInlineSyntax()], + ), + data: _controller.text, + selectable: true, + styleSheet: MarkdownStyleSheet( + p: TextStyle( + fontSize: _fontSize, + color: widget.isDarkMode + ? Colors.white + : Colors.black), + h1: TextStyle( + fontSize: _fontSize + 8, + color: widget.isDarkMode + ? Colors.white + : Colors.black, + fontWeight: FontWeight.bold), + h2: TextStyle( + fontSize: _fontSize + 6, + color: widget.isDarkMode + ? Colors.white + : Colors.black, + fontWeight: FontWeight.bold), + h3: TextStyle( + fontSize: _fontSize + 4, + color: widget.isDarkMode + ? Colors.white + : Colors.black, + fontWeight: FontWeight.bold), + code: TextStyle( + fontSize: _fontSize, + backgroundColor: Colors.transparent), + codeblockDecoration: BoxDecoration( + color: Colors.transparent), + ), ), ), - ], - ), - body: isLoading - ? Center( - child: - CircularProgressIndicator()) // Show loader while initializing - : _isPreviewMode - ? Padding( - padding: const EdgeInsets.all(16.0), - child: SingleChildScrollView( - child: MarkdownBody( - builders: { - 'latex': LatexElementBuilder( - textStyle: TextStyle( - color: widget.isDarkMode - ? Colors.white - : Colors.black)), - }, - extensionSet: md.ExtensionSet( - [LatexBlockSyntax()], - [LatexInlineSyntax()], - ), - data: _controller - .text, // ✅ Plain Markdown without syntax highlighting - selectable: true, // ✅ Allows text selection - styleSheet: MarkdownStyleSheet( - p: TextStyle( - fontSize: _fontSize, - color: widget.isDarkMode - ? Colors.white - : Colors.black), - h1: TextStyle( - fontSize: _fontSize + 8, - color: - widget.isDarkMode ? Colors.white : Colors.black, - fontWeight: FontWeight.bold), - h2: TextStyle( - fontSize: _fontSize + 6, - color: - widget.isDarkMode ? Colors.white : Colors.black, - fontWeight: FontWeight.bold), - h3: TextStyle( - fontSize: _fontSize + 4, - color: - widget.isDarkMode ? Colors.white : Colors.black, - fontWeight: FontWeight.bold), - code: TextStyle( - fontSize: _fontSize, - backgroundColor: Colors - .transparent), // ✅ Disables syntax highlighting - codeblockDecoration: BoxDecoration( - color: Colors - .transparent), // ✅ Removes background color from code blocks - ), - ), - ), - ) - : Padding( - padding: const EdgeInsets.all(16.0), - child: CodeTheme( - data: CodeThemeData( - styles: widget.isDarkMode ? nightTheme : dayTheme), - child: SingleChildScrollView( - child: WrappedCodeField( - wrap: true, - controller: _controller, - textStyle: TextStyle( - fontSize: _fontSize, - ), - ), - ), - ), + ) + : Padding( + padding: const EdgeInsets.all(16.0), + child: CodeTheme( + data: CodeThemeData( + styles: widget.isDarkMode ? nightTheme : dayTheme), + child: SingleChildScrollView( + child: WrappedCodeField( + wrap: true, + controller: _controller, + textStyle: TextStyle( + fontSize: _fontSize, ), + ), + ), + ), + ), + ), ); } } diff --git a/lib/note_list.dart b/lib/note_list.dart index c276c44..295df10 100644 --- a/lib/note_list.dart +++ b/lib/note_list.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:file_picker/file_picker.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:open_filex/open_filex.dart'; import 'package:path/path.dart' as path; @@ -396,6 +397,7 @@ class _NoteListScreenState extends State { ScaffoldMessenger.of(context).showSnackBar( SnackBar( + duration: const Duration(seconds: 3), content: Text('Note moved to trash'), action: SnackBarAction( label: 'Undo', @@ -502,6 +504,7 @@ class _NoteListScreenState extends State { autocorrect: false, textInputAction: TextInputAction.done, controller: searchController, + cursorColor: Colors.orange, decoration: InputDecoration( hintText: 'Search or enter a command...', border: InputBorder.none, @@ -521,8 +524,11 @@ class _NoteListScreenState extends State { Padding( padding: EdgeInsets.symmetric(horizontal: 15), child: PopupMenuButton( - icon: Icon(Icons.radio_button_checked, - color: Colors.orange), // Menu button (⋮) + icon: SvgPicture.asset( + "assets/blaster.svg", + width: 30, + color: Colors.orange, + ), onSelected: (String value) { switch (value) { case 'Toggle Tags': diff --git a/pubspec.lock b/pubspec.lock index c89ff32..fd9abfb 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + archive: + dependency: transitive + description: + name: archive + sha256: "528579c7e4579719f04b21eeeeddfd73a18b31dabc22766893b7d1be7f49b967" + url: "https://pub.dev" + source: hosted + version: "4.0.3" args: dependency: transitive description: @@ -49,6 +57,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" clock: dependency: transitive description: @@ -150,6 +174,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c + url: "https://pub.dev" + source: hosted + version: "0.14.3" flutter_lints: dependency: "direct dev" description: @@ -191,7 +223,7 @@ packages: source: hosted version: "2.0.24" flutter_svg: - dependency: transitive + dependency: "direct main" description: name: flutter_svg sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b @@ -248,6 +280,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: "13d3349ace88f12f4a0d175eb5c12dcdd39d35c4c109a8a13dfeb6d0bd9e31c3" + url: "https://pub.dev" + source: hosted + version: "4.5.3" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -480,6 +528,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + posix: + dependency: transitive + description: + name: posix + sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + url: "https://pub.dev" + source: hosted + version: "6.0.1" provider: dependency: transitive description: @@ -757,6 +813,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" sdks: dart: ">=3.6.0 <4.0.0" flutter: ">=3.27.0" diff --git a/pubspec.yaml b/pubspec.yaml index a8d1a00..f8fbc7b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,38 +1,14 @@ name: muzzlevelocity description: "A new Flutter project." -# 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: 1.0.0+1 environment: sdk: ^3.6.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: sdk: flutter - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 file_picker: ^9.0.0 flutter_highlight: ^0.7.0 @@ -47,56 +23,22 @@ dependencies: shared_preferences: ^2.5.2 highlight: ^0.7.0 open_filex: ^4.6.0 + flutter_svg: ^2.0.17 + flutter_launcher_icons: ^0.14.3 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: ^5.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 + assets: + - assets/ - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/to/resolution-aware-images - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/to/asset-from-package - - # 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/to/font-from-package +flutter_launcher_icons: + android: true + image_path: "assets/blaster_icon.png" + adaptive_icon_background: "assets/blaster_bg.png" + adaptive_icon_foreground: "assets/blaster_fg.png" + adaptive_icon_monochrome: "assets/blaster_mono.png" \ No newline at end of file