Home > Mobile >  How to get parent widget color in flutter tree widget?
How to get parent widget color in flutter tree widget?

Time:12-27

I want change a color of a button depending by background color of with:

computeLuminance()

So, I need to get parent widget located by button and get its color / any that can I calculate difference between the two colors.

Color calculateTextColor(Color background) {
    return background.computeLuminance() >= 0.5 ? Colors.black : Colors.white;
  }

I need to pass background color as exact parent color widget.

CodePudding user response:

You can get a parent property ( color ) by referring to it using the BuildContext, and the findAncestorWidgetOfExactType method like this:

   Container(
          width: 200,
          height: 200,
          color: Colors.green,
          child: Builder(
            builder: (context) {
              return Text(
                "Hello",
                style: TextStyle(
                  color: context
                      .findAncestorWidgetOfExactType<Container>()
                      ?.color
                      ?.withGreen(255),
                  fontSize: 20,
                ),
              );
            },
          ),
        ),

As you see in the example, I wrapped the Text widget with a Builder to give it a new BuildContext so I can start searching from it ( not wrapping with the Builder widget will make the look-up start from the BuildContext of the build(), which exclude the current Widget tree, which is not what we want ).

Then, starting the lookup with findAncestorWidgetOfExactType<Container>(), In my example I have the parent as a Container so I set its type as generic.

this will give accessibility to its properties, and get me it the same color.

the withGreen() is just to clarify that it works.

  • Related