flutterdebuggingreleasetostring

Flutter toString() seems to be different on debug and release mode


This happened after migrating from Flutter 3.10.5 to 3.24.5.

I have a method on a class that uses a String with the information of what FontWeight to use. Basically, something like this:

final fontWightText = `w400`;
final fontWeight = FontWeight.values.firstWhere(
        (element) => element
            .toString()
            .endsWith(fontWeightText),
      ),

The problem is that, while running the app on release mode, this throws a Bad state: No element error. If I run on debug, it works fine. I noticed that if I print FontWeight.values.first on debug, I get FontWeight.w100, while on release I get Instance of 'FontWeight'.

I'm trying to find a workaround for this, but I also wonder if it might happen elsewhere on my app since it only happens if I run this new version of Flutter.


Solution

  • Interesting question!

    toString() will have a different output between debug vs release mode, like you said

    It is by design to optimize and reduce a lot of extra information in output log

    Basically logic code should not rely on this method since it is mostly just for logging

    enter image description here