{"id":952,"date":"2020-11-14T18:09:19","date_gmt":"2020-11-14T18:09:19","guid":{"rendered":"https:\/\/flutter4fun.com\/?p=952"},"modified":"2020-11-14T18:09:21","modified_gmt":"2020-11-14T18:09:21","slug":"ui-challenge-3","status":"publish","type":"post","link":"https:\/\/flutter4fun.com\/ui-challenge-3\/","title":{"rendered":"UI Challenge 3 &#8211; Game App UI by Tanmoy Roy"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/attachment-1024x768.png\" alt=\"\" class=\"wp-image-955\" width=\"1024\" height=\"768\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/attachment-1024x768.png 1024w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/attachment-300x225.png 300w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/attachment-768x576.png 768w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/attachment-1536x1152.png 1536w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/attachment-2048x1536.png 2048w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/attachment-86x64.png 86w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption><a rel=\"noreferrer noopener\" href=\"https:\/\/www.uplabs.com\/posts\/game-app-ui-aa02258d-f397-403b-b86d-180b02a76e77\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/www.uplabs.com\/posts\/game-app-ui-aa02258d-f397-403b-b86d-180b02a76e77\">Game App UI by Tanmoy Roy<\/a><\/figcaption><\/figure>\n\n\n\n<p>Hi folks.<\/p>\n\n\n\n<p>In this post, we are going to implement Game App UI by <a rel=\"noreferrer noopener\" href=\"https:\/\/www.uplabs.com\/tanmoy94roy\" target=\"_blank\">Tanmoy Roy<\/a> (<a rel=\"noreferrer noopener\" href=\"https:\/\/www.uplabs.com\/posts\/game-app-ui-aa02258d-f397-403b-b86d-180b02a76e77\" data-type=\"URL\" data-id=\"https:\/\/www.uplabs.com\/posts\/game-app-ui-aa02258d-f397-403b-b86d-180b02a76e77\" target=\"_blank\">check it in the Uplabs<\/a>).<\/p>\n\n\n\n<p>Let&#8217;s jump into implementation. As you may know, we have to split it into smaller problems and then we are going to implement them.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Item row section<\/h3>\n\n\n\n<p>I think the most important part is the item&#8217;s row section.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"479\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/1.png\" alt=\"\" class=\"wp-image-968\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/1.png 600w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/1-300x240.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure>\n\n\n\n<p>To Implement this section, we should use a <a rel=\"noreferrer noopener\" href=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Stack-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Stack-class.html\" target=\"_blank\">Stack<\/a> widget to overlay our views. <br>Firstly we should make the background section, we can use <a rel=\"noreferrer noopener\" href=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Container-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Container-class.html\" target=\"_blank\">Container<\/a> and <a rel=\"noreferrer noopener\" href=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Transform-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Transform-class.html\" target=\"_blank\">Transform<\/a> to implement it.<\/p>\n\n\n\n<p>Here we rotate our Container around the y-axis. You can read more about transform <a rel=\"noreferrer noopener\" href=\"https:\/\/artem-diashkin.medium.com\/flutter-transform-class-examples-d2574a7da89a\" data-type=\"URL\" data-id=\"https:\/\/artem-diashkin.medium.com\/flutter-transform-class-examples-d2574a7da89a\" target=\"_blank\">here<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Transform(\n  alignment: FractionalOffset.center,\n  transform: Matrix4.identity()\n    ..setEntry(3, 2, 0.01)\n    ..rotateY(radians(rotationY)), \/\/ degrees from slider\n  child: Container(\n    height: 180,\n    color: Colors.white.withOpacity(0.4),\n    margin: EdgeInsets.symmetric(horizontal: 40),\n  ),\n),<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"711\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/3.gif\" alt=\"\" class=\"wp-image-975\"\/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/f143b4c0ff9b535eb64ba7ca31f04425\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/f143b4c0ff9b535eb64ba7ca31f04425\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Now we can find an appropriate number. for example I think 5 degrees is enough.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"711\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/4.jpg\" alt=\"\" class=\"wp-image-980\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/4.jpg 400w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/4-169x300.jpg 169w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n\n\n\n<p>Okay. As you see there is a minor problem. Our shape is not centered anymore.<br>We need to wrap it by another Transform to translate it to the left.<br>And also we can implement rounded corners.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Transform.translate(\n  offset: Offset(-30, 0),\n  child: Transform(\n    alignment: FractionalOffset.center,\n    transform: Matrix4.identity()\n      ..setEntry(3, 2, 0.01)\n      ..rotateY(radians(5)),\n    child: Container(\n      height: 180,\n      margin: EdgeInsets.symmetric(horizontal: 40),\n      decoration: BoxDecoration(\n        color: Colors.white.withOpacity(0.4),\n        borderRadius: BorderRadius.all(Radius.circular(22)),\n      ),\n    ),\n  ),\n),<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"711\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/5-1.jpg\" alt=\"\" class=\"wp-image-1001\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/5-1.jpg 400w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/5-1-169x300.jpg 169w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><figcaption>Try it in <a rel=\"noreferrer noopener\" href=\"https:\/\/dartpad.dev\/c4c5898cc4fea79c4bd1a4f4dfab53ca\" target=\"_blank\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>(Keep in mind that we didn&#8217;t optimize it for all screens, we just hard-coded some values. You may face some problems with bigger screens.)<\/p>\n\n\n\n<p>Okay, now let&#8217;s add another Container below it:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Stack(\n  alignment: Alignment.center,\n  children: [\n    Transform.translate(\n      offset: Offset(-10, 0),\n      child: Transform(\n        alignment: FractionalOffset.center,\n        transform: Matrix4.identity()\n          ..setEntry(3, 2, 0.01)\n          ..rotateY(radians(1.5)),\n        child: Container(\n          height: 216,\n          margin: EdgeInsets.symmetric(horizontal: 40),\n          decoration: BoxDecoration(\n            color: Colors.white.withOpacity(0.1),\n            borderRadius: BorderRadius.all(Radius.circular(22)),\n          ),\n        ),\n      ),\n    ),\n    Transform.translate(\n      offset: Offset(-44, 0),\n      child: Transform(\n        alignment: FractionalOffset.center,\n        transform: Matrix4.identity()\n          ..setEntry(3, 2, 0.01)\n          ..rotateY(radians(8)),\n        child: Container(\n          height: 188,\n          margin: EdgeInsets.symmetric(horizontal: 40),\n          decoration: BoxDecoration(\n            color: Colors.white.withOpacity(0.4),\n            borderRadius: BorderRadius.all(Radius.circular(22)),\n          ),\n        ),\n      ),\n    ),\n  ],\n),<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"711\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/6.jpg\" alt=\"\" class=\"wp-image-991\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/6.jpg 400w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/6-169x300.jpg 169w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/f26311f5e74e69de921fc97510e00a7a\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/f26311f5e74e69de921fc97510e00a7a\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Great! Now it&#8217;s time to put our hero character image:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Container(\n  height: rowHeight,\n  child: Stack(\n    alignment: Alignment.center,\n    children: [\n      Transform.translate(\n        offset: Offset(-10, 0),\n        child: Transform(\n          alignment: FractionalOffset.center,\n          transform: Matrix4.identity()\n            ..setEntry(3, 2, 0.01)\n            ..rotateY(radians(1.5)),\n          child: Container(\n            height: 216,\n            margin: EdgeInsets.symmetric(horizontal: 40),\n            decoration: BoxDecoration(\n              color: Colors.white.withOpacity(0.1),\n              borderRadius: BorderRadius.all(Radius.circular(22)),\n            ),\n          ),\n        ),\n      ),\n      Transform.translate(\n        offset: Offset(-44, 0),\n        child: Transform(\n          alignment: FractionalOffset.center,\n          transform: Matrix4.identity()\n            ..setEntry(3, 2, 0.01)\n            ..rotateY(radians(8)),\n          child: Container(\n            height: 188,\n            margin: EdgeInsets.symmetric(horizontal: 40),\n            decoration: BoxDecoration(\n              color: Colors.white.withOpacity(0.4),\n              borderRadius: BorderRadius.all(Radius.circular(22)),\n            ),\n          ),\n        ),\n      ),\n      Align(\n        alignment: Alignment.centerLeft,\n        child: Transform.translate(\n          offset: Offset(-30, 0),\n          child: Container(\n            child: Image.network(\n              'https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/Player-1.png',\n              width: rowHeight,\n              height: rowHeight,\n            ),\n          ),\n        ),\n      ),\n    ],\n  ),\n);<\/pre>\n\n\n\n<p>Awesome! now we are going to implement the attributes section (those circles at the right of the character)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/8.jpg\" alt=\"\" class=\"wp-image-996\" width=\"200\" height=\"201\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/8.jpg 500w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/8-300x300.jpg 300w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/8-150x150.jpg 150w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/8-100x100.jpg 100w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"711\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/7.jpg\" alt=\"\" class=\"wp-image-994\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/7.jpg 400w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/7-169x300.jpg 169w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>To do that we can use <a rel=\"noreferrer noopener\" href=\"https:\/\/api.flutter.dev\/flutter\/widgets\/CustomPaint-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/widgets\/CustomPaint-class.html\" target=\"_blank\">CustomPaint <\/a>widget.<br>We use <a href=\"https:\/\/api.flutter.dev\/flutter\/dart-ui\/Canvas-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/dart-ui\/Canvas-class.html\" target=\"_blank\" rel=\"noreferrer noopener\">canvas<\/a>.<a href=\"https:\/\/api.flutter.dev\/flutter\/dart-ui\/Canvas\/drawCircle.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/dart-ui\/Canvas\/drawCircle.html\" target=\"_blank\" rel=\"noreferrer noopener\">drawCircle<\/a> twice (first for a large circle, second for an inner circle) after that we have something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"186\" height=\"176\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/9.jpg\" alt=\"\" class=\"wp-image-1006\"\/><\/figure>\n\n\n\n<p>Then we paint the progress bar using <a href=\"https:\/\/api.flutter.dev\/flutter\/dart-ui\/Canvas-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/dart-ui\/Canvas-class.html\" target=\"_blank\" rel=\"noreferrer noopener\">canvas<\/a>.<a href=\"https:\/\/api.flutter.dev\/flutter\/dart-ui\/Canvas\/drawArc.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/dart-ui\/Canvas\/drawArc.html\" target=\"_blank\" rel=\"noreferrer noopener\">drawArc<\/a>:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class AttributePainter extends CustomPainter {\n  final double progressPercent;\n  final double strokeWidth, filledStrokeWidth;\n\n  final bgPaint, strokeBgPaint, strokeFilledPaint;\n\n  AttributePainter({\n    this.progressPercent,\n    this.strokeWidth = 4.0,\n    this.filledStrokeWidth = 8.0,\n  })  : bgPaint = Paint()..color = Colors.white.withOpacity(0.25),\n        strokeBgPaint = Paint()..color = Color(0xffD264C9),\n        strokeFilledPaint = Paint()\n          ..color = Colors.white\n          ..style = PaintingStyle.stroke\n          ..strokeWidth = filledStrokeWidth\n          ..strokeCap = StrokeCap.round;\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    final center = Offset(size.width \/ 2, size.height \/ 2);\n    final radius = size.width \/ 2;\n\n    canvas.drawCircle(center, radius, bgPaint);\n    canvas.drawCircle(center, radius - strokeWidth, strokeBgPaint);\n    canvas.drawArc(\n      Rect.fromCircle(center: center, radius: radius - (strokeWidth \/ 2)),\n      -math.pi \/ 2, \/\/ - 45 degrees to start from top\n      (progressPercent \/ 100) * math.pi * 2,\n      false,\n      strokeFilledPaint,\n    );\n  }\n\n  @override\n  bool shouldRepaint(covariant CustomPainter oldDelegate) => true;\n}<\/pre>\n\n\n\n<p>Okay, now we just need to put our image at the middle of our CustomPaint widget. Fortunately, CustomPaint widget has a <code>child<\/code> property. It puts the <code>child<\/code> property at the center of itself.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"711\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/12.gif\" alt=\"\" class=\"wp-image-1016\"\/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/8f73b1de1219b8d19be79ee50daca7e8\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/8f73b1de1219b8d19be79ee50daca7e8\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">AttributeWidget(\n  progress: progress,\n  child: Image.network('https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/speed.png'),\n)\n\nclass AttributeWidget extends StatelessWidget {\n  final double size;\n  final double progress;\n  final Widget child;\n\n  const AttributeWidget({\n    Key key,\n    @required this.progress,\n    this.size = 82,\n    this.child,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return CustomPaint(\n      painter: AttributePainter(\n        progressPercent: progress,\n      ),\n      size: Size(size, size),\n      child: Container(\n        padding: EdgeInsets.all(size \/ 3.8),\n        width: size,\n        height: size,\n        child: child,\n      ),\n    );\n  }\n}<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/13-576x1024.jpg\" alt=\"\" class=\"wp-image-1018\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/13-576x1024.jpg 576w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/13-169x300.jpg 169w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/13.jpg 764w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/92580e086489acdaf93dd9e21aed8cd9\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/92580e086489acdaf93dd9e21aed8cd9\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Fair enough, let&#8217;s back to the hero row widget. Now we can put attributes at the right of our character image. Then we use <a rel=\"noreferrer noopener\" href=\"https:\/\/api.flutter.dev\/flutter\/material\/OutlineButton-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/material\/OutlineButton-class.html\" target=\"_blank\">OutlineButton <\/a>for the &#8220;see details&#8221; button:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Align(\n  alignment: Alignment.centerRight,\n  child: Container(\n    margin: EdgeInsets.only(right: 58),\n    padding: EdgeInsets.symmetric(vertical: 34),\n    child: Column(\n      mainAxisAlignment: MainAxisAlignment.spaceAround,\n      children: [\n        AttributeWidget(\n          progress: hero.speed,\n          child: Image.network(speed),\n        ),\n        AttributeWidget(\n          progress: hero.health,\n          child: Image.network(heart),\n        ),\n        AttributeWidget(\n          progress: hero.attack,\n          child: Image.network(knife),\n        ),\n        SizedBox(\n          height: 32,\n          child: OutlineButton(\n            child: new Text(\n              'See Details',\n              style: TextStyle(\n                color: Colors.white,\n                fontSize: 12,\n              ),\n            ),\n            onPressed: () {},\n            color: Colors.white,\n            borderSide: BorderSide(\n              color: Colors.white,\n              width: 1,\n            ),\n            highlightedBorderColor: Colors.white,\n            shape: RoundedRectangleBorder(\n              borderRadius: new BorderRadius.circular(30.0),\n            ),\n          ),\n        )\n      ],\n    ),\n  ),\n)<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"711\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/14.jpg\" alt=\"\" class=\"wp-image-1022\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/14.jpg 400w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/14-169x300.jpg 169w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/0d98a1c109e8ac2232f6d51cd6d7913f\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/0d98a1c109e8ac2232f6d51cd6d7913f\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Yay, we did it. now we can have a list to complete the first page.<br>Also, we need a gradient background, we can use <a rel=\"noreferrer noopener\" href=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Container-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Container-class.html\" target=\"_blank\">Container <\/a>and <a href=\"https:\/\/api.flutter.dev\/flutter\/painting\/BoxDecoration-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/painting\/BoxDecoration-class.html\" target=\"_blank\" rel=\"noreferrer noopener\">BoxDecoration <\/a>to implement <a rel=\"noreferrer noopener\" href=\"https:\/\/api.flutter.dev\/flutter\/painting\/LinearGradient-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/painting\/LinearGradient-class.html\" target=\"_blank\">LinearGradient<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"711\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/16.gif\" alt=\"\" class=\"wp-image-1031\"\/><\/figure>\n\n\n\n<p>So this is the result of the first part.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Item details<\/h3>\n\n\n\n<p>In this part we are going to implement the details screen, see below image:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/17-472x1024.jpg\" alt=\"\" class=\"wp-image-1034\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/17-472x1024.jpg 472w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/17-138x300.jpg 138w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/17.jpg 607w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<p>Before everything, we already know how to implement the gradient and the toolbar section. I will implement them without any explanation. <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Scaffold(\n  body: Container(\n    width: double.infinity,\n    height: double.infinity,\n    child: Stack(\n      children: [\n        SafeArea(\n          child: Row(\n            crossAxisAlignment: CrossAxisAlignment.center,\n            children: [\n              SizedBox(\n                width: 18,\n              ),\n              IconButton(\n                icon: Icon(\n                  Icons.arrow_back_ios,\n                  color: Colors.white,\n                  size: 20,\n                ),\n                onPressed: () {\n                  Navigator.of(context).pop();\n                },\n              ),\n              Text(\n                'Overview',\n                style: TextStyle(\n                  color: Colors.white,\n                  fontSize: 20,\n                  fontWeight: FontWeight.bold,\n                ),\n              ),\n              Expanded(\n                  child: Container(\n                height: 80,\n              )),\n              Container(\n                width: 80,\n                height: 80,\n                child: Icon(\n                  Icons.menu,\n                  color: Colors.white,\n                ),\n              )\n            ],\n          ),\n        ),\n        \/\/ _HeroDetailsImage(hero.image),\n      ],\n    ),\n    decoration: BoxDecoration(\n      gradient: LinearGradient(\n        colors: [\n          Color(0xFFF4E342),\n          Color(0xFFEE3474),\n        ],\n        begin: Alignment(0.3, -1),\n        end: Alignment(-0.8, 1),\n      ),\n    ),\n  ),\n);<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/18-576x1024.jpg\" alt=\"\" class=\"wp-image-1039\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/18-576x1024.jpg 576w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/18-169x300.jpg 169w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/18.jpg 764w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/dbb5c50e6317df68d455037e8bc13228\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/dbb5c50e6317df68d455037e8bc13228\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Now, let&#8217;s focus on the image section. There are 3 transparent layers and our selected hero image.<br>For the layers, we can use our previous section&#8217;s trick. We can combine 3 Containers using a Stack widget.<br><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Padding(\n  padding: const EdgeInsets.all(28.0),\n  child: AspectRatio(\n    aspectRatio: 1,\n    child: Container(\n      child: Stack(\n        children: [\n          Align(\n            child: Container(\n              margin: EdgeInsets.only(\n                left: 16,\n                right: 16,\n                top: 16,\n              ),\n              decoration: BoxDecoration(\n                color: Colors.white.withOpacity(0.1),\n                borderRadius: BorderRadius.all(Radius.circular(28)),\n              ),\n            ),\n            alignment: Alignment.bottomCenter,\n          ),\n          Align(\n            child: Container(\n              margin: EdgeInsets.all(8.0),\n              decoration: BoxDecoration(\n                color: Colors.white.withOpacity(0.1),\n                borderRadius: BorderRadius.all(Radius.circular(28)),\n              ),\n            ),\n            alignment: Alignment.bottomCenter,\n          ),\n          Align(\n            child: Container(\n              margin: EdgeInsets.only(\n                bottom: 16,\n              ),\n              decoration: BoxDecoration(\n                color: Colors.white.withOpacity(0.4),\n                borderRadius: BorderRadius.all(Radius.circular(28)),\n              ),\n            ),\n            alignment: Alignment.bottomCenter,\n          ),\n        ],\n      ),\n    ),\n  ),\n);<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/19-576x1024.jpg\" alt=\"\" class=\"wp-image-1042\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/19-576x1024.jpg 576w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/19-169x300.jpg 169w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/19.jpg 764w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/f6d45b06bfed127c35d9c7c428829530\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/f6d45b06bfed127c35d9c7c428829530\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n\n\n\n<p>For the image, we can put it inside the front Container (the last Container):<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">children: [\n  Align(\n    child: Container(\n      margin: EdgeInsets.only(\n        left: 16,\n        right: 16,\n        top: 16,\n      ),\n      decoration: BoxDecoration(\n        color: Colors.white.withOpacity(0.1),\n        borderRadius: BorderRadius.all(Radius.circular(28)),\n      ),\n    ),\n    alignment: Alignment.bottomCenter,\n  ),\n  Align(\n    child: Container(\n      margin: EdgeInsets.all(8.0),\n      decoration: BoxDecoration(\n        color: Colors.white.withOpacity(0.1),\n        borderRadius: BorderRadius.all(Radius.circular(28)),\n      ),\n    ),\n    alignment: Alignment.bottomCenter,\n  ),\n  Align(\n    child: Container(\n      margin: EdgeInsets.only(\n        bottom: 16,\n      ),\n      decoration: BoxDecoration(\n        color: Colors.white.withOpacity(0.4),\n        borderRadius: BorderRadius.all(Radius.circular(28)),\n      ),\n      child: Padding(\n        padding: EdgeInsets.all(8),\n        child: Center(\n          child: Image.network(url),\n        ),\n      ),\n    ),\n    alignment: Alignment.bottomCenter,\n  ),\n],<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/20-576x1024.jpg\" alt=\"\" class=\"wp-image-1045\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/20-576x1024.jpg 576w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/20-169x300.jpg 169w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/20.jpg 764w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/ab1f38df84efff047f814169678448b7\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/ab1f38df84efff047f814169678448b7\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Hero name<\/h4>\n\n\n\n<p>Now it&#8217;s time to implement the hero name section:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/23-1024x275.jpg\" alt=\"\" class=\"wp-image-1055\" width=\"300\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/23-1024x275.jpg 1024w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/23-300x81.jpg 300w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/23-768x206.jpg 768w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/23-1536x413.jpg 1536w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/23.jpg 1697w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>We can simply implement it by overlapping two <a href=\"https:\/\/api.flutter.dev\/flutter\/dart-html\/Text-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/dart-html\/Text-class.html\" target=\"_blank\" rel=\"noreferrer noopener\">Text <\/a>widgets using a <a href=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Stack-class.html\" data-type=\"URL\" data-id=\"https:\/\/api.flutter.dev\/flutter\/widgets\/Stack-class.html\" target=\"_blank\" rel=\"noreferrer noopener\">Stack <\/a>widget:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Stack(\n  children: [\n    Align(\n      alignment: Alignment.bottomCenter,\n      child: Text(\n        heroName,\n        style: TextStyle(\n          color: Colors.white,\n          fontWeight: FontWeight.bold,\n          fontSize: 42,\n        ),\n      ),\n    ),\n    Align(\n      alignment: Alignment.bottomCenter,\n      child: Padding(\n        padding: const EdgeInsets.only(bottom: 18.0),\n        child: Text(\n          heroName,\n          style: TextStyle(\n            color: Colors.white.withOpacity(0.1),\n            fontWeight: FontWeight.bold,\n            fontSize: 56,\n          ),\n        ),\n      ),\n    )\n  ],\n),<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/22-1-576x1024.jpg\" alt=\"\" class=\"wp-image-1058\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/22-1-576x1024.jpg 576w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/22-1-169x300.jpg 169w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/22-1.jpg 764w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/bfe285c8812179d1771f3f78e7d92e4c\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/bfe285c8812179d1771f3f78e7d92e4c\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>After that, I added the remaining sections. Because they are not challenging enough, I skipped to explain them. It saves our time \ud83d\ude09<\/p>\n\n\n\n<p>BTW, here is the final result of the second page:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ListView(\n  controller: _scrollController,\n  padding: EdgeInsets.only(top: appBarHeight),\n  children: [\n    _HeroDetailsImage(widget.hero.image),\n    _HeroDetailsName(widget.hero.name),\n    Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 22.0, vertical: 12),\n      child: Text(\n        \"Super smash bros ultimate villagers from the animal crossing series. This troops fight most effectively in large group\",\n        style:\n            TextStyle(color: Colors.white, fontSize: 18, fontWeight: FontWeight.w300),\n        textAlign: TextAlign.center,\n      ),\n    ),\n    SizedBox(height: 28,),\n    Row(\n      children: [\n        SizedBox(\n          width: 28,\n        ),\n        Expanded(\n          child: Container(\n            height: 54,\n            child: OutlineButton(\n              child: new Text(\n                'Add Favourite',\n                style: TextStyle(\n                  color: Colors.white,\n                  fontSize: 12,\n                ),\n              ),\n              onPressed: () {},\n              color: Colors.white,\n              borderSide: BorderSide(\n                color: Colors.white,\n                width: 1,\n              ),\n              highlightedBorderColor: Colors.white,\n              shape: RoundedRectangleBorder(\n                borderRadius: new BorderRadius.circular(30.0),\n              ),\n            ),\n          ),\n        ),\n        SizedBox(\n          width: 14,\n        ),\n        Expanded(\n          child: Container(\n            height: 56,\n            child: RaisedButton(\n              onPressed: () {},\n              shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(80.0)),\n              padding: const EdgeInsets.all(0.0),\n              child: Ink(\n                decoration: const BoxDecoration(\n                  gradient: LinearGradient(\n                    colors: [\n                      Color(0xFFF29758),\n                      Color(0xFFEF5D67),\n                    ],\n                    begin: Alignment.topCenter,\n                    end: Alignment.bottomCenter\n                  ),\n                  borderRadius: BorderRadius.all(Radius.circular(80.0)),\n                ),\n                child: Container(\n                  constraints: const BoxConstraints(minWidth: 88.0, minHeight: 36.0),\n                  \/\/ min sizes for Material buttons\n                  alignment: Alignment.center,\n                  child: const Text(\n                    'OK',\n                    style: TextStyle(color: Colors.white),\n                  ),\n                ),\n              ),\n            ),\n          ),\n        ),\n        SizedBox(\n          width: 28,\n        ),\n      ],\n    ),\n    SizedBox(height: 28,),\n  ],\n)<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/22-2-576x1024.jpg\" alt=\"\" class=\"wp-image-1061\" srcset=\"https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/22-2-576x1024.jpg 576w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/22-2-169x300.jpg 169w, https:\/\/flutter4fun.com\/wp-content\/uploads\/2020\/11\/22-2.jpg 764w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption>Try it in <a href=\"https:\/\/dartpad.dev\/4658cda6225bee4207f5ce05974e2e5c\" data-type=\"URL\" data-id=\"https:\/\/dartpad.dev\/4658cda6225bee4207f5ce05974e2e5c\" target=\"_blank\" rel=\"noreferrer noopener\">DartPad<\/a><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Now I wanna use the <a rel=\"noreferrer noopener\" href=\"https:\/\/flutter.dev\/docs\/development\/ui\/animations\/hero-animations\" data-type=\"URL\" data-id=\"https:\/\/flutter.dev\/docs\/development\/ui\/animations\/hero-animations\" target=\"_blank\">Hero <\/a>widget to animate the selected Item into the details page.<\/p>\n\n\n\n<p>And here you go. This is our final result \ud83d\ude42<br>You can find the source code <a href=\"https:\/\/github.com\/imaNNeoFighT\/UI-Challenge-3\" data-type=\"URL\" data-id=\"https:\/\/github.com\/imaNNeoFighT\/UI-Challenge-3\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>Don&#8217;t forget to give me feedback in the comments section.<\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\"  id=\"_ytid_17655\"  width=\"1170\" height=\"658\"  data-origwidth=\"1170\" data-origheight=\"658\" src=\"https:\/\/www.youtube.com\/embed\/iHaQDgxGtDc?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;modestbranding=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;\" class=\"__youtube_prefs__  epyt-is-override  no-lazyload\" title=\"YouTube player\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Stay safe!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi folks. In this post, we are going to implement Game App UI by Tanmoy Roy (check it in the Uplabs). Let&#8217;s jump into implementation. As you may know, we have to split it into smaller problems and then we are going to implement them. 1. Item row section I think the most important part [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":955,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"wp_social_preview_title":"","wp_social_preview_description":"","wp_social_preview_image":0,"footnotes":""},"categories":[32],"tags":[],"class_list":["post-952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ui-challenge"],"_links":{"self":[{"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/posts\/952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/comments?post=952"}],"version-history":[{"count":76,"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/posts\/952\/revisions"}],"predecessor-version":[{"id":1094,"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/posts\/952\/revisions\/1094"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/media\/955"}],"wp:attachment":[{"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/media?parent=952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/categories?post=952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flutter4fun.com\/wp-json\/wp\/v2\/tags?post=952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}