Flutter iOS Embedder
FlutterTextInputPlugin.mm File Reference
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/UIViewController+FlutterScreenAndSceneIfLoaded.h"
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#include "unicode/uchar.h"
#include "flutter/fml/logging.h"
#include "flutter/fml/platform/darwin/string_range_sanitization.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterSharedApplication.h"

Go to the source code of this file.

Classes

class  FlutterSecureTextInputView
 
class  FlutterTextInputViewAccessibilityHider
 
class  FlutterTimerProxy
 

Functions

static BOOL IsEmoji (NSString *text, NSRange charRange)
 
static BOOL ShouldShowSystemKeyboard (NSDictionary *type)
 
static UIKeyboardType ToUIKeyboardType (NSDictionary *type)
 
static UITextAutocapitalizationType ToUITextAutoCapitalizationType (NSDictionary *type)
 
static UIReturnKeyType ToUIReturnKeyType (NSString *inputType)
 
static UITextContentType ToUITextContentType (NSArray< NSString * > *hints)
 
static NSString * AutofillIdFromDictionary (NSDictionary *dictionary)
 
typedef NS_ENUM (NSInteger, FlutterAutofillType)
 
static BOOL IsFieldPasswordRelated (NSDictionary *configuration)
 
static FlutterAutofillType AutofillTypeOf (NSDictionary *configuration)
 
static BOOL IsApproximatelyEqual (float x, float y, float delta)
 
static BOOL IsSelectionRectBoundaryCloserToPoint (CGPoint point, CGRect selectionRect, BOOL selectionRectIsRTL, BOOL useTrailingBoundaryOfSelectionRect, CGRect otherSelectionRect, BOOL otherSelectionRectIsRTL, CGFloat verticalPrecision)
 

Variables

static FLUTTER_ASSERT_ARC const char kTextAffinityDownstream [] = "TextAffinity.downstream"
 
static const char kTextAffinityUpstream [] = "TextAffinity.upstream"
 
static constexpr double kUITextInputAccessibilityEnablingDelaySeconds = 0.5
 
static const NSTimeInterval kKeyboardAnimationDelaySeconds = 0.1
 
static const NSTimeInterval kKeyboardAnimationTimeToCompleteion = 0.3
 
const CGRect kInvalidFirstRect = {{-1, -1}, {9999, 9999}}
 
static NSString *const kShowMethod = @"@"TextInput.show"
 
static NSString *const kHideMethod = @"@"TextInput.hide"
 
static NSString *const kSetClientMethod = @"@"TextInput.setClient"
 
static NSString *const kSetPlatformViewClientMethod = @"@"TextInput.setPlatformViewClient"
 
static NSString *const kSetEditingStateMethod = @"@"TextInput.setEditingState"
 
static NSString *const kClearClientMethod = @"@"TextInput.clearClient"
 
static NSString *const kSetEditableSizeAndTransformMethod
 
static NSString *const kSetMarkedTextRectMethod = @"@"TextInput.setMarkedTextRect"
 
static NSString *const kFinishAutofillContextMethod = @"@"TextInput.finishAutofillContext"
 
static NSString *const kDeprecatedSetSelectionRectsMethod = @"@"TextInput.setSelectionRects"
 
static NSString *const kSetSelectionRectsMethod = @"@"Scribble.setSelectionRects"
 
static NSString *const kStartLiveTextInputMethod = @"@"TextInput.startLiveTextInput"
 
static NSString *const kUpdateConfigMethod = @"@"TextInput.updateConfig"
 
static NSString *const kOnInteractiveKeyboardPointerMoveMethod
 
static NSString *const kOnInteractiveKeyboardPointerUpMethod
 
static NSString *const kSecureTextEntry = @"@"obscureText"
 
static NSString *const kKeyboardType = @"@"inputType"
 
static NSString *const kKeyboardAppearance = @"@"keyboardAppearance"
 
