Please check this video.
Here I extend TextEditingController to highlight(also clickable) the keyword "ali". It is working perfectly whenever the user types "ali". But when initializing text to the controller, it is showing a lot of errors. Someone pls help me with how I can resolve this error.
Note: When I initialize the text and remove "recognizer" from "textspan" it is working perfectly without showing any error. I guess this issue is happening because of "recognizer" in the textspan.
here is my code, pls uncomment line number 15 to see the error.
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:kyubook/utils/utility.dart';
class TexspanTap extends StatefulWidget {
@override
_TexspanTapState createState() => _TexspanTapState();
}
class _TexspanTapState extends State<TexspanTap> {
final MyTextEditingcontroller _editingcontroller = MyTextEditingcontroller();
@override
void initState() {
//_editingcontroller.text = "dghali";
super.initState();
}
@override
void dispose() {
_editingcontroller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: SafeArea(
child: Column(
children: [
TextField(
controller: _editingcontroller,
),
],
),
),
);
}
}
class MyTextEditingcontroller extends TextEditingController {
@override
TextSpan buildTextSpan(
{required BuildContext context,
TextStyle? style,
required bool withComposing}) {
if (text.toLowerCase().contains("ali")) {
final List<InlineSpan> spans = [];
final int indexOfAli = text.indexOf("ali");
spans.add(TextSpan(text: text.substring(0, indexOfAli)));
spans.add(
TextSpan(
text: text.substring(indexOfAli, indexOfAli + 3),
style: const TextStyle(color: Colors.red),
recognizer: TapGestureRecognizer()
..onTapDown = (final details) {
commonToast("Touched");
}),
);
spans.add(TextSpan(text: text.substring(indexOfAli + 3, text.length)));
return TextSpan(children: spans, style: style);
}
return TextSpan(text: text, style: style);
}
}
Logs
I/flutter (26328): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (26328): The following assertion was thrown building
I/flutter (26328): RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#87b14](state:
I/flutter (26328): RawGestureDetectorState#ede1a(gestures: <none>, excludeFromSemantics: true, behavior: opaque)):
I/flutter (26328): 'package:flutter/src/rendering/editable.dart': Failed assertion: line 2376 pos 14: 'readOnly &&
I/flutter (26328): !obscureText': is not true.
I/flutter (26328):
I/flutter (26328): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter (26328): more information in this error message to help you determine and fix the underlying cause.
I/flutter (26328): In either case, please report this assertion by filing a bug on GitHub:
I/flutter (26328): https://github.com/flutter/flutter/issues/new?template=2_bug.md
I/flutter (26328):
I/flutter (26328): The relevant error-causing widget was:
I/flutter (26328): TextField
I/flutter (26328): file:///Users/ali/Documents/Flutter/Xcelpros/kb_main_clientside/lib/components/profanity_checker/screen/textspan_tap.dart:32:13
I/flutter (26328):
I/flutter (26328): When the exception was thrown, this was the stack:
I/flutter (26328): #2 RenderEditable.describeSemanticsConfiguration (package:flutter/src/rendering/editable.dart:2376:14)
I/flutter (26328): #3 RenderObject._semanticsConfiguration (package:flutter/src/rendering/object.dart:2525:7)
I/flutter (26328): #4 RenderObject.attach (package:flutter/src/rendering/object.dart:1416:34)
I/flutter (26328): #5 RelayoutWhenSystemFontsChangeMixin.attach (package:flutter/src/rendering/object.dart:3401:11)
I/flutter (26328): #6 RenderEditable.attach (package:flutter/src/rendering/editable.dart:2612:11)
I/flutter (26328): #7 AbstractNode.adoptChild (package:flutter/src/foundation/node.dart:138:13)
I/flutter (26328): #8 RenderObject.adoptChild (package:flutter/src/rendering/object.dart:1274:11)
I/flutter (26328): #9 RenderObjectWithChildMixin.child= (package:flutter/src/rendering/object.dart:3022:7)
I/flutter (26328): #10 SingleChildRenderObjectElement.insertRenderObjectChild (package:flutter/src/widgets/framework.dart:6098:18)
I/flutter (26328): #11 RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:5758:35)
I/flutter (26328): #12 RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5440:5)
I/flutter (26328): ... Normal element mounting (92 frames)
I/flutter (26328): #104 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3611:14)
I/flutter (26328): #105 Element.updateChild (package:flutter/src/widgets/framework.dart:3363:18)
I/flutter (26328): #106 _DecorationElement._mountChild (package:flutter/src/material/input_decorator.dart:1591:31)
I/flutter (26328): #107 _DecorationElement.mount (package:flutter/src/material/input_decorator.dart:1604:5)
I/flutter (26328): ... Normal element mounting (69 frames)
I/flutter (26328): #176 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3611:14)
I/flutter (26328): #177 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6221:36)
I/flutter (26328): #178 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6232:32)
I/flutter (26328): ... Normal element mounting (34 frames)
I/flutter (26328): #212 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3611:14)
I/flutter (26328): #213 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6221:36)
I/flutter (26328): #214 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6232:32)
I/flutter (26328): ... Normal element mounting (238 frames)
I/flutter (26328): #452 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3611:14)
I/flutter (26328): #453 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6221:36)
I/flutter (26328): #454 Element.updateChild (package:flutter/src/widgets/framework.dart:3363:18)
I/flutter (26328): #455 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5654:32)
I/flutter (26328): #456 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6243:17)
I/flutter (26328): #457 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #458 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4599:16)
I/flutter (26328): #459 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
I/flutter (26328): #460 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
I/flutter (26328): #461 StatefulElement.update (package:flutter/src/widgets/framework.dart:4778:5)
I/flutter (26328): #462 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #463 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4599:16)
I/flutter (26328): #464 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
I/flutter (26328): #465 ProxyElement.update (package:flutter/src/widgets/framework.dart:4922:5)
I/flutter (26328): #466 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #467 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4599:16)
I/flutter (26328): #468 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
I/flutter (26328): #469 ProxyElement.update (package:flutter/src/widgets/framework.dart:4922:5)
I/flutter (26328): #470 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:181:11)
I/flutter (26328): #471 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #472 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6090:14)
I/flutter (26328): #473 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #474 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4599:16)
I/flutter (26328): #475 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
I/flutter (26328): #476 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
I/flutter (26328): #477 StatefulElement.update (package:flutter/src/widgets/framework.dart:4778:5)
I/flutter (26328): #478 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #479 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6090:14)
I/flutter (26328): #480 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #481 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6090:14)
I/flutter (26328): #482 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #483 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4599:16)
I/flutter (26328): #484 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
I/flutter (26328): #485 ProxyElement.update (package:flutter/src/widgets/framework.dart:4922:5)
I/flutter (26328): #486 Element.updateChild (package:flutter/src/widgets/framework.dart:3350:15)
I/flutter (26328): #487 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4599:16)
I/flutter (26328): #488 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
I/flutter (26328): #489 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
I/flutter (26328): #490 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2582:33)
I/flutter (26328): #491 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:875:21)
I/flutter (26328): #492 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:328:5)
I/flutter (26328): #493 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
I/flutter (26328): #494 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1082:9)
I/flutter (26328): #495 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:998:5)
I/flutter (26328): #499 _invoke (dart:ui/hooks.dart:163:10)
I/flutter (26328): #500 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:259:5)
I/flutter (26328): #501 _drawFrame (dart:ui/hooks.dart:126:31)
I/flutter (26328): (elided 5 frames from class _AssertionError and dart:async)
I/flutter (26328):
I/flutter (26328): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (26328): Another exception was thrown: LateInitializationError: Field '_tap@798245603' has not been initialized.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4269 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4269 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4269 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
I/chatty (26328): uid=10089(com.kyubook.kyubookapp) 1.ui identical 2 lines
I/flutter (26328): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4269 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/chatty (26328): uid=10089(com.kyubook.kyubookapp) 1.ui identical 2 lines
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/chatty (26328): uid=10089(com.kyubook.kyubookapp) 1.ui identical 1 line
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/chatty (26328): uid=10089(com.kyubook.kyubookapp) 1.ui identical 3 lines
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/chatty (26328): uid=10089(com.kyubook.kyubookapp) 1.ui identical 2 lines
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4269 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
I/chatty (26328): uid=10089(com.kyubook.kyubookapp) 1.ui identical 1 line
I/flutter (26328): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4269 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/foundation/node.dart': Failed assertion: line 112 pos 12: '_owner != null': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4269 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4269 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
I/flutter (26328): Another exception was thrown: A GlobalKey was used multiple times inside one widget's child list.
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
I/chatty (26328): uid=10089(com.kyubook.kyubookapp) 1.ui identical 18 lines
I/flutter (26328): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 1285 pos 12: 'child.parentData != null': is not true.
TextSpan within TextSpan with recognizer only work in RichText widget. See here
So in short, you need RichText in your TextField. But TextFields don't support RichText as of now. You need some package which can make it happen. I found rich_input.
Give it a try if this can help you out.