Skip to content

Would like to be able to avoid asset load errors at runtime #11477

Open

Description

@eseidelGoogle

Currently with Flutter it's very easy to end up with asset load errors at runtime since assets are keyed off of strings, which are not in any way validated at analyze time (or generated/provided by the system).

Posse's currently most common crash in their live app is a failed asset string load.

They also have a manual file of string constants that they maintain from their pubspec.yaml (presumably could be autogenerated pretty easily).

This just seems like a pattern we could help with. This bug is about finding ideas to reduce the likelihood of this kind of failure.

FYI @yjbanov

Activity

  1. Hixie commented on May 8, 2018

    @Hixie
    Contributor

    We could autogenerate an enum of known asset names, or some such.

  2. added
    toolAffects the "flutter" command-line tool. See also t: labels.
    frameworkflutter/packages/flutter repository. See also f: labels.
    a: assetsPackaging, accessing, or using assets
    on May 8, 2018
  3. added this to the milestone on May 8, 2018
  4. fmatosqg commented on Mar 12, 2019

    @fmatosqg
    Contributor

    I'm still keen to deliver this, I was never sure what was flutter team's opinion on it. My POC is frozen since the beta days. I'll come up with some MVP clean enough that it could be a PR. Soon (TM).

  5. modified the milestones: , on Jan 7, 2020
  6. YK-Unit commented on Feb 26, 2020

    @YK-Unit

    Hi, all:

    I'm a member of Fly-Mix Team from NetEase company. My team did develop a flutter development tool: Flr(Flutter-R) to support the feature that you want.

    Flr is a flutter resource manager tool, which can help flutter developer to auto specify assets in pubspec.yaml and generate r.g.dart file which likes R.java in Android after he changes the flutter project assets. With r.g.dart, flutter developer can apply the asset in code by referencing it's asset ID function, such as:

    import 'package:flutter_r_demo/r.g.dart';
    
    // test_sameName.png
    var normalImageWidget = Image(
      width: 200,
      height: 120,
      image: R.image.test_sameName(),
    );
    
    // test_sameName.gif
    var gifImageWidget = Image(
      image: R.mage.test_sameName_gif(),
    );
    
    // test.svg
    var svgImageWidget = Image(
      width: 100,
      height: 100,
      image: R.svg.test(width: 100, height: 100),
    );
    
    // test.json
    var jsonString = await R.text.test_json();
    
    // test.yaml
    var yamlString = await R.text.test_yaml();

    PS: yes, it is just like the AAPT(Android Asset Packaging Tool) in Android.

    Up to now, Flr has supported Android Studio Plugin, CLI, and VSCode Extension:

    1. Flr Android Studio Plugin Version

    2. Flr CLI Version

    3. Flr VSCode Extension Version

  7. added
    P3Issues that are less important to the Flutter project
    on May 29, 2020
  8. modified the milestone: on Jun 1, 2020
  9. removed this from the milestone on Jun 16, 2020
  10. removed this from the milestone on Jul 7, 2020
  11. modified the milestone: on Jul 22, 2020
  12. removed this from the milestone on Aug 17, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Issues that are less important to the Flutter projecta: assetsPackaging, accessing, or using assetsframeworkflutter/packages/flutter repository. See also f: labels.team-frameworkOwned by Framework teamtoolAffects the "flutter" command-line tool. See also t: labels.triaged-frameworkTriaged by Framework team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions