GithubHelp home page GithubHelp logo

birjuvachhani / spider Goto Github PK

View Code? Open in Web Editor NEW
175.0 4.0 19.0 5.76 MB

A small dart library to generate Assets dart code from assets folder.

Home Page: https://spider.birju.dev/

License: Apache License 2.0

Dart 99.89% Batchfile 0.11%
flutter flutter-package dart dartlang dart2 dart-library dart-package library metaprogramming code-generation

spider's Introduction

Banner

Spider

A small dart library to generate Assets dart code from assets folder. It generates dart class with static const variables in it which can be used to reference the assets safely anywhere in the flutter app.

Build Tests codecov Pub Version

User Guide: Spider Docs

Breaking Changes since v4.0.0:

  • --info flag command is now --about command.
  • --check-updates flag command is now --check-for-updates.

Example

Before

Widget build(BuildContext context) {
  return Image(image: AssetImage('assets/background.png'));
}

After

Widget build(BuildContext context) {
  return Image(image: AssetImage(Assets.background));
}

Generated Assets Class

class Assets {
  static const String background = 'assets/background.png';
}

This method allows no error scope for string typos. Also, it provides auto-complete in the IDE which comes very handy when you have large amount of assets.

Installation

Install using pub

This is package is an independent library that is not linked to your project. So there's no need to add it to your flutter project as it works as a global command line tool for all of your projects.

dart pub global activate spider

Install using Homebrew

brew tap birjuvachhani/spider
brew install spider

Run following command to see help:

spider --help

Usage

Create Configuration File

Spider provides a very easy and straight forward way to create a configuration file. Execute following command, and it will create a configuration file with default configurations in it.

spider create

To append configs in pubspec.yaml file, execute following command.

spider create --add-in-pubspec

To use a custom directory path for configuration file, execute following command.

spider create -p ./directory/path/for/config

Now you can modify available configurations and Spider will use those configs when generating dart code.

Use JSON config file

Though above command creates YAML format for config file, spider also supports JSON format for config file. Use this command to create JSON config file instead of YAML.

# Create in root directory
spider create --json

# or

# custom directory path
spider create -p ./directory/path/for/config --json

No matter which config format you use, JSON or YAML, spider automatically detects it and uses it for code generation.

Here's the default configuration that will be in the config file:

# Generated by Spider

# Generates unit tests to verify that the assets exists in assets directory
generate_tests: true

# Use this to remove vcs noise created by the `generated` comments in dart code
no_comments: true

# Exports all the generated file as the one library
export: true

# This allows you to import all the generated references with 1 single import!
use_part_of: true

# Location where all the generated references will be stored
package: resources

groups:
  - path: assets/images
    class_name: Images
    types: [ .png, .jpg, .jpeg, .webp, .webm, .bmp ]

Generate Code

Run following command to generate dart code:

spider build

If you're using custom directory path for the configuration file, then you can specify the config file path like this:

spider -p ./path/to/config/file/spider.yaml build

Manual

Manual

Watch Directory

Spider can also watch given directory for changes in files and rebuild dart code automatically. Use following command to watch for changes:

spider build --watch

see help for more information:

spider build --help

Smart Watch (Experimental)

The normal --watch option watches for any kind of changes that happens in the directory. However, this can be improved my smartly watching the directory. It includes ignoring events that doesn't affect anything like file content changes. Also, it only watches allowed file types and rebuilds upon changes for those files only.

Run following command to watch directories smartly.

spider build --smart-watch

Categorizing by File Extension

By default, Spider allows any file to be referenced in the dart code. but you can change that behavior. You can specify which files you want to be referenced.

path: assets
class_name: Assets
package: res
types: [ jpg, png, jpeg, webp, bmp, gif ]

Use Prefix

You can use prefixes for names of the generated dart references. Prefixes will be attached to the formatted reference names.

path: assets
class_name: Assets
package: res
prefix: ic
Output
class Assets {
  static const String icCamera = 'assets/camera.png';
  static const String icLocation = 'assets/location.png';
}

