workouttest_app/lib/widgets/menu_image.dart

97 lines
3.0 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:aitrainer_app/library/image_cache.dart' as wt;
import 'package:aitrainer_app/library/transparent_image.dart';
import 'package:flutter_html/shims/dart_ui_real.dart';
// ignore: must_be_immutable
class MenuImage extends StatelessWidget {
final int? workoutTreeId;
final String imageName;
bool filter;
double radius;
MenuImage({
required this.workoutTreeId,
required this.imageName,
this.radius = 24,
this.filter = false,
});
@override
Widget build(BuildContext context) {
if (workoutTreeId == null) {
return Offstage();
}
String? imageString = this.getImage(workoutTreeId!, imageName);
Widget? widget;
if (imageString != null) {
print("MemoryImage $workoutTreeId - $imageName");
widget = ClipRRect(
borderRadius: BorderRadius.circular(24.0),
child: Container(
padding: EdgeInsets.zero,
color: Colors.black38,
foregroundDecoration: BoxDecoration(
color: Colors.black38,
backgroundBlendMode: BlendMode.darken,
),
child: FadeInImage(
fadeInDuration: Duration(milliseconds: 100),
image: MemoryImage(base64Decode(imageString)),
placeholder: MemoryImage(kTransparentImage),
),
));
} else {
if (imageName.contains("https")) {
print("https image $workoutTreeId - $imageName");
if (!wt.ImageCache().existsImageInMap(workoutTreeId!, imageName)) {
widget = ClipRRect(
borderRadius: BorderRadius.circular(radius),
child: Container(
padding: EdgeInsets.zero,
foregroundDecoration: filter
? BoxDecoration(
color: Colors.black38,
backgroundBlendMode: BlendMode.darken,
)
: null,
color: Colors.transparent,
child: FadeInImage(
fadeInDuration: Duration(milliseconds: 500),
image: NetworkImage(imageName),
placeholder: MemoryImage(kTransparentImage),
),
));
}
} else {
widget = ClipRRect(
borderRadius: BorderRadius.circular(radius),
child: Container(
padding: EdgeInsets.zero,
color: Colors.transparent,
foregroundDecoration: filter
? BoxDecoration(
color: Colors.black38,
backgroundBlendMode: BlendMode.darken,
)
: null,
child: Image.asset(imageName),
));
}
}
if (widget == null) {
return Offstage();
}
return widget;
}
String? getImage(int id, String name) {
String? imageString;
if (name.contains("http")) {
imageString = wt.ImageCache().getImageString(id, name);
}
return imageString;
}
}