how can I get clip section by ClipPath in flutter












0















I want cut a section of image, and move the clip with Slider. But I found it strange that the clip size is the same as image. How can i only get the clip?



in the screenshot, above is original image, below is clip from the image, but their size is the same. I want get the circle section.



screenshot:



image



here is code:



void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Startup Name Generator',
home: Test2(),
);
}
}

class Test2 extends StatefulWidget {
@override
_Test2State createState() => _Test2State();
}

class _Test2State extends State<Test2> {
final String imageFile = "images/snow.jpg";

double dy = 100;
double size = 20;
double blockCenterX = 250;
double width = 300;
double height = 300;
Widget blockWidget;

@override
void initState() {
// TODO: implement initState
super.initState();
_changeBlockImage();
}

@override
Widget build(BuildContext context) {
print("screen width: $width");
return Scaffold(
appBar: AppBar(
title: Text("ClipPath test"),
),
body: Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
Container(
width: width,
height: height,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(imageFile), fit: BoxFit.fill)),
),
Container(
color: Colors.yellow,
child: blockWidget,
)
]),
);
}

_changeBlockImage() {
setState(() {
blockWidget = _getBlock();
});
}

Widget _getBlock() {
_resetBlockOffset();
return Stack(children: [
ClipPath(
clipper: BlockClipper(
origin: Offset(blockCenterX, dy),
blockSize: Size(size, size),
),
child: Container(
width: width,
height: height,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(imageFile),
fit: BoxFit.fill,
)),
),
),
CustomPaint(
painter: BorderPaint(
origin: Offset(blockCenterX, dy),
radius: size,
),
child: SizedBox(
width: width,
height: height,
),
)
]);
}
}

class BorderPaint extends CustomPainter {
Offset origin;
double radius;
BorderPaint({this.origin, this.radius});

@override
void paint(Canvas canvas, Size size) {
Paint paint = Paint()
..color = Colors.blue
..strokeWidth = 2
..style = PaintingStyle.stroke;

canvas.drawCircle(origin, radius, paint);
}

@override
bool shouldRepaint(BorderPaint old) {
return true;
}
}