Advanced Configuration

Spider provides supports for multiple configurations and classifications. If you want to group your assets by module, type or anything, you can do that using groups in spider.

Example

Suppose you have both vector(SVGs) and raster images in your project, and you want to me classified separately so that you can use them with separate classes. You can use groups here. Keep your vector and raster images in separate folder and specify them in the config file.

spider.yaml

groups:
  - path: assets/images
    class_name: Images
    package: res
  - path: assets/vectors
    class_name: Svgs
    package: res

Here, first item in the list indicates to group assets of assets/images folder under class named Images and the second one indicates to group assets of assets/vectors directory under class named Svgs.

So when you refer to Images class, auto-complete suggests raster images only, and you know that you can use them with AssetImage and other one with vector rendering library.

Multi-path configuration

From Spider v0.4.0, multiple paths can be specified for a single group to collect references from multiple directories and generate all the references under single dart class.

Example

groups:
  - paths:
      - assets/images
      - assets/more_images/
    class_name: Images
    package: res
    types: [ .png, .jpg, .jpeg, .webp, .webm, .bmp ]

By using paths, multiple source directories can be specified. Above example will generate references from assets/images and assets/more_images/ under a single dart class named Images.

Generating Tests

Spider v0.4.0 adds support for generating test cases for generated dart references to make sure that the asset file is present in the project. These tests can also be run on CI servers. To enable tests generation, specify generate_tests flag in spider.yaml or spider.json configuration file as shown below.

generate_tests: true

This flag will indicate spider to generate tests for all the generated dart references.

Generate values list

Familiar with Enum.values list which contains all the enum values? Spider also provides support for generating values list for all the asset references in given dart class. Use use_references_list global config to enable values list generation. This is disabled by default as it can be overwhelming to have this code-gen if you don't need it.

# global config
use_references_list: true

Enable Verbose Logging

Spider prefers not to overwhelm terminal with verbose logs that are redundant for most of the cases. However, those verbose logs come quite handy when it comes to debug anything. You can enable verbose logging by using --verbose option on build command.

spider build --verbose

# watching directories with verbose logs
spider build --watch --verbose

Liked spider?

Show some love and support by starring the repository. ⭐

Want to support my work?

Sponsor Author

Or You can

Buy Me A Coffee

License

Copyright © 2020 Birju Vachhani

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

spider's People

Contributors

alexi-zemcov avatar aqluse avatar birjuvachhani avatar dkrutskikh avatar fabiancrx avatar imgbotapp avatar sanlovty avatar wsydna avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

spider's Issues

Installation help

Hi there,
I can't seem to use this library.

  1. I've added spider: ^0.3.6 to my pubspec.yaml and hit Packages get.
  2. Open Terminal and running pub global activate spider command with the following error:
bash: pub: command not found
  1. Tried also spider --help and got:
bash: spider: command not found

Asset Documentation.

Is your feature request related to a problem? Please describe.
It's difficult to figure out whether some asset already exists. It would be great to have a markdown file with preview for all image assets.

Describe the solution you'd like
I am already using spider to generate the constants file. It would be nice if this functionality could be added to spider itself.

Describe alternatives you've considered
I created a small python script that generates a markdown file with preview for all image assets.

Feature/package-property-for-groups

Is your feature request related to a problem? Please describe.

In current version it's only available to add package property in global scope ( to all the assets groups).
It would be much more convenient if the user can choose the directory for each group.

Describe the solution you'd like

Add a package property to AssetGroup. If global package above is exists , than we use global package, otherwise we use group scope.

Ability to use generator with assets bundled with package

While making a package with assets bundled with it, I encountered a problem that spider cannot recognize package related path in yaml config and then cannot generate proper classes for assets following package convention paths.

https://docs.flutter.dev/development/ui/assets-and-images#bundling-of-package-assets

Manual output edits make it work.

I would suggest to make a tool consider paths like 'packages/some_package_name' internally as 'lib' when assuring its existence and then just use the path entered as it is.
Also I would added a flag to drop this path prefix as some potential components may allow to put the package prefix separately from path, so it won't double in for the case.