static NSString *const kInputAction = @"@"inputAction"
 
static NSString *const kEnableDeltaModel = @"@"enableDeltaModel"
 
static NSString *const kEnableInteractiveSelection = @"@"enableInteractiveSelection"
 
static NSString *const kSmartDashesType = @"@"smartDashesType"
 
static NSString *const kSmartQuotesType = @"@"smartQuotesType"
 
static NSString *const kAssociatedAutofillFields = @"@"fields"
 
static NSString *const kAutofillProperties = @"@"autofill"
 
static NSString *const kAutofillId = @"@"uniqueIdentifier"
 
static NSString *const kAutofillEditingValue = @"@"editingValue"
 
static NSString *const kAutofillHints = @"@"hints"
 
static NSString *const kAutocorrectionType = @"@"autocorrect"
 
const char * _selectionAffinity
 
FlutterTextRange_selectedTextRange
 
UIInputViewController * _inputViewController
 
CGRect _cachedFirstRect
 
FlutterScribbleInteractionStatus _scribbleInteractionStatus
 
BOOL _hasPlaceholder
 
bool _isSystemKeyboardEnabled
 
bool _isFloatingCursorActive
 
CGPoint _floatingCursorOffset
 
bool _enableInteractiveSelection
 

Function Documentation

◆ AutofillIdFromDictionary()

static NSString* AutofillIdFromDictionary ( NSDictionary *  dictionary)
static

Definition at line 330 of file FlutterTextInputPlugin.mm.

330  {
331  NSDictionary* autofill = dictionary[kAutofillProperties];
332  if (autofill) {
333  return autofill[kAutofillId];
334  }
335 
336  // When autofill is nil, the field may still need an autofill id
337  // if the field is for password.
338  return [dictionary[kSecureTextEntry] boolValue] ? @"password" : nil;
339 }
static NSString *const kSecureTextEntry
static NSString *const kAutofillId
static NSString *const kAutofillProperties

References kAutofillId, kAutofillProperties, and kSecureTextEntry.

Referenced by IsFieldPasswordRelated().

◆ AutofillTypeOf()

static FlutterAutofillType AutofillTypeOf ( NSDictionary *  configuration)
static

Definition at line 425 of file FlutterTextInputPlugin.mm.

425  {
426  for (NSDictionary* field in configuration[kAssociatedAutofillFields]) {
427  if (IsFieldPasswordRelated(field)) {
428  return kFlutterAutofillTypePassword;
429  }
430  }
431 
432  if (IsFieldPasswordRelated(configuration)) {
433  return kFlutterAutofillTypePassword;
434  }
435 
436  NSDictionary* autofill = configuration[kAutofillProperties];
437  UITextContentType contentType = ToUITextContentType(autofill[kAutofillHints]);
438  return !autofill || [contentType isEqualToString:@""] ? kFlutterAutofillTypeNone
439  : kFlutterAutofillTypeRegular;
440 }
static NSString *const kAutofillHints
static NSString *const kAssociatedAutofillFields
static BOOL IsFieldPasswordRelated(NSDictionary *configuration)
static UITextContentType ToUITextContentType(NSArray< NSString * > *hints)

References IsFieldPasswordRelated(), kAssociatedAutofillFields, kAutofillHints, kAutofillProperties, and ToUITextContentType().

◆ IsApproximatelyEqual()

static BOOL IsApproximatelyEqual ( float  x,
float  y,
float  delta 
)
static

Definition at line 442 of file FlutterTextInputPlugin.mm.

442  {
443  return fabsf(x - y) <= delta;
444 }

Referenced by FlutterTextPosition::initWithIndex:affinity:.

◆ IsEmoji()

static BOOL IsEmoji ( NSString *  text,
NSRange  charRange 
)
static

Definition at line 86 of file FlutterTextInputPlugin.mm.