share|improve this question



























    0















    I want cut a section of image, and move the clip with Slider. But I found it strange that the clip size is the same as image. How can i only get the clip?



    in the screenshot, above is original image, below is clip from the image, but their size is the same. I want get the circle section.



    screenshot:



    image



    here is code:



    void main() => runApp(MyApp());

    class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    title: 'Startup Name Generator',
    home: Test2(),
    );
    }
    }

    class Test2 extends StatefulWidget {
    @override
    _Test2State createState() => _Test2State();
    }

    class _Test2State extends State<Test2> {
    final String imageFile = "images/snow.jpg";

    double dy = 100;
    double size = 20;
    double blockCenterX = 250;
    double width = 300;
    double height = 300;
    Widget blockWidget;

    @override
    void initState() {
    // TODO: implement initState
    super.initState();
    _changeBlockImage();
    }

    @override
    Widget build(BuildContext context) {
    print("screen width: $width");
    return Scaffold(
    appBar: AppBar(
    title: Text("ClipPath test"),
    ),
    body: Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
    Container(
    width: width,
    height: height,
    decoration: BoxDecoration(
    image: DecorationImage(
    image: AssetImage(imageFile), fit: BoxFit.fill)),
    ),
    Container(
    color: Colors.yellow,
    child: blockWidget,
    )
    ]),
    );
    }

    _changeBlockImage() {
    setState(() {
    blockWidget = _getBlock();
    });
    }

    Widget _getBlock() {
    _resetBlockOffset();
    return Stack(children: [
    ClipPath(
    clipper: BlockClipper(
    origin: Offset(blockCenterX, dy),
    blockSize: Size(size, size),
    ),
    child: Container(
    width: width,
    height: height,
    decoration: BoxDecoration(
    image: DecorationImage(
    image: AssetImage(imageFile),
    fit: BoxFit.fill,
    )),
    ),
    ),
    CustomPaint(
    painter: BorderPaint(
    origin: Offset(blockCenterX, dy),
    radius: size,
    ),
    child: SizedBox(
    width: width,
    height: height,
    ),
    )
    ]);
    }
    }

    class BorderPaint extends CustomPainter {
    Offset origin;
    double radius;
    BorderPaint({this.origin, this.radius});

    @override
    void paint(Canvas canvas, Size size) {
    Paint paint = Paint()
    ..color = Colors.blue
    ..strokeWidth = 2
    ..style = PaintingStyle.stroke;

    canvas.drawCircle(origin, radius, paint);
    }

    @override
    bool shouldRepaint(BorderPaint old) {
    return true;
    }
    }









    share|improve this question

























      0












      0








      0








      I want cut a section of image, and move the clip with Slider. But I found it strange that the clip size is the same as image. How can i only get the clip?



      in the screenshot, above is original image, below is clip from the image, but their size is the same. I want get the circle section.



      screenshot:



      image



      here is code:



      void main() => runApp(MyApp());

      class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      return MaterialApp(
      title: 'Startup Name Generator',
      home: Test2(),
      );
      }
      }

      class Test2 extends StatefulWidget {
      @override
      _Test2State createState() => _Test2State();
      }

      class _Test2State extends State<Test2> {
      final String imageFile = "images/snow.jpg";

      double dy = 100;
      double size = 20;
      double blockCenterX = 250;
      double width = 300;
      double height = 300;
      Widget blockWidget;

      @override
      void initState() {
      // TODO: implement initState
      super.initState();
      _changeBlockImage();
      }

      @override
      Widget build(BuildContext context) {
      print("screen width: $width");
      return Scaffold(
      appBar: AppBar(
      title: Text("ClipPath test"),
      ),
      body: Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
      Container(
      width: width,
      height: height,
      decoration: BoxDecoration(
      image: DecorationImage(
      image: AssetImage(imageFile), fit: BoxFit.fill)),
      ),
      Container(
      color: Colors.yellow,
      child: blockWidget,
      )
      ]),
      );
      }

      _changeBlockImage() {
      setState(() {
      blockWidget = _getBlock();
      });
      }

      Widget _getBlock() {
      _resetBlockOffset();
      return Stack(children: [
      ClipPath(
      clipper: BlockClipper(
      origin: Offset(blockCenterX, dy),
      blockSize: Size(size, size),
      ),
      child: Container(
      width: width,
      height: height,
      decoration: BoxDecoration(
      image: DecorationImage(
      image: AssetImage(imageFile),
      fit: BoxFit.fill,
      )),
      ),
      ),
      CustomPaint(
      painter: BorderPaint(
      origin: Offset(blockCenterX, dy),
      radius: size,
      ),
      child: SizedBox(
      width: width,
      height: height,
      ),
      )
      ]);
      }
      }

      class BorderPaint extends CustomPainter {
      Offset origin;
      double radius;
      BorderPaint({this.origin, this.radius});

      @override
      void paint(Canvas canvas, Size size) {
      Paint paint = Paint()
      ..color = Colors.blue
      ..strokeWidth = 2
      ..style = PaintingStyle.stroke;

      canvas.drawCircle(origin, radius, paint);
      }

      @override
      bool shouldRepaint(BorderPaint old) {
      return true;
      }
      }









      share|improve this question














      I want cut a section of image, and move the clip with Slider. But I found it strange that the clip size is the same as image. How can i only get the clip?



      in the screenshot, above is original image, below is clip from the image, but their size is the same. I want get the circle section.



      screenshot:



      image



      here is code:



      void main() => runApp(MyApp());

      class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      return MaterialApp(
      title: 'Startup Name Generator',
      home: Test2(),
      );
      }
      }

      class Test2 extends StatefulWidget {
      @override
      _Test2State createState() => _Test2State();
      }

      class _Test2State extends State<Test2> {
      final String imageFile = "images/snow.jpg";

      double dy = 100;
      double size = 20;
      double blockCenterX = 250;
      double width = 300;
      double height = 300;
      Widget blockWidget;

      @override
      void initState() {
      // TODO: implement initState
      super.initState();
      _changeBlockImage();
      }

      @override
      Widget build(BuildContext context) {
      print("screen width: $width");
      return Scaffold(
      appBar: AppBar(
      title: Text("ClipPath test"),
      ),
      body: Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
      Container(
      width: width,
      height: height,
      decoration: BoxDecoration(
      image: DecorationImage(
      image: AssetImage(imageFile), fit: BoxFit.fill)),
      ),
      Container(
      color: Colors.yellow,
      child: blockWidget,
      )
      ]),
      );
      }

      _changeBlockImage() {
      setState(() {
      blockWidget = _getBlock();
      });
      }

      Widget _getBlock() {
      _resetBlockOffset();
      return Stack(children: [
      ClipPath(
      clipper: BlockClipper(
      origin: Offset(blockCenterX, dy),
      blockSize: Size(size, size),
      ),
      child: Container(
      width: width,
      height: height,
      decoration: BoxDecoration(
      image: DecorationImage(
      image: AssetImage(imageFile),
      fit: BoxFit.fill,
      )),
      ),
      ),
      CustomPaint(
      painter: BorderPaint(
      origin: Offset(blockCenterX, dy),
      radius: size,
      ),
      child: SizedBox(
      width: width,
      height: height,
      ),
      )
      ]);
      }
      }

      class BorderPaint extends CustomPainter {
      Offset origin;
      double radius;
      BorderPaint({this.origin, this.radius});

      @override
      void paint(Canvas canvas, Size size) {
      Paint paint = Paint()
      ..color = Colors.blue
      ..strokeWidth = 2
      ..style = PaintingStyle.stroke;

      canvas.drawCircle(origin, radius, paint);
      }

      @override
      bool shouldRepaint(BorderPaint old) {
      return true;
      }
      }






      canvas flutter






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 24 '18 at 9:08









      kuan291kuan291

      276




      276
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53456717%2fhow-can-i-get-clip-section-by-clippath-in-flutter%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53456717%2fhow-can-i-get-clip-section-by-clippath-in-flutter%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Costa Masnaga

          Fotorealismo

          Sidney Franklin