import 'package:cached_network_image/cached_network_image.dart';
import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart';

/// Network image widget
///
/// Widget useful to show remote image
///
/// @author Pierre HUBERT

class NetworkImageWidget extends StatelessWidget {
  final String url;
  final bool allowFullScreen;
  final bool roundedEdges;
  final double width;
  final double height;
  final double loadingHeight;

  const NetworkImageWidget({
    Key key,
    @required this.url,
    this.allowFullScreen = false,
    this.width,
    this.height,
    this.roundedEdges = true,
    this.loadingHeight,
  })  : assert(url != null),
        assert(allowFullScreen != null),
        super(key: key);

  double get _loadingHeight => loadingHeight != null ? loadingHeight : height;

  double get _loadingWidth => width;

  @override
  Widget build(BuildContext context) {
    return Material(
      child: InkWell(
        onTap: allowFullScreen
            ? () {
                showImageFullScreen(context, url);
              }
            : null,
        child: CachedNetworkImage(
          imageUrl: url,
          width: width,
          height: height,
          fit: BoxFit.cover,
          placeholder: (c, s) => Container(
                width: _loadingWidth,
                height: _loadingHeight,
                color: Colors.lightBlueAccent,
                child: Center(
                  child: CircularProgressIndicator(),
                ),
              ),
          errorWidget: (c, s, o) => Container(
                width: _loadingWidth,
                height: _loadingHeight,
                color: Colors.red,
                child: Center(
                  child: Icon(
                    Icons.error,
                    color: Colors.white,
                  ),
                ),
              ),
        ),
      ),
      borderRadius:
          roundedEdges ? BorderRadius.all(Radius.circular(8.0)) : null,
      clipBehavior: Clip.hardEdge,
    );
  }
}