I would like to use the extended_text_field library using the WidgetSpan. There is an example on how to create an EmailText widget, but I don't understand how to integrate this into the ExtendedTextField. The documentation is not clear to me. Can someone post an example, please?
CodePudding user response:
You can take a look at my other answer.
But in general, if you take a look at the docs, you'll see that there are different classes that you can extend, such as SpecialText, SpecialTextSpanBuilder, and then you decide what you want to build.
This code example is taken from my above-linked answer.
If there's an @ symbol, it will be placed in a Chip widget:
import 'package:extended_text_field/extended_text_field.dart'; import 'package:flutter/material.dart'; const Color darkBlue = Color.fromARGB(255, 18, 32, 47); void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData( dividerColor: Colors.green, scaffoldBackgroundColor: darkBlue, ), debugShowCheckedModeBanner: false, home: SafeArea( child: Scaffold( backgroundColor: Colors.blue, body: ExtendedTextField( cursorColor: Colors.black, style: TextStyle(color: Colors.red), decoration: InputDecoration( border: OutlineInputBorder(), ), specialTextSpanBuilder: MySpecialTextSpanBuilder(), ), ), ), ); } } class MySpecialTextSpanBuilder extends SpecialTextSpanBuilder { @override TextSpan build(String data, {TextStyle? textStyle, SpecialTextGestureTapCallback? onTap}) { final lookingFor = "@"; final splitData = data.split(" "); final spans = splitData.map((e) { if (e == lookingFor) { return WidgetSpan( child: Chip( label: Text(e), ), ); } else { return TextSpan( text: e, style: TextStyle(color: Colors.red), ); } }).toList(); return TextSpan(children: spans, style: textStyle); } @override SpecialText? createSpecialText(String flag, {TextStyle? textStyle, SpecialTextGestureTapCallback? onTap, required int index}) { // TODO: implement createSpecialText throw UnimplementedError(); } }
