Enrich the Flutter Inspector with Diagnosticable properties

In this article we’ll see how to add Diagnosticable properties that can show up on the Details Tree view in the Flutter inspector.

Flutter DevTools come with a handy Details Tree view. It shows useful information about a Widget, Render Object, and State. Here’s an example of what the view looks like for a Center widget:

This is great for debugging.

Let’s take the simple example of the Flutter counter app which is created when you run flutter create <app_name>. Notice the difference between state object for _MyHomePageState vs ScaffoldState.

For our widget we only get the object hash. While Scaffold state shows more information. To do the same we need to use the Diagnosticable mixin and provide properties we want by overriding its debugFillProperties function.

State objects already implement the Diagnosticable mixin so we just need to override the function to show the counter state in the Details Tree:

In this case we’re using IntProperty, there are more such properties available for different types like ColorProperty, check them in the documentation.

Result

Diagnosticable for Custom Classes

Let’s create a new class called ColorSheme with Diagnosticable mixin and add it as a state to the _MyHomePageState:

You’ll see the following output where myColorScheme starts showing up but it doesn’t show its internal properties like the Material widget below.

To do so, you need to explicitly call the debugFillProerties for MyColorScheme from the MyHomePageState#debugFillProperties.

Bonus

When you override debugFillProperties you don’t need to override toString explicitly. The mixin will add some nice formatting for you.

Here’s a sample output of toString for the ColorScheme object we created above:

Tip

If you’re using Intellij simply press Option/Alt + Enter on any public property of a class.
Then select Add a debug reference to this property. It will automatically override the debugFillProperties method and add an entry for this property.

Additionally, if you set diagnostic_describe_all_properties rule, you’ll get an extra option Add missing debug property references everywhere in file . This will add diagnostic properties to all classes in a file.

Note

Be cautious of what you add to the Diagnosticable properties and do not clutter it with unnecessary information. Make sure you only add information which will be useful for debugging.

I’ve found this particularly useful when creating packages which expose widgets.

Complete code sample can be accessed here.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store