86  {
87  UChar32 codePoint;
88  BOOL gotCodePoint = [text getBytes:&codePoint
89  maxLength:sizeof(codePoint)
90  usedLength:NULL
91  encoding:NSUTF32StringEncoding
92  options:kNilOptions
93  range:charRange
94  remainingRange:NULL];
95  return gotCodePoint && u_hasBinaryProperty(codePoint, UCHAR_EMOJI);
96 }

◆ IsFieldPasswordRelated()

static BOOL IsFieldPasswordRelated ( NSDictionary *  configuration)
static

Definition at line 399 of file FlutterTextInputPlugin.mm.

399  {
400  // Autofill is explicitly disabled if the id isn't present.
401  if (!AutofillIdFromDictionary(configuration)) {
402  return NO;
403  }
404 
405  BOOL isSecureTextEntry = [configuration[kSecureTextEntry] boolValue];
406  if (isSecureTextEntry) {
407  return YES;
408  }
409 
410  NSDictionary* autofill = configuration[kAutofillProperties];
411  UITextContentType contentType = ToUITextContentType(autofill[kAutofillHints]);
412 
413  if ([contentType isEqualToString:UITextContentTypePassword] ||
414  [contentType isEqualToString:UITextContentTypeUsername]) {
415  return YES;
416  }
417 
418  if ([contentType isEqualToString:UITextContentTypeNewPassword]) {
419  return YES;
420  }
421 
422  return NO;
423 }
static NSString * AutofillIdFromDictionary(NSDictionary *dictionary)

References AutofillIdFromDictionary(), kAutofillHints, kAutofillProperties, kSecureTextEntry, and ToUITextContentType().

Referenced by AutofillTypeOf().

◆ IsSelectionRectBoundaryCloserToPoint()

static BOOL IsSelectionRectBoundaryCloserToPoint ( CGPoint  point,
CGRect  selectionRect,
BOOL  selectionRectIsRTL,
BOOL  useTrailingBoundaryOfSelectionRect,
CGRect  otherSelectionRect,
BOOL  otherSelectionRectIsRTL,
CGFloat  verticalPrecision 
)
static

Definition at line 468 of file FlutterTextInputPlugin.mm.

474  {
475  // The point is inside the selectionRect's corresponding half-rect area.
476  if (CGRectContainsPoint(
477  CGRectMake(
478  selectionRect.origin.x + ((useTrailingBoundaryOfSelectionRect ^ selectionRectIsRTL)
479  ? 0.5 * selectionRect.size.width
480  : 0),
481  selectionRect.origin.y, 0.5 * selectionRect.size.width, selectionRect.size.height),
482  point)) {
483  return YES;
484  }
485  // pointForSelectionRect is either leading-center or trailing-center point of selectionRect.
486  CGPoint pointForSelectionRect = CGPointMake(
487  selectionRect.origin.x +
488  (selectionRectIsRTL ^ useTrailingBoundaryOfSelectionRect ? selectionRect.size.width : 0),
489  selectionRect.origin.y + selectionRect.size.height * 0.5);
490  float yDist = fabs(pointForSelectionRect.y - point.y);
491  float xDist = fabs(pointForSelectionRect.x - point.x);
492 
493  // pointForOtherSelectionRect is the leading-center point of otherSelectionRect.
494  CGPoint pointForOtherSelectionRect = CGPointMake(
495  otherSelectionRect.origin.x + (otherSelectionRectIsRTL ? otherSelectionRect.size.width : 0),
496  otherSelectionRect.origin.y + otherSelectionRect.size.height * 0.5);
497  float yDistOther = fabs(pointForOtherSelectionRect.y - point.y);
498  float xDistOther = fabs(pointForOtherSelectionRect.x - point.x);
499 
500  // This serves a similar purpose to IsApproximatelyEqual, allowing a little buffer before
501  // declaring something closer vertically to account for the small variations in size and position
502  // of SelectionRects, especially when dealing with emoji.
503  BOOL isCloserVertically = yDist < yDistOther - verticalPrecision;
504  BOOL isEqualVertically = IsApproximatelyEqual(yDist, yDistOther, verticalPrecision);
505  BOOL isAboveBottomOfLine = point.y <= selectionRect.origin.y + selectionRect.size.height;
506  BOOL isCloserHorizontally = xDist < xDistOther;
507  BOOL isBelowBottomOfLine = point.y > selectionRect.origin.y + selectionRect.size.height;
508  // Is "farther away", or is closer to the end of the text line.
509  BOOL isFarther;
510  if (selectionRectIsRTL) {
511  isFarther = selectionRect.origin.x < otherSelectionRect.origin.x;
512  } else {
513  isFarther = selectionRect.origin.x +
514  (useTrailingBoundaryOfSelectionRect ? selectionRect.size.width : 0) >
515  otherSelectionRect.origin.x;
516  }
517  return (isCloserVertically ||
518  (isEqualVertically &&
519  ((isAboveBottomOfLine && isCloserHorizontally) || (isBelowBottomOfLine && isFarther))));
520 }
static BOOL IsApproximatelyEqual(float x, float y, float delta)

