workouttest_app/lib/widgets/image_button.dart

134 lines
3.5 KiB
Dart

import 'package:aitrainer_app/model/cache.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:bloc/bloc.dart';
// ignore: must_be_immutable
class ImageButton extends StatelessWidget {
final String text;
TextStyle style = TextStyle(fontSize: 14);
final String image;
final double top;
final double left;
final double height;
double width = 180;
final bool isShape;
final Bloc bloc;
final Alignment textAlignment;
final VoidCallback onTap;
bool isLocked;
ImageButton(
{this.text,
this.style,
this.image,
this.top,
this.left,
this.height,
this.width,
this.bloc,
this.isShape,
this.textAlignment,
this.onTap,
@required this.isLocked}) {
width = width ?? 180;
style = style ?? TextStyle(fontSize: 14, fontFamily: "Roboto Mono");
}
@override
Widget build(BuildContext context) {
double top = width - (style.fontSize - 5) * text.length - 2 * left < 0
? width - 2 * style.fontSize - 10
: width - style.fontSize - 10;
print("Top: " +
top.toStringAsFixed(0) +
" length: " +
((style.fontSize - 5) * text.length).toString());
return Stack(
//alignment: textAlignment,
fit: StackFit.passthrough,
overflow: Overflow.clip,
children: [
FlatButton(
child: image == null
? _getButtonImage("asset/image/WT_menu_dark.png")
: _getButtonImage(image),
padding: EdgeInsets.only(left: 0.0, bottom: 0),
shape: getShape(isShape),
onPressed: onTap ?? onTap,
),
Stack(alignment: Alignment.topLeft, children: [
Positioned(
top: 50,
left: 50,
child: this.isLocked
? Image.asset(
'asset/image/lock.png',
height: 60,
width: 60,
)
: Container(),
)
]),
Positioned(
top: top,
left: left,
child: Container(
height: width - 2 * left,
width: width - 2 * left,
child: InkWell(
onTap: onTap ?? onTap,
child: Text(
text,
maxLines: 2,
style: style,
),
),
color: Colors.transparent,
),
),
]
//)
// )
);
}
dynamic getShape(bool isShape) {
dynamic returnCode = (isShape == true)
? RoundedRectangleBorder(
side: BorderSide(width: 4, color: Colors.orangeAccent),
)
: null;
return returnCode;
}
dynamic _getButtonImage(String imageName) {
dynamic image;
try {
image = Image.asset(
imageName,
fit: BoxFit.fitWidth,
alignment: Alignment.center,
errorBuilder: (context, error, stackTrace) {
String url = Cache.mediaUrl + 'images/' + imageName.substring(11);
Widget image = FadeInImage.assetNetwork(
placeholder: 'asset/image/dots.gif',
image: url,
height: 180,
);
return image;
},
);
} on Exception catch (_) {
String url = Cache.mediaUrl + '/images/' + imageName;
image = FadeInImage.assetNetwork(
placeholder: 'asset/image/dots.gif',
image: url,
height: 180,
);
}
return image;
}
}