fluttercommunity / chewie

The video player for Flutter with a heart of gold
MIT License
1.94k stars 1.01k forks source link

CenterPlay Button causing error #578

Open pavanjoshi914 opened 2 years ago

pavanjoshi914 commented 2 years ago

Widget causing error

 @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.transparent,
      child: Center(
        child: AnimatedOpacity(
          opacity: show ? 1.0 : 0.0,
          duration: const Duration(milliseconds: 300),
          child: Container(
            decoration: BoxDecoration(
              color: backgroundColor,
              shape: BoxShape.circle,
            ),
            child: Padding(
              padding: const EdgeInsets.all(12.0),
              // Always set the iconSize on the IconButton, not on the Icon itself:
              // https://github.com/flutter/flutter/issues/52980
              child: IconButton(
                iconSize: 32,
                icon: isFinished
                    ? Icon(Icons.replay, color: iconColor)
                    : AnimatedPlayPause(
                        color: iconColor,
                        playing: isPlaying,
                      ),
                onPressed: onPressed,
              ),
            ),
          ),
        ),
      ),
    );
  }
}

Error Caused

   The following assertion was thrown building IconButton(Icon, padding: EdgeInsets.all(8.0), dirty):
                    No Material widget found.
                    IconButton widgets require a Material widget ancestor.
                    In material design, most widgets are conceptually "printed" on a sheet of material. In Flutter's
                    material library, that material is represented by the Material widget. It is the Material widget
                    that renders ink splashes, for instance. Because of this, many material library widgets require that
                    there be a Material widget in the tree above them.
                    To introduce a Material widget, you can either directly include one, or use a widget that contains
                    Material itself, such as a Card, Dialog, Drawer, or Scaffold.
                    The specific widget that could not find a Material ancestor was:
                      IconButton
                    The ancestors of this widget were:
                      ...
                      Padding
                      DecoratedBox
                      Container
                      FadeTransition
                      AnimatedOpacity
                      ...

                    The relevant error-causing widget was:
                      IconButton
                      IconButton:file:///C:/Users/91797/Documents/flutter/.pub-cache/hosted/pub.dartlang.org/chewie-1.2.2/lib/src/center_play_button.dart:38:22

chewie is working fine in my app just this exception is thrown

Cyamanide commented 2 years ago

I had the same issue and to the fix was to wrap the Chewie widget in a widget that contains Material itself, such as a Card, Dialog, Drawer, or Scaffold.

Like the demo app: https://github.com/fluttercommunity/chewie/blob/master/example/lib/app/app.dart#L167

diegotori commented 2 years ago

@pavanjoshi914 can you provide a example project that reproduces this error? Thanks in advance. Also, make sure that there's a Scaffold above your Chewie widget.