◆ NS_ENUM()

typedef NS_ENUM ( NSInteger  ,
FlutterAutofillType   
)

Definition at line 390 of file FlutterTextInputPlugin.mm.

390  {
391  // The field does not have autofillable content. Additionally if
392  // the field is currently in the autofill context, it will be
393  // removed from the context without triggering autofill save.
394  kFlutterAutofillTypeNone,
395  kFlutterAutofillTypeRegular,
396  kFlutterAutofillTypePassword,
397 };

◆ ShouldShowSystemKeyboard()

static BOOL ShouldShowSystemKeyboard ( NSDictionary *  type)
static

Definition at line 102 of file FlutterTextInputPlugin.mm.

102  {
103  NSString* inputType = type[@"name"];
104  return ![inputType isEqualToString:@"TextInputType.none"];
105 }

◆ ToUIKeyboardType()

static UIKeyboardType ToUIKeyboardType ( NSDictionary *  type)
static

Definition at line 106 of file FlutterTextInputPlugin.mm.

106  {
107  NSString* inputType = type[@"name"];
108  if ([inputType isEqualToString:@"TextInputType.address"]) {
109  return UIKeyboardTypeDefault;
110  }
111  if ([inputType isEqualToString:@"TextInputType.datetime"]) {
112  return UIKeyboardTypeNumbersAndPunctuation;
113  }
114  if ([inputType isEqualToString:@"TextInputType.emailAddress"]) {
115  return UIKeyboardTypeEmailAddress;
116  }
117  if ([inputType isEqualToString:@"TextInputType.multiline"]) {
118  return UIKeyboardTypeDefault;
119  }
120  if ([inputType isEqualToString:@"TextInputType.name"]) {
121  return UIKeyboardTypeNamePhonePad;
122  }
123  if ([inputType isEqualToString:@"TextInputType.number"]) {
124  if ([type[@"signed"] boolValue]) {
125  return UIKeyboardTypeNumbersAndPunctuation;
126  }
127  if ([type[@"decimal"] boolValue]) {
128  return UIKeyboardTypeDecimalPad;
129  }
130  return UIKeyboardTypeNumberPad;
131  }
132  if ([inputType isEqualToString:@"TextInputType.phone"]) {
133  return UIKeyboardTypePhonePad;
134  }
135  if ([inputType isEqualToString:@"TextInputType.text"]) {
136  return UIKeyboardTypeDefault;
137  }
138  if ([inputType isEqualToString:@"TextInputType.url"]) {
139  return UIKeyboardTypeURL;
140  }
141  if ([inputType isEqualToString:@"TextInputType.visiblePassword"]) {
142  return UIKeyboardTypeASCIICapable;
143  }
144  if ([inputType isEqualToString:@"TextInputType.webSearch"]) {
145  return UIKeyboardTypeWebSearch;
146  }
147  if ([inputType isEqualToString:@"TextInputType.twitter"]) {
148  return UIKeyboardTypeTwitter;
149  }
150  return UIKeyboardTypeDefault;
151 }

