关于flutter使用extended_text_field来让表情显示在输入框中

思路:flutter原本提供的文本输入框TextField貌似不支持输入表情,于是就需要一些其他东西代替这个控件,例如这个extended_text_field,这里输入一张图片的形式就是通过输入一些关键字符串接着extended_text_field就会检测到关键字符串,之后将关键字符串转化为图片等东西

具体做法如下:

输入文本就没意思了,直接用TextField就行了,这里直接体验表情输入,表情用一张图片代替。为此新建一个项目,项目根目录lib文件夹旁边新建一个imgs文件夹,文件夹中放一张名为p1.png的图片。接着在pubspec.yaml中引入图片和txtended_text_field的包,如下:

接着我们直接使用ExtendTextField,像TextField一样。。。。。。。。。肯定是不行的,这样带来的结果就是发挥的作用和TextField差不多,如下:

我们还需要加上特殊文本构造器SpecialTextSpanBuilder,这个玩意儿是一个抽象类还不能直接实例化不然直接给放进ExtendedTextField里头了,如下:

因此我们需要自己去继承这玩意儿写一个自己的特殊文本构造器MySpecialTextSpanBuilder

这里又有个问题了,返回的类型是一个SpecialText,但是!!!,SpecialText又是一个抽象类了。。。。。。得了,继续继承吧(实际上这一步非常重要,关乎你返回的东西到底是什么),得到一个咱们自己的MySpecialText(这里命名成MyEmoji,因为毕竟是要显示表情嘛),如下:

这里解释一下,“@”和“)”用处,就是当你输入文本框的东西是前“@”后“)”的况下,这部分就会变成你的图片,如下:

再输入一个)后变为如下:

完成了表情的输入,完美!

最后再附加一个网络图片的案例:

全部代码(都在main.dart文件中):

import 'package:flutter/material.dart';
import 'package:extended_text_field/extended_text_field.dart';
main(){runApp(MaterialApp(home: H(),));}
class H extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("D"),),
      body: ExtendedTextField(specialTextSpanBuilder: MySpecialTextSpanBuilder(),),
    );
  }
}

class MySpecialTextSpanBuilder extends SpecialTextSpanBuilder{
  @override
  SpecialText? createSpecialText(String flag, {TextStyle? textStyle, SpecialTextGestureTapCallback? onTap, required int index}) {
    return MyEmojiText("@",")",null);
  }
}

class MyEmojiText extends SpecialText{
  MyEmojiText(super.startFlag, super.endFlag, super.textStyle);
  @override
  InlineSpan finishText() {
    return ImageSpan(AssetImage('imgs/p1.png'), imageWidth: 40, imageHeight: 40);
  }
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
flutter_downloader是一个用于在Flutter应用程序进行文件下载的插件。它提供了一种简单而强大的方式来管理和监控文件下载任务。 使用flutter_downloader,你可以轻松地添加文件下载功能到你的Flutter应用程序。它支持多个平台,包括Android和iOS,并且提供了一组易于使用的API来管理下载任务。 要使用flutter_downloader,首先需要在你的Flutter项目添加依赖。在pubspec.yaml文件,添加以下内容: ``` dependencies: flutter_downloader: ^1.6.0 ``` 然后运行`flutter pub get`命令来获取依赖。 接下来,在你的代码导入flutter_downloader包,并使用它来创建和管理下载任务。你可以使用`FlutterDownloader.enqueue`方法来创建一个下载任务,并传递下载链接、保存路径等参数。你还可以使用`FlutterDownloader.open`方法来打开已下载的文件。 以下是一个简单的示例代码,演示了如何使用flutter_downloader进行文件下载: ```dart import 'package:flutter/material.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('File Downloader'), ), body: Center( child: RaisedButton( child: Text('Download File'), onPressed: () { _startDownload(); }, ), ), ), ); } void _startDownload() async { String url = 'https://example.com/file.pdf'; String savedDir = '/storage/emulated/0/Download'; await FlutterDownloader.enqueue( url: url, savedDir: savedDir, showNotification: true, openFileFromNotification: true, ); } } ``` 这是一个简单的示例,当用户点击按钮时,会触发文件下载任务。下载的文件将保存在指定的目录,并且会显示下载通知。用户可以通过通知来打开已下载的文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值