Hibok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

60 lines
1.8 KiB

  1. import 'package:chat/generated/i18n.dart';
  2. import 'package:chat/utils/LoadingDialog.dart';
  3. import 'package:extended_text_library/extended_text_library.dart';
  4. import 'package:flutter/material.dart';
  5. ///emoji/image text
  6. class EmojiGifText extends SpecialText {
  7. static const String flag = "<*";
  8. final int start;
  9. final isShowGif;
  10. EmojiGifText(TextStyle textStyle, {this.start,this.isShowGif=true})
  11. : super(EmojiGifText.flag, ">", textStyle);
  12. @override
  13. InlineSpan finishText() {
  14. var key = toString();
  15. if (EmojiGifUitl.instance.emojiMap.containsKey(key)) {
  16. //fontsize id define image height
  17. //size = 30.0/26.0 * fontSize
  18. final double size = 118.0;
  19. ///fontSize 26 and text height =30.0
  20. //final double fontSize = 26.0;
  21. return isShowGif?ImageSpan(AssetImage(EmojiGifUitl.instance.emojiMap[key]),
  22. actualText: key,
  23. imageWidth: size,
  24. imageHeight: size,
  25. start: start,
  26. fit: BoxFit.fill,
  27. margin: EdgeInsets.only(left: 2.0, top: 2.0, right: 2.0)):SpecialTextSpan(text:'[${I18n.of(LoadingManage.context).emoji}]', actualText: '' );
  28. // return Image.asset(EmojiGifUitl.instance.emojiMap[key]);
  29. }
  30. return TextSpan(text: toString(), style: textStyle);
  31. }
  32. }
  33. class EmojiGifUitl {
  34. final Map<String, String> _emojiMap = new Map<String, String>();
  35. Map<String, String> get emojiMap => _emojiMap;
  36. final String _emojiFilePath = "assets/images/sticker";
  37. static EmojiGifUitl _instance;
  38. static EmojiGifUitl get instance {
  39. if (_instance == null) _instance = new EmojiGifUitl._();
  40. return _instance;
  41. }
  42. EmojiGifUitl._() {
  43. for (int i = 1; i < 31; i++) {
  44. _emojiMap[EmojiGifText.flag+"_$i>"] = "$_emojiFilePath/sticker_$i.gif";
  45. }
  46. }
  47. }