◆ ToUIReturnKeyType()

static UIReturnKeyType ToUIReturnKeyType ( NSString *  inputType)
static

Definition at line 165 of file FlutterTextInputPlugin.mm.

165  {
166  // Where did the term "unspecified" come from? iOS has a "default" and Android
167  // has "unspecified." These 2 terms seem to mean the same thing but we need
168  // to pick just one. "unspecified" was chosen because "default" is often a
169  // reserved word in languages with switch statements (dart, java, etc).
170  if ([inputType isEqualToString:@"TextInputAction.unspecified"]) {
171  return UIReturnKeyDefault;
172  }
173 
174  if ([inputType isEqualToString:@"TextInputAction.done"]) {
175  return UIReturnKeyDone;
176  }
177 
178  if ([inputType isEqualToString:@"TextInputAction.go"]) {
179  return UIReturnKeyGo;
180  }
181 
182  if ([inputType isEqualToString:@"TextInputAction.send"]) {
183  return UIReturnKeySend;
184  }
185 
186  if ([inputType isEqualToString:@"TextInputAction.search"]) {
187  return UIReturnKeySearch;
188  }
189 
190  if ([inputType isEqualToString:@"TextInputAction.next"]) {
191  return UIReturnKeyNext;
192  }
193 
194  if ([inputType isEqualToString:@"TextInputAction.continueAction"]) {
195  return UIReturnKeyContinue;
196  }
197 
198  if ([inputType isEqualToString:@"TextInputAction.join"]) {
199  return UIReturnKeyJoin;
200  }
201 
202  if ([inputType isEqualToString:@"TextInputAction.route"]) {
203  return UIReturnKeyRoute;
204  }
205 
206  if ([inputType isEqualToString:@"TextInputAction.emergencyCall"]) {
207  return UIReturnKeyEmergencyCall;
208  }
209 
210  if ([inputType isEqualToString:@"TextInputAction.newline"]) {
211  return UIReturnKeyDefault;
212  }
213 
214  // Present default key if bad input type is given.
215  return UIReturnKeyDefault;
216 }

◆ ToUITextAutoCapitalizationType()

static UITextAutocapitalizationType ToUITextAutoCapitalizationType ( NSDictionary *  type)
static

Definition at line 153 of file FlutterTextInputPlugin.mm.

153  {
154  NSString* textCapitalization = type[@"textCapitalization"];
155  if ([textCapitalization isEqualToString:@"TextCapitalization.characters"]) {
156  return UITextAutocapitalizationTypeAllCharacters;
157  } else if ([textCapitalization isEqualToString:@"TextCapitalization.sentences"]) {
158  return UITextAutocapitalizationTypeSentences;
159  } else if ([textCapitalization isEqualToString:@"TextCapitalization.words"]) {
160  return UITextAutocapitalizationTypeWords;
161  }
162  return UITextAutocapitalizationTypeNone;
163 }

◆ ToUITextContentType()

static UITextContentType ToUITextContentType ( NSArray< NSString * > *  hints)
static

Definition at line 218 of file FlutterTextInputPlugin.mm.

