flutter-template icon indicating copy to clipboard operation
flutter-template copied to clipboard

Introduce shimmering loader placeholders

Open nivisi opened this issue 3 years ago • 0 comments

  1. A widget that adds a preconfigured shimmering parent.

  2. A widget for building the actual shapes, e.g.

     /// Pre-configured widget for adding loading shapes to the screen.
     class PlaceholderShape extends StatelessWidget {
       const PlaceholderShape({
         super.key,
         this.width,
         this.height,
         this.borderRadius,
         this.color,
       });
    
       const PlaceholderShape.square({
         super.key,
         double? size,
         this.borderRadius,
         this.color,
       })  : width = size,
             height = size;
    
       /// A rectangular shape that has the size of the text with the given style.
       PlaceholderShape.fromText({
         super.key,
         required String text,
         required TextStyle textStyle,
         this.borderRadius,
         this.color,
       })  : width = text.getSize(textStyle).width,
             height = text.getSize(textStyle).height;  
    
       final double? width;
       final double? height;
       final double? borderRadius;
       final Color? color;  
    
       @override
       Widget build(BuildContext context) {
         // TODO: Setup the default colour.
         final defaultColor = Colors.white54;
    
         return ClipRRect(
           borderRadius: BorderRadius.all(Radius.circular(borderRadius ?? .0)),
           child: SizedBox(
             width: width,
             height: height,
             child: ColoredBox(color: color ?? defaultColor),
           ),
         );
       }
     }
    
  3. So it can be used like this:

    AppShimmer(
      child: Column(
        children: [
            LoadingPlaceholderShape(...),
            LoadingPlaceholderShape(...),
        ],
      ),
    // or
    AppShimmer.column(
      children: [
        LoadingPlaceholderShape(...),
        LoadingPlaceholderShape(...),
      ],
    ),
    // or
    AppShimmer.row(
      children: [
        LoadingPlaceholderShape(...),
        LoadingPlaceholderShape(...),
      ],
    ),
    

nivisi avatar Oct 11 '22 21:10 nivisi