Bidi class Null safety
This provides utility methods for working with bidirectional text. All of the methods are static, and are organized into a class primarily to group them together for documentation and discoverability.
Constructors
- Bidi()
Properties
- hashCode → int
-
The hash code for this object.
read-onlyinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
read-onlyinherited
Methods
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a non-existent method or property is accessed.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
detectRtlDirectionality(
String str, {bool isHtml = false}) → bool -
Check the estimated directionality of
str
, return true if the piece of text should be laid out in RTL direction. IfisHtml
is true, the string is HTML or HTML-escaped. -
endsWithLtr(
String text, [dynamic isHtml = false]) → bool -
Determines if the exit directionality (ie, the last strongly-directional
character in
text
is LTR. IfisHtml
is true, the text is HTML or HTML-escaped. -
endsWithRtl(
String text, [dynamic isHtml = false]) → bool -
Determines if the exit directionality (ie, the last strongly-directional
character in
text
is RTL. IfisHtml
is true, the text is HTML or HTML-escaped. -
enforceLtrInHtml(
String html) → String -
Enforce the
html
snippet in LTR directionality regardless of overall context. If the html piece was enclosed by a tag, the direction will be applied to existing tag, otherwise a span tag will be added as wrapper. For this reason, if html snippet start with with tag, this tag must enclose the whole piece. If the tag already has a direction specified, this new one will override existing one in behavior (tested on FF and IE). -
enforceLtrInText(
String text) → String -
Enforce LTR on both end of the given
text
using unicode BiDi formatting characters LRE and PDF. -
enforceRtlInHtml(
String html) → String -
Enforce the
html
snippet in RTL directionality regardless of overall context. If the html piece was enclosed by a tag, the direction will be applied to existing tag, otherwise a span tag will be added as wrapper. For this reason, if html snippet start with with tag, this tag must enclose the whole piece. If the tag already has a direction specified, this new one will override existing one in behavior (should work on Chrome, FF, and IE since this was ported directly from the Closure version). -
enforceRtlInText(
String text) → String -
Enforce RTL on both end of the given
text
using unicode BiDi formatting characters RLE and PDF. -
estimateDirectionOfText(
String text, {bool isHtml = false}) → TextDirection -
Estimates the directionality of
text
using the best known general-purpose method (using relative word counts). A TextDirection.UNKNOWN return value indicates completely neutral input.isHtml
is true iftext
HTML or HTML-escaped. -
guardBracketInHtml(
String str, [bool? isRtlContext]) → String -
Apply bracket guard to
str
using html span tag. This is to address the problem of messy bracket display that frequently happens in RTL layout. IfisRtlContext
is true, then we explicitly want to wrap in a span of RTL directionality, regardless of the estimated directionality. -
guardBracketInText(
String str, [bool? isRtlContext]) → String -
Apply bracket guard to
str
using LRM and RLM. This is to address the problem of messy bracket display that frequently happens in RTL layout. This version works for both plain text and html, but in some cases is not as good as guardBracketInHtml. IfisRtlContext
is true, then we explicitly want to wrap in a span of RTL directionality, regardless of the estimated directionality. -
hasAnyLtr(
String text, [dynamic isHtml = false]) → bool -
Determines if the given
text
has any LTR characters in it. IfisHtml
is true, the text is HTML or HTML-escaped. -
hasAnyRtl(
String text, [dynamic isHtml = false]) → bool -
Determines if the given
text
has any RTL characters in it. IfisHtml
is true, the text is HTML or HTML-escaped. -
isRtlLanguage(
[String? languageString]) → bool -
Check if a BCP 47 / III
languageString
indicates an RTL language. -
normalizeHebrewQuote(
String str) → String -
Replace the double and single quote directly after a Hebrew character in
str
with GERESH and GERSHAYIM. This is most likely the user's intention. -
startsWithLtr(
String text, [dynamic isHtml = false]) → bool -
Determines if the first character in
text
with strong directionality is LTR. IfisHtml
is true, the text is HTML or HTML-escaped. -
startsWithRtl(
String text, [dynamic isHtml = false]) → bool -
Determines if the first character in
text
with strong directionality is RTL. IfisHtml
is true, the text is HTML or HTML-escaped. -
stripHtmlIfNeeded(
String text) → String -
Returns the input
text
with spaces instead of HTML tags or HTML escapes, which is helpful for text directionality estimation. Note: This function should not be used in other contexts. It does not deal well with many things: comments, script, elements, style elements, dir attribute,>
in quoted attribute values, etc. But it does handle well enough the most common use cases. Since the worst that can happen as a result of these shortcomings is that the wrong directionality will be estimated, we have not invested in improving this.
Constants
- LRE → const String
-
Unicode "Left-To-Right Embedding" (LRE) character.
'\u202A'
- LRM → const String
-
Unicode "Left-To-Right Mark" (LRM) character.
'\u200E'
- PDF → const String
-
Unicode "Pop Directional Formatting" (PDF) character.
'\u202C'
- RLE → const String
-
Unicode "Right-To-Left Embedding" (RLE) character.
'\u202B'
- RLM → const String
-
Unicode "Right-To-Left Mark" (RLM) character.
'\u200F'