218  {
219  if (!hints || hints.count == 0) {
220  // If no hints are specified, use the default content type nil.
221  return nil;
222  }
223 
224  NSString* hint = hints[0];
225  if ([hint isEqualToString:@"addressCityAndState"]) {
226  return UITextContentTypeAddressCityAndState;
227  }
228 
229  if ([hint isEqualToString:@"addressState"]) {
230  return UITextContentTypeAddressState;
231  }
232 
233  if ([hint isEqualToString:@"addressCity"]) {
234  return UITextContentTypeAddressCity;
235  }
236 
237  if ([hint isEqualToString:@"sublocality"]) {
238  return UITextContentTypeSublocality;
239  }
240 
241  if ([hint isEqualToString:@"streetAddressLine1"]) {
242  return UITextContentTypeStreetAddressLine1;
243  }
244 
245  if ([hint isEqualToString:@"streetAddressLine2"]) {
246  return UITextContentTypeStreetAddressLine2;
247  }
248 
249  if ([hint isEqualToString:@"countryName"]) {
250  return UITextContentTypeCountryName;
251  }
252 
253  if ([hint isEqualToString:@"fullStreetAddress"]) {
254  return UITextContentTypeFullStreetAddress;
255  }
256 
257  if ([hint isEqualToString:@"postalCode"]) {
258  return UITextContentTypePostalCode;
259  }
260 
261  if ([hint isEqualToString:@"location"]) {
262  return UITextContentTypeLocation;
263  }
264 
265  if ([hint isEqualToString:@"creditCardNumber"]) {
266  return UITextContentTypeCreditCardNumber;
267  }
268 
269  if ([hint isEqualToString:@"email"]) {
270  return UITextContentTypeEmailAddress;
271  }
272 
273  if ([hint isEqualToString:@"jobTitle"]) {
274  return UITextContentTypeJobTitle;
275  }
276 
277  if ([hint isEqualToString:@"givenName"]) {
278  return UITextContentTypeGivenName;
279  }
280 
281  if ([hint isEqualToString:@"middleName"]) {
282  return UITextContentTypeMiddleName;
283  }
284 
285  if ([hint isEqualToString:@"familyName"]) {
286  return UITextContentTypeFamilyName;
287  }
288 
289  if ([hint isEqualToString:@"name"]) {
290  return UITextContentTypeName;
291  }
292 
293  if ([hint isEqualToString:@"namePrefix"]) {
294  return UITextContentTypeNamePrefix;
295  }
296 
297  if ([hint isEqualToString:@"nameSuffix"]) {
298  return UITextContentTypeNameSuffix;
299  }
300 
301  if ([hint isEqualToString:@"nickname"]) {
302  return UITextContentTypeNickname;
303  }
304 
305  if ([hint isEqualToString:@"organizationName"]) {
306  return UITextContentTypeOrganizationName;
307  }
308 
309  if ([hint isEqualToString:@"telephoneNumber"]) {
310  return UITextContentTypeTelephoneNumber;
311  }
312 
313  if ([hint isEqualToString:@"password"]) {
314  return UITextContentTypePassword;
315  }
316 
317  if ([hint isEqualToString:@"oneTimeCode"]) {
318  return UITextContentTypeOneTimeCode;
319  }
320 
321  if ([hint isEqualToString:@"newPassword"]) {
322  return UITextContentTypeNewPassword;
323  }
324 
325  return hints[0];
326 }

Referenced by AutofillTypeOf(), and IsFieldPasswordRelated().

Variable Documentation

◆ _cachedFirstRect

CGRect _cachedFirstRect

Definition at line 816 of file FlutterTextInputPlugin.mm.

◆ _enableInteractiveSelection

bool _enableInteractiveSelection

Definition at line 825 of file FlutterTextInputPlugin.mm.

◆ _floatingCursorOffset

CGPoint _floatingCursorOffset

Definition at line 824 of file FlutterTextInputPlugin.mm.

◆ _hasPlaceholder

BOOL _hasPlaceholder

Definition at line 818 of file FlutterTextInputPlugin.mm.

◆ _inputViewController

UIInputViewController* _inputViewController

Definition at line 815 of file FlutterTextInputPlugin.mm.

◆ _isFloatingCursorActive

bool _isFloatingCursorActive

Definition at line 823 of file FlutterTextInputPlugin.mm.

◆ _isSystemKeyboardEnabled

bool _isSystemKeyboardEnabled

Definition at line 822 of file FlutterTextInputPlugin.mm.

◆ _scribbleInteractionStatus

FlutterScribbleInteractionStatus _scribbleInteractionStatus

Definition at line 817 of file FlutterTextInputPlugin.mm.

◆ _selectedTextRange

FlutterTextRange* _selectedTextRange

Definition at line 814 of file FlutterTextInputPlugin.mm.

◆ _selectionAffinity

const char* _selectionAffinity
Initial value:
{
int _textInputClient

Definition at line 813 of file FlutterTextInputPlugin.mm.

◆ kAssociatedAutofillFields

NSString* const kAssociatedAutofillFields = @"@"fields"
static

Definition at line 73 of file FlutterTextInputPlugin.mm.

Referenced by AutofillTypeOf().

◆ kAutocorrectionType

NSString* const kAutocorrectionType = @"@"autocorrect"
static

Definition at line 81 of file FlutterTextInputPlugin.mm.

◆ kAutofillEditingValue

NSString* const kAutofillEditingValue = @"@"editingValue"
static

Definition at line 78 of file FlutterTextInputPlugin.mm.

◆ kAutofillHints

NSString* const kAutofillHints = @"@"hints"
static

Definition at line 79 of file FlutterTextInputPlugin.mm.

Referenced by AutofillTypeOf(), and IsFieldPasswordRelated().

◆ kAutofillId

NSString* const kAutofillId = @"@"uniqueIdentifier"
static

Definition at line 77 of file FlutterTextInputPlugin.mm.

Referenced by AutofillIdFromDictionary().

◆ kAutofillProperties

NSString* const kAutofillProperties = @"@"autofill"
static

◆ kClearClientMethod

NSString* const kClearClientMethod = @"@"TextInput.clearClient"
static

Definition at line 45 of file FlutterTextInputPlugin.mm.

◆ kDeprecatedSetSelectionRectsMethod

NSString* const kDeprecatedSetSelectionRectsMethod = @"@"TextInput.setSelectionRects"
static

Definition at line 53 of file FlutterTextInputPlugin.mm.

◆ kEnableDeltaModel

NSString* const kEnableDeltaModel = @"@"enableDeltaModel"
static

Definition at line 67 of file FlutterTextInputPlugin.mm.

◆ kEnableInteractiveSelection

NSString* const kEnableInteractiveSelection = @"@"enableInteractiveSelection"
static

Definition at line 68 of file FlutterTextInputPlugin.mm.

◆ kFinishAutofillContextMethod

NSString* const kFinishAutofillContextMethod = @"@"TextInput.finishAutofillContext"
static

Definition at line 49 of file FlutterTextInputPlugin.mm.

◆ kHideMethod

NSString* const kHideMethod = @"@"TextInput.hide"
static

Definition at line 41 of file FlutterTextInputPlugin.mm.

◆ kInputAction

NSString* const kInputAction = @"@"inputAction"
static

Definition at line 66 of file FlutterTextInputPlugin.mm.

◆ kInvalidFirstRect

const CGRect kInvalidFirstRect = {{-1, -1}, {9999, 9999}}

Definition at line 36 of file FlutterTextInputPlugin.mm.

◆ kKeyboardAnimationDelaySeconds

const NSTimeInterval kKeyboardAnimationDelaySeconds = 0.1
static

Definition at line 27 of file FlutterTextInputPlugin.mm.

◆ kKeyboardAnimationTimeToCompleteion

const NSTimeInterval kKeyboardAnimationTimeToCompleteion = 0.3
static

Definition at line 30 of file FlutterTextInputPlugin.mm.

◆ kKeyboardAppearance

NSString* const kKeyboardAppearance = @"@"keyboardAppearance"
static

Definition at line 65 of file FlutterTextInputPlugin.mm.

◆ kKeyboardType

NSString* const kKeyboardType = @"@"inputType"
static

Definition at line 64 of file FlutterTextInputPlugin.mm.

◆ kOnInteractiveKeyboardPointerMoveMethod

NSString* const kOnInteractiveKeyboardPointerMoveMethod
static
Initial value:
=
@"@"TextInput.onPointerMoveForInteractiveKeyboard"

Definition at line 57 of file FlutterTextInputPlugin.mm.

◆ kOnInteractiveKeyboardPointerUpMethod

NSString* const kOnInteractiveKeyboardPointerUpMethod
static
Initial value:
=
@"@"TextInput.onPointerUpForInteractiveKeyboard"

Definition at line 59 of file FlutterTextInputPlugin.mm.

◆ kSecureTextEntry

NSString* const kSecureTextEntry = @"@"obscureText"
static

Definition at line 63 of file FlutterTextInputPlugin.mm.

Referenced by AutofillIdFromDictionary(), and IsFieldPasswordRelated().

◆ kSetClientMethod

NSString* const kSetClientMethod = @"@"TextInput.setClient"
static

Definition at line 42 of file FlutterTextInputPlugin.mm.

◆ kSetEditableSizeAndTransformMethod

NSString* const kSetEditableSizeAndTransformMethod
static
Initial value:
=
@"@"TextInput.setEditableSizeAndTransform"

Definition at line 46 of file FlutterTextInputPlugin.mm.

◆ kSetEditingStateMethod

NSString* const kSetEditingStateMethod = @"@"TextInput.setEditingState"
static

Definition at line 44 of file FlutterTextInputPlugin.mm.

◆ kSetMarkedTextRectMethod

NSString* const kSetMarkedTextRectMethod = @"@"TextInput.setMarkedTextRect"
static

Definition at line 48 of file FlutterTextInputPlugin.mm.

◆ kSetPlatformViewClientMethod

NSString* const kSetPlatformViewClientMethod = @"@"TextInput.setPlatformViewClient"
static

Definition at line 43 of file FlutterTextInputPlugin.mm.

◆ kSetSelectionRectsMethod

NSString* const kSetSelectionRectsMethod = @"@"Scribble.setSelectionRects"
static

Definition at line 54 of file FlutterTextInputPlugin.mm.

◆ kShowMethod

NSString* const kShowMethod = @"@"TextInput.show"
static

Definition at line 40 of file FlutterTextInputPlugin.mm.

◆ kSmartDashesType

NSString* const kSmartDashesType = @"@"smartDashesType"
static

Definition at line 70 of file FlutterTextInputPlugin.mm.

◆ kSmartQuotesType

NSString* const kSmartQuotesType = @"@"smartQuotesType"
static

Definition at line 71 of file FlutterTextInputPlugin.mm.

◆ kStartLiveTextInputMethod

NSString* const kStartLiveTextInputMethod = @"@"TextInput.startLiveTextInput"
static

Definition at line 55 of file FlutterTextInputPlugin.mm.

◆ kTextAffinityDownstream

FLUTTER_ASSERT_ARC const char kTextAffinityDownstream[] = "TextAffinity.downstream"
static

Definition at line 19 of file FlutterTextInputPlugin.mm.

◆ kTextAffinityUpstream

const char kTextAffinityUpstream[] = "TextAffinity.upstream"
static

Definition at line 20 of file FlutterTextInputPlugin.mm.

◆ kUITextInputAccessibilityEnablingDelaySeconds

constexpr double kUITextInputAccessibilityEnablingDelaySeconds = 0.5
staticconstexpr

Definition at line 23 of file FlutterTextInputPlugin.mm.

◆ kUpdateConfigMethod

NSString* const kUpdateConfigMethod = @"@"TextInput.updateConfig"
static

Definition at line 56 of file FlutterTextInputPlugin.mm.