2021-08-07 19:36:42 +02:00
|
|
|
import 'package:flutter/material.dart';
|
2021-10-26 18:50:34 +02:00
|
|
|
|
2021-08-07 19:36:42 +02:00
|
|
|
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
2021-10-26 18:50:34 +02:00
|
|
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|
|
|
import 'package:matrix/matrix.dart';
|
|
|
|
|
2021-11-09 21:32:16 +01:00
|
|
|
import '../../../config/app_config.dart';
|
2021-08-07 19:36:42 +02:00
|
|
|
import 'image_bubble.dart';
|
|
|
|
|
|
|
|
class Sticker extends StatefulWidget {
|
|
|
|
final Event event;
|
|
|
|
|
|
|
|
const Sticker(this.event, {Key key}) : super(key: key);
|
|
|
|
|
|
|
|
@override
|
|
|
|
_StickerState createState() => _StickerState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _StickerState extends State<Sticker> {
|
|
|
|
bool animated;
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
// stickers should default to a ratio of 1:1
|
|
|
|
var ratio = 1.0;
|
|
|
|
// if a width and a height is specified for stickers, use those!
|
|
|
|
if (widget.event.infoMap['w'] is int && widget.event.infoMap['h'] is int) {
|
|
|
|
ratio = widget.event.infoMap['w'] / widget.event.infoMap['h'];
|
|
|
|
// make sure the ratio is within 0.9 - 2.0
|
|
|
|
if (ratio > 2.0) {
|
|
|
|
ratio = 2.0;
|
|
|
|
}
|
|
|
|
if (ratio < 0.9) {
|
|
|
|
ratio = 0.9;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ImageBubble(
|
|
|
|
widget.event,
|
|
|
|
width: 400,
|
|
|
|
height: 400 / ratio,
|
|
|
|
fit: ratio <= 1.0 ? BoxFit.contain : BoxFit.cover,
|
|
|
|
onTap: () {
|
|
|
|
setState(() => animated = true);
|
|
|
|
showOkAlertDialog(
|
|
|
|
context: context,
|
|
|
|
message: widget.event.body,
|
|
|
|
okLabel: L10n.of(context).ok,
|
|
|
|
);
|
|
|
|
},
|
|
|
|
animated: animated ?? AppConfig.autoplayImages,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|