spider build command error

version 0.3.0

An error occurred when I executed spider build command with the following information:

❯ spider build        
Unhandled exception:
type '_Directory' is not a subtype of type 'File'
#0      DartClassGenerator.createFileMap.<anonymous closure> (package:spider/src/dart_class_generator.dart:77:64)
#1      WhereIterator.moveNext (dart:_internal/iterable.dart:442:11)
#2      new List.from (dart:core-patch/array_patch.dart:47:19)
#3      Iterable.toList (dart:core/iterable.dart:400:5)
#4      DartClassGenerator.createFileMap (package:spider/src/dart_class_generator.dart:77:71)
#5      DartClassGenerator.process (package:spider/src/dart_class_generator.dart:46:22)
#6      DartClassGenerator.generate (package:spider/src/dart_class_generator.dart:42:5)
#7      Spider._generateFor (package:spider/spider.dart:70:15)
#8      Spider.build.<anonymous closure> (package:spider/spider.dart:49:21)
#9      ListMixin.forEach (dart:collection/list.dart:69:13)
#10     Spider.build (package:spider/spider.dart:48:25)
#11     processBuildCommand (file:///Users/madroid/.pub-cache/hosted/pub.dartlang.org/spider-0.3.0/bin/main.dart:150:12)
#12     main (file:///Users/madroid/.pub-cache/hosted/pub.dartlang.org/spider-0.3.0/bin/main.dart:47:9)
#13     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:305:32)
#14     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)

Allow nested class / sub class

Is your feature request related to a problem? Please describe.
This is not really a problem as I am able to use the package without trouble, this is more a quality-of-life feature request.
Let's say I have images under different folders (maybe because they will be used in different features inside the application, or because they are of different types):

- images 
      |---svgs
            |---sgv1
            |---svg2
            |---.....
      |---png
            |---png1
            |---.....

Right now with spider I can create 2 classes, Svgs and Pngs, or create 1 class containing every Svgs and Pngs. I can add a prefix to the Pngs and a prefix to the Svgs, but when using it I will have to do:
Images.pngName1 for a png named Name1 and Images.svgName2 for a svg named Name2.

Describe the solution you'd like
I would like to do:
Images.png.name1 and Images.svg.name2

I think we could add a parameter to the spider.yaml or spider.json file when creating a class called sub_classes (like the sub_groups param works). It would look something like that:

groups:
  - class_name: Images
    sub_classes:
      - path: assets/images/svgs
        class_name: svg
        types: [ .svg ]

      - path: assets/images/pngs
        class_name: png
        types: [ .png ]

Feature/add subgroups support

Subgroups support

⁉️ Questions

Is your feature request related to a problem? Please describe.
No

Describe the solution you'd like
Described in pull-request.

Describe alternatives you've considered
We can talk about how we can best deal with that.

Additional context
nothing.

📜 Description

I faced the problem of impossibility of adding different prefixes in conjunction with paths into the same class. I decided to propose a solution to this "problem" by changing the structure of config.

🏷️ Config examples

JSON

{
  "generate_tests":true,
  "no_comments":true,
  "export":true,
  "use_part_of":true,
  "use_references_list": false,
  "package":"resources",
  "groups": [
      {
        "class_name": "Assets",
        "subgroups": [
          {
            "path": "assets/images",
            "types": [ "jpg" ],
            "prefix": "jpg"
          },
          {
            "path": "assets/images",
            "types": [ "png" ],
            "prefix": "png"
          }
        ]
      }
    ]
}

YAML

  generate_tests: true
  no_comments: true
  export: true
  use_part_of: true
  use_references_list: false
  package: resources
  groups:
    - class_name: Assets
      subgroups:
        - path: assets/images
          types: [ jpg ]
          prefix: jpg
        - path: assets/images
          types: [ png ]
          prefix: png

⚙️ Generated files

Provided that in assets/images were 3 files: (test2.jpg, test1.png, test3.png)

part of 'resources.dart';

class Assets{
  Assets ._();
  
  static const String jpgTest2 = 'assets/images/test2.jpg';
  static const String pngTest1 = 'assets/images/test1.png';
  static const String pngTest3 = 'assets/images/test3.png';
}

Add List<String> values parameter to the genereted files

Please, add static const List<String> values parameter to the genereted files.
It woud be helpful for golden tests, for example:

class Images {
  Images._();

  static const List<String> values = [search, home, backArrow];

  static const String search = 'assets/search.png';
  static const String home = 'assets/home.png';
  static const String backArrow = 'assets/back_arrow.png';
}

In such cases, we can easily iterate all images like this:

for (final icon in Images.values) {
  /*do something cool*/
}

For exapmle, to generate an image with all the possible icons in the application like this:

void main() {
  testGoldens('Icons golden test', (tester) async {
    final builder = GoldenBuilder.column();

    for (final imagePath in Images.values) {
      builder.addScenario(
        iconPath,
        Image.asset(
          iconPath,
          height: 24,
          width: 24,
        ),
      );
    }

    await tester.pumpWidgetBuilder(
      builder.build(),
      surfaceSize: const Size(420, 3650),
      wrapper: materialAppWrapper(theme: AppTheme.defaultTheme),
    );

    await screenMatchesGolden(tester, 'icons');
  });
}

[Feature] Create master class with all the other one as field

Hey,

I think it would be easier to always import the same base class, with all the generated class as field>
Then we can use Class.subclass.img to retrieve the image.

It would be even better, if this could match the directory :

  • assets
    • images
      • root
        • logo_small.png
        • logo_full.png
      • onboarding
        • logo_small.png
        • logo_full.png
      • login
        • bar
          • bar.png
          • icon.png
        • button
          • icon.png
          • button.png
    • svg
      • 1 x
      • 2x

Then we can access Assets.images.login.bar.icon pretty easily.

  1. Only one import to figure out
  2. Easier to find the right image, without looking at the assets folder

Let me know what you thinks about it.
Regards

Feature/add ignore rules for asset-classes

Is your feature request related to a problem? Please describe.

Generated asset-classes come up with non documented members and class being public ones
https://dart-lang.github.io/linter/lints/public_member_api_docs.html
https://dartcodemetrics.dev/docs/rules/common/member-ordering-extended

Describe the solution you'd like

Add ignore rules

Describe alternatives you've considered

Generate docs for both members and class. ( I think it's possible to come up with docs to class and impossible to add logical docs for members, so i decided that ignore rules are enough)

zsh: command not found: spider

Describe the bug
spider create, spider build watch or any spider commands not working

Expected behavior
I'm activated spider package global and i wanted to create spider.yaml by command 'spider create' and it's returns me the error zsh: command not found: spider.But any other commands from flutter or dart working fine

Additional context
This is my flutter doctor log
flutter doctor -v 127 err | at 16:54:00
[✓] Flutter (Channel stable, 3.7.12, on macOS 13.3.1 22E772610a darwin-arm64, locale en-KZ)
• Flutter version 3.7.12 on channel stable at /Users/zham4e_1/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 4d9e56e694 (2 weeks ago), 2023-04-17 21:47:46 -0400
• Engine revision 1a65d409c7
• Dart version 2.19.6
• DevTools version 2.20.1

[!] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
• Android SDK at /Users/zham4e_1/Library/Android/sdk
✗ cmdline-tools component is missing
Run path/to/sdkmanager --install "cmdline-tools;latest"
See https://developer.android.com/studio/command-line for more details.
✗ Android license status unknown.
Run flutter doctor --android-licenses to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 14E222b
• CocoaPods version 1.11.3

[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.3)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] VS Code (version 1.77.3)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.62.0

[✓] VS Code (version 1.77.1)
• VS Code at /Users/zham4e_1/Downloads/Visual Studio Code.app/Contents
• Flutter extension version 3.62.0

[✓] Connected device (3 available)
• iPhone 14 Pro (mobile) • 2A29C43F-B4FB-4ED9-9765-34EFB992BF42 • ios • com.apple.CoreSimulator.SimRuntime.iOS-16-4 (simulator)
• macOS (desktop) • macos • darwin-arm64 • macOS 13.3.1 22E772610a darwin-arm64
• Chrome (web) • chrome • web-javascript • Google Chrome 112.0.5615.137

[✓] HTTP Host Availability
• All required HTTP hosts are available

! Doctor found issues in 1 category.

Add ability to concatenate path to the same class_name

Hi,

A nice feature will be to add several path to the same class, giving the prefix more meaning.
Please find an exemple below :

groups:
  - path: assets/images
    class_name: AssetsImages
    package: assets
    types: [.png, .jpg, .jpeg, .webp, .webm, .bmp]
  - path: assets/onboarding
    class_name: AssetsImages
    package: assets
    prefix:onboarding
    types: [.png, .jpg, .jpeg, .webp, .webm, .bmp]

Regards

Json to translation strings support

Is your feature request related to a problem? Please describe.
The ability to generate icon asset paths is fabulous but it would be great to also generate app_string.dart file from json
For example:

assets/translations/*

en.json
{
  "appTitle": "Title",
  "continueButton": "Continue"
}
ka.json
{
  "appTitle": "სათაური",
  "back": "უკან"
}

Output:

class Strings {
  const Strings._();

  static const appTitle = 'appTitle';
  static const continueButton = 'continueButton';
  static const back = 'back';

}

This is helpful if you are using json based localizations, checkout the article for reference.

In short, you have translation files, en.json, ka.json, ... and you are accessing the translated string by the key, and with this request keys will be extracted as constants.

Describe the solution you'd like
Scan the specific directory assets/translations/ merge all the json keys and export them as a class containing static const instances of retrieved keys.

Describe alternatives you've considered
I'm tried adding the feature to flutter_gen package but the author is holding back.

Unable to create config file

version 0.3.0

An error occurred while executing spider create command. see stack trace:

Unhandled exception:
FileSystemException: Cannot copy file to 'spider.yaml', path = 'C:\config.yaml' (OS Error: The system cannot find the file specified.
, errno = 2)
#0      _File.throwIfError (dart:io/file_impl.dart:645:7)
#1      _File.copySync (dart:io/file_impl.dart:350:5)
#2      Spider.createConfigs (package:spider/spider.dart:58:17)
#3      processCreateCommand (file:///C:/Users/brvac/AppData/Roaming/Pub/Cache/git/spider-8ecc3cf52c8101dce0160ce749f5f94896b7c3bc/bin/main.dart:
155:12)
#4      main (file:///C:/Users/brvac/AppData/Roaming/Pub/Cache/git/spider-8ecc3cf52c8101dce0160ce749f5f94896b7c3bc/bin/main.dart:58:9)
#5      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:305:32)
#6      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)
Unhandled exception:
FileSystemException: Cannot copy file to 'spider.yaml', path = 'C:\config.yaml' (OS Error: The system cannot find the file specified.
, errno = 2)
#0      _File.throwIfError (dart:io/file_impl.dart:645:7)
#1      _File.copySync (dart:io/file_impl.dart:350:5)
#2      Spider.createConfigs (package:spider/spider.dart:58:17)
#3      processCreateCommand (file:///C:/Users/brvac/AppData/Roaming/Pub/Cache/git/spider-8ecc3cf52c8101dce0160ce749f5f94896b7c3bc/bin/main.dart:
155:12)
#4      main (file:///C:/Users/brvac/AppData/Roaming/Pub/Cache/git/spider-8ecc3cf52c8101dce0160ce749f5f94896b7c3bc/bin/main.dart:58:9)
#5      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:305:32)
#6      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)

Adobe XD Support

I have used your library and it is really very helpful
Adobe XD Plugin for Flutter is released access early.
I think your library could be a great help in Adobe XD Plugin
They already using flutter_svg for svgs
And It would be great that they use your library.
Flutter XD Plugin
https://github.com/AdobeXD/xd-to-flutter-plugin

[feature_request] A way to find all unused assets

I wish there was a way to find out if an asset is not being used anywhere in the app. If it's not being used, it makes sense for me to manually delete it and shrink the app's size.

Is this possible to be implemented? I am imagining we should somehow rely on the compiler warning that a particular generated field for an asset is not being used anywhere inside the app. What do you think?

Fails on Flutter 3.13

I get this build error after updating to Flutter 3.13. Can you please fix it?

Building package executable... Failed to build spider:spider: ../../../.pub-cache/hosted/pub.dev/watcher-1.0.2/lib/src/constructable_file_system_event.dart:7:57: Error: The class 'FileSystemEvent' can't be extended, implemented, or mixed in outside of its library because it's a sealed class. abstract class _ConstructableFileSystemEvent implements FileSystemEvent {

References are not generating for assets with same file name.

When assets with same file name are containing in different subdirectories reference will be generated only for a single asset.

groups:
  - paths:
      - assets
      - assets/subdir
    class_name: Images
    types: [ .png, .jpg, .jpeg, .webp, .webm, .bmp ]

Expecting references are generated for each asset with specified paths.

Allow using custom file as config

Is your feature request related to a problem? Please describe.
I like to keep my top level directory clean. As such I have moved most of my YAML files or other tools in a config directory and pass the file path to the tool

Describe the solution you'd like
Add support for custom file path through a build flag such as --file or --path so the end result looks like spider build -f config/spider.yaml

Unable to get version

Running spider --version gives the following error:

Unable to get version!

Spider version:: 0.3.0

Warnings for 2.0x and 3.0x directories.

Spider build 0.3.5 doesn't distinguish between normal assets directories and flutter specific density assets directories like 2.0x and 3.0x. When we specify these directories in the configuration file, it generates assets as it is expected to be generated in normal cases. But in this case, it should not be produced at all.

A suggestion is to display warning or error in the terminal when the user tries to reference those directories.

Refactor/refactor configValidate

Is your feature request related to a problem? Please describe.

In the current version, the spider does not check the config file very well. Many fields are simply not checked.

Describe the solution you'd like

Rewrite configValidate method (add missing checks)

Feature/add custom directory for generated tests

Is your feature request related to a problem? Please describe.

Many projects have some type of structure inside the test folder. The spider generates tests for all asset classes in the test/ folder. It is not convenient and clean from the structure side.

Describe the solution you'd like

Add test_package property to global scope.

Describe alternatives you've considered

Maybe also for group scope, but i don't think it's needed.

Constants names have no prefixes.

Constants are generating without prefixes.

Config looks like this

package: resources
path: assets
class_name: Assets
prefix: ic

Expecting 'ic' prefix for each generated constant name in Assets class but there are no prefixes presented.

In multi-resolution scenes, the path generated by the image is wrong

I am coming again :)

In multi-resolution scenes, Like below:

assets
├── background.jpg    //1.0x
├── 2.0x
│   └── background.jpg  //2.0x
└── 3.0x
    └── background.jpg  //3.0x

Only a 1.0x path should be generated, like

static const String background = 'assets/background.png';

but I have something wrong. Here is some of our environmental information:

spider.ymal

groups:
  - path: assets/images
    class_name: Images
    package: res
  - path: assets/images/2.0x
    class_name: Images
    package: res
  - path: assets/images/3.0x
    class_name: Images
    package: res

auto gen code

class Images {
  static const String dsStore = 'assets/images/3.0x/.DS_Store';
  static const String deviceWatch = 'assets/images/3.0x/device_watch.webp';
  static const String deviceBindError =
      'assets/images/3.0x/device_bind_error.webp';
  static const String deviceBindSuccess =
      'assets/images/3.0x/device_bind_success.webp';
  static const String deviceBindKnock =
      'assets/images/3.0x/device_bind_knock.webp';
}

terminal log

❯ spider build
[INFO] Processing path: assets/images
[File: 'assets/images/.DS_Store', Directory: 'assets/images/2.0x', File: 'assets/images/norex_logo_positiv.svg', Directory: 'assets/images/3.0x', File: 'assets/images/pair_device.svg']
Valid: File: 'assets/images/.DS_Store'
Valid: Directory: 'assets/images/2.0x'
Valid: File: 'assets/images/norex_logo_positiv.svg'
Valid: Directory: 'assets/images/3.0x'
Valid: File: 'assets/images/pair_device.svg'
[SUCCESS] Processed items for class Images: 3
[INFO] Processing path: assets/images/2.0x
[File: 'assets/images/2.0x/.DS_Store', File: 'assets/images/2.0x/device_watch.webp', File: 'assets/images/2.0x/device_bind_error.webp', File: 'assets/images/2.0x/device_bind_success.webp', File: 'assets/images/2.0x/device_bind_knock.webp']
Valid: File: 'assets/images/2.0x/.DS_Store'
Valid: File: 'assets/images/2.0x/device_watch.webp'
Valid: File: 'assets/images/2.0x/device_bind_error.webp'
Valid: File: 'assets/images/2.0x/device_bind_success.webp'
Valid: File: 'assets/images/2.0x/device_bind_knock.webp'
[SUCCESS] Processed items for class Images: 5
[INFO] Processing path: assets/images/3.0x
[File: 'assets/images/3.0x/.DS_Store', File: 'assets/images/3.0x/device_watch.webp', File: 'assets/images/3.0x/device_bind_error.webp', File: 'assets/images/3.0x/device_bind_success.webp', File: 'assets/images/3.0x/device_bind_knock.webp']
Valid: File: 'assets/images/3.0x/.DS_Store'
Valid: File: 'assets/images/3.0x/device_watch.webp'
Valid: File: 'assets/images/3.0x/device_bind_error.webp'
Valid: File: 'assets/images/3.0x/device_bind_success.webp'
Valid: File: 'assets/images/3.0x/device_bind_knock.webp'
[SUCCESS] Processed items for class Images: 5

Is the configuration information in our file wrong, or am I missing something?

by the way, I think .DS_Store files should not be generated.

Files starting with a number not supported

Hi everyone!

Thanks for this wonderful library.

I have a folder, with a few files starting with a number: eg (0-additives.svg, 1-additives.svg…).
Instead of generating 0Additives, 1Additives…, Spider will instead just create Additives entries (the number is ignored).

It would be nice to support this use case.

Replace test by flutter_test

When I build I got auto-generated test class with
import 'package:test/test.dart';
Could you use flutter_test as it includes the required function of test library?
import 'package:flutter_test/flutter_test.dart';
Thanks a lot

Support Webp File Extensions

This is a very good tool, thank you very much.
I will use webp format files in my project and hope to support this format.

return name in asset

Some interesting stuff: if the asset have name return - its broke the build command.
If you re-name this assets - everything works fine.
Error:

Oops; spider has exited unexpectedly: "Could not format because the source could not be parsed:

line 6, column 500 of .: Expected to find ';'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                           ^^^^^^
  ╵
line 6, column 507 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                  ^^^^^^
  ╵
line 6, column 514 of .: Operator declarations must be preceded by the keyword 'operator'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 514 of .: The string '=' isn't a user-definable operator.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 514 of .: Methods must have an explicit list of parameters.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 516 of .: A function body must be provided.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 516 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 541 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                                    
                ^
  ╵"
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Oops; spider has exited unexpectedly: "Could not format because the source could not be parsed:

line 6, column 500 of .: Expected to find ';'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                           ^^^^^^
  ╵
line 6, column 507 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                  ^^^^^^
  ╵
line 6, column 514 of .: Operator declarations must be preceded by the keyword 'operator'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 514 of .: The string '=' isn't a user-definable operator.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 514 of .: Methods must have an explicit list of parameters.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 516 of .: A function body must be provided.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 516 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 541 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                                    
                ^
  ╵"
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Oops; spider has exited unexpectedly: "Could not format because the source could not be parsed:

line 6, column 500 of .: Expected to find ';'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                           ^^^^^^
  ╵
line 6, column 507 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                  ^^^^^^
  ╵
line 6, column 514 of .: Operator declarations must be preceded by the keyword 'operator'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 514 of .: The string '=' isn't a user-definable operator.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 514 of .: Methods must have an explicit list of parameters.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                         ^
  ╵
line 6, column 516 of .: A function body must be provided.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 516 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 541 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String forward = 'assets/icons/forward.svg';static const String gear = 'assets/icons/gear.svg';static con
st String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                                                                    
                ^
  ╵"
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 1 in 146 ms.
Processed items for class AppSound: 5 in 6 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 2 in 147 ms.
Processed items for class AppSound: 5 in 5 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 3 in 157 ms.
Processed items for class AppSound: 5 in 5 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 4 in 149 ms.
Processed items for class AppSound: 5 in 5 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 5 in 153 ms.
Processed items for class AppSound: 5 in 5 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 5 in 148 ms.
Processed items for class AppSound: 5 in 4 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 6 in 148 ms.
Processed items for class AppSound: 5 in 4 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 7 in 147 ms.
Processed items for class AppSound: 5 in 4 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 8 in 149 ms.
Processed items for class AppSound: 5 in 0 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Oops; spider has exited unexpectedly: "Could not format because the source could not be parsed:

line 6, column 443 of .: Expected to find ';'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                  ^^^^^^
  ╵
line 6, column 450 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                         ^^^^^^
  ╵
line 6, column 457 of .: Operator declarations must be preceded by the keyword 'operator'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                ^
  ╵
line 6, column 457 of .: The string '=' isn't a user-definable operator.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                ^
  ╵
line 6, column 457 of .: Methods must have an explicit list of parameters.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                ^
  ╵
line 6, column 459 of .: A function body must be provided.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 459 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 484 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const String play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                           ^
  ╵"
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 8 in 151 ms.
Processed items for class AppSound: 5 in 5 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 9 in 167 ms.
Processed items for class AppSound: 5 in 4 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 10 in 161 ms.
Processed items for class AppSound: 5 in 5 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Processed items for class AppIcons: 10 in 149 ms.
Processed items for class AppSound: 5 in 4 ms.
[INFO] Generating fonts references
Generated fonts references successfully.
PS E:\dev\flutter\pomodoro-timer-app> spider build
[INFO] Configs found at E:\dev\flutter\pomodoro-timer-app\spider.yaml
[INFO] Loading configs from spider.yaml
Oops; spider has exited unexpectedly: "Could not format because the source could not be parsed:

line 6, column 443 of .: Expected to find ';'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const S
tring play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                  ^^^^^^
  ╵
line 6, column 450 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const S
tring play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                         ^^^^^^
  ╵
line 6, column 457 of .: Operator declarations must be preceded by the keyword 'operator'.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const S
tring play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                ^
  ╵
line 6, column 457 of .: The string '=' isn't a user-definable operator.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const S
tring play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                ^
  ╵
line 6, column 457 of .: Methods must have an explicit list of parameters.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const S
tring play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                ^
  ╵
line 6, column 459 of .: A function body must be provided.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const S
tring play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 459 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const S
tring play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
line 6, column 484 of .: Expected a class member.
  ╷
6 │   static const String arrow = 'assets/icons/arrow.svg';static const String brain = 'assets/icons/brain.svg';static const String 
chartBar = 'assets/icons/chart_bar.svg';static const String coffee = 'assets/icons/coffee.svg';static const String exit = 'assets/ic
ons/exit.svg';static const String gear = 'assets/icons/gear.svg';static const String pause = 'assets/icons/pause.svg';static const S
tring play = 'assets/icons/play.svg';static const String return = 'assets/icons/return.svg';static const String threeDots = 'assets/icons/three_dots.svg';
  │                                                                                                                                 
                                                                                                                                    
                                                                                                                                    
                                                                                           ^
  ╵"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.