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/common/InternalFlutterSwiftCommon/InternalFlutterSwiftCommon.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"
 
static NSString *const kEnableInlinePrediction = @"@"enableInlinePrediction"
 
const char * _selectionAffinity
 
FlutterTextRange_selectedTextRange
 
UIInputViewController * _inputViewController
 
CGRect _cachedFirstRect
 
FlutterScribbleInteractionStatus _scribbleInteractionStatus
 
BOOL _hasPlaceholder
 
bool _isSystemKeyboardEnabled
 
bool _isFloatingCursorActive
 
CGPoint _floatingCursorOffset
 
bool _enableInteractiveSelection
 
BOOL _pendingInputViewRemoval
 
BOOL _pendingAutofillRemoval
 

Function Documentation

◆ AutofillIdFromDictionary()

static NSString* AutofillIdFromDictionary ( NSDictionary *  dictionary)
static

Definition at line 332 of file FlutterTextInputPlugin.mm.

332  {
333  NSDictionary* autofill = dictionary[kAutofillProperties];
334  if (autofill) {
335  return autofill[kAutofillId];
336  }
337 
338  // When autofill is nil, the field may still need an autofill id
339  // if the field is for password.
340  return [dictionary[kSecureTextEntry] boolValue] ? @"password" : nil;
341 }
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 427 of file FlutterTextInputPlugin.mm.

427  {
428  for (NSDictionary* field in configuration[kAssociatedAutofillFields]) {
429  if (IsFieldPasswordRelated(field)) {
430  return kFlutterAutofillTypePassword;
431  }
432  }
433 
434  if (IsFieldPasswordRelated(configuration)) {
435  return kFlutterAutofillTypePassword;
436  }
437 
438  NSDictionary* autofill = configuration[kAutofillProperties];
439  UITextContentType contentType = ToUITextContentType(autofill[kAutofillHints]);
440  return !autofill || [contentType isEqualToString:@""] ? kFlutterAutofillTypeNone
441  : kFlutterAutofillTypeRegular;
442 }
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 444 of file FlutterTextInputPlugin.mm.

444  {
445  return fabsf(x - y) <= delta;
446 }

Referenced by FlutterTextPosition::initWithIndex:affinity:.

◆ IsEmoji()

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

Definition at line 88 of file FlutterTextInputPlugin.mm.

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

◆ IsFieldPasswordRelated()

static BOOL IsFieldPasswordRelated ( NSDictionary *  configuration)
static

Definition at line 401 of file FlutterTextInputPlugin.mm.

401  {
402  // Autofill is explicitly disabled if the id isn't present.
403  if (!AutofillIdFromDictionary(configuration)) {
404  return NO;
405  }
406 
407  BOOL isSecureTextEntry = [configuration[kSecureTextEntry] boolValue];
408  if (isSecureTextEntry) {
409  return YES;
410  }
411 
412  NSDictionary* autofill = configuration[kAutofillProperties];
413  UITextContentType contentType = ToUITextContentType(autofill[kAutofillHints]);
414 
415  if ([contentType isEqualToString:UITextContentTypePassword] ||
416  [contentType isEqualToString:UITextContentTypeUsername]) {
417  return YES;
418  }
419 
420  if ([contentType isEqualToString:UITextContentTypeNewPassword]) {
421  return YES;
422  }
423 
424  return NO;
425 }
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 470 of file FlutterTextInputPlugin.mm.

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

◆ NS_ENUM()

typedef NS_ENUM ( NSInteger  ,
FlutterAutofillType   
)

Definition at line 392 of file FlutterTextInputPlugin.mm.

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

◆ ShouldShowSystemKeyboard()

static BOOL ShouldShowSystemKeyboard ( NSDictionary *  type)
static

Definition at line 104 of file FlutterTextInputPlugin.mm.

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

◆ ToUIKeyboardType()

static UIKeyboardType ToUIKeyboardType ( NSDictionary *  type)
static

Definition at line 108 of file FlutterTextInputPlugin.mm.

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

◆ ToUIReturnKeyType()

static UIReturnKeyType ToUIReturnKeyType ( NSString *  inputType)
static

Definition at line 167 of file FlutterTextInputPlugin.mm.

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

◆ ToUITextAutoCapitalizationType()

static UITextAutocapitalizationType ToUITextAutoCapitalizationType ( NSDictionary *  type)
static

Definition at line 155 of file FlutterTextInputPlugin.mm.

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

◆ ToUITextContentType()

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

Definition at line 220 of file FlutterTextInputPlugin.mm.

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

Referenced by AutofillTypeOf(), and IsFieldPasswordRelated().

Variable Documentation

◆ _cachedFirstRect

CGRect _cachedFirstRect

Definition at line 818 of file FlutterTextInputPlugin.mm.

◆ _enableInteractiveSelection

bool _enableInteractiveSelection

Definition at line 827 of file FlutterTextInputPlugin.mm.

◆ _floatingCursorOffset

CGPoint _floatingCursorOffset

Definition at line 826 of file FlutterTextInputPlugin.mm.

◆ _hasPlaceholder

BOOL _hasPlaceholder

Definition at line 820 of file FlutterTextInputPlugin.mm.

◆ _inputViewController

UIInputViewController* _inputViewController

Definition at line 817 of file FlutterTextInputPlugin.mm.

◆ _isFloatingCursorActive

bool _isFloatingCursorActive

Definition at line 825 of file FlutterTextInputPlugin.mm.

◆ _isSystemKeyboardEnabled

bool _isSystemKeyboardEnabled

Definition at line 824 of file FlutterTextInputPlugin.mm.

◆ _pendingAutofillRemoval

BOOL _pendingAutofillRemoval

Definition at line 2546 of file FlutterTextInputPlugin.mm.

◆ _pendingInputViewRemoval

BOOL _pendingInputViewRemoval
Initial value:
{
NSTimer* _enableFlutterTextInputViewAccessibilityTimer

Definition at line 2545 of file FlutterTextInputPlugin.mm.

◆ _scribbleInteractionStatus

FlutterScribbleInteractionStatus _scribbleInteractionStatus

Definition at line 819 of file FlutterTextInputPlugin.mm.

◆ _selectedTextRange

FlutterTextRange* _selectedTextRange

Definition at line 816 of file FlutterTextInputPlugin.mm.

◆ _selectionAffinity

const char* _selectionAffinity
Initial value:
{
int _textInputClient

Definition at line 815 of file FlutterTextInputPlugin.mm.

◆ kAssociatedAutofillFields

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

Definition at line 74 of file FlutterTextInputPlugin.mm.

Referenced by AutofillTypeOf().

◆ kAutocorrectionType

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

Definition at line 82 of file FlutterTextInputPlugin.mm.

◆ kAutofillEditingValue

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

Definition at line 79 of file FlutterTextInputPlugin.mm.

◆ kAutofillHints

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

Definition at line 80 of file FlutterTextInputPlugin.mm.

Referenced by AutofillTypeOf(), and IsFieldPasswordRelated().

◆ kAutofillId

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

Definition at line 78 of file FlutterTextInputPlugin.mm.

Referenced by AutofillIdFromDictionary().

◆ kAutofillProperties

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

◆ kClearClientMethod

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

Definition at line 46 of file FlutterTextInputPlugin.mm.

◆ kDeprecatedSetSelectionRectsMethod

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

Definition at line 54 of file FlutterTextInputPlugin.mm.

◆ kEnableDeltaModel

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

Definition at line 68 of file FlutterTextInputPlugin.mm.

◆ kEnableInlinePrediction

NSString* const kEnableInlinePrediction = @"@"enableInlinePrediction"
static

Definition at line 83 of file FlutterTextInputPlugin.mm.

◆ kEnableInteractiveSelection

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

Definition at line 69 of file FlutterTextInputPlugin.mm.

◆ kFinishAutofillContextMethod

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

Definition at line 50 of file FlutterTextInputPlugin.mm.

◆ kHideMethod

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

Definition at line 42 of file FlutterTextInputPlugin.mm.

◆ kInputAction

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

Definition at line 67 of file FlutterTextInputPlugin.mm.

◆ kInvalidFirstRect

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

Definition at line 37 of file FlutterTextInputPlugin.mm.

◆ kKeyboardAnimationDelaySeconds

const NSTimeInterval kKeyboardAnimationDelaySeconds = 0.1
static

Definition at line 28 of file FlutterTextInputPlugin.mm.

◆ kKeyboardAnimationTimeToCompleteion

const NSTimeInterval kKeyboardAnimationTimeToCompleteion = 0.3
static

Definition at line 31 of file FlutterTextInputPlugin.mm.

◆ kKeyboardAppearance

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

Definition at line 66 of file FlutterTextInputPlugin.mm.

◆ kKeyboardType

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

Definition at line 65 of file FlutterTextInputPlugin.mm.

◆ kOnInteractiveKeyboardPointerMoveMethod

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

Definition at line 58 of file FlutterTextInputPlugin.mm.

◆ kOnInteractiveKeyboardPointerUpMethod

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

Definition at line 60 of file FlutterTextInputPlugin.mm.

◆ kSecureTextEntry

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

Definition at line 64 of file FlutterTextInputPlugin.mm.

Referenced by AutofillIdFromDictionary(), and IsFieldPasswordRelated().

◆ kSetClientMethod

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

Definition at line 43 of file FlutterTextInputPlugin.mm.

◆ kSetEditableSizeAndTransformMethod

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

Definition at line 47 of file FlutterTextInputPlugin.mm.

◆ kSetEditingStateMethod

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

Definition at line 45 of file FlutterTextInputPlugin.mm.

◆ kSetMarkedTextRectMethod

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

Definition at line 49 of file FlutterTextInputPlugin.mm.

◆ kSetPlatformViewClientMethod

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

Definition at line 44 of file FlutterTextInputPlugin.mm.

◆ kSetSelectionRectsMethod

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

Definition at line 55 of file FlutterTextInputPlugin.mm.

◆ kShowMethod

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

Definition at line 41 of file FlutterTextInputPlugin.mm.

◆ kSmartDashesType

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

Definition at line 71 of file FlutterTextInputPlugin.mm.

◆ kSmartQuotesType

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

Definition at line 72 of file FlutterTextInputPlugin.mm.

◆ kStartLiveTextInputMethod

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

Definition at line 56 of file FlutterTextInputPlugin.mm.

◆ kTextAffinityDownstream

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

Definition at line 20 of file FlutterTextInputPlugin.mm.

◆ kTextAffinityUpstream

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

Definition at line 21 of file FlutterTextInputPlugin.mm.

◆ kUITextInputAccessibilityEnablingDelaySeconds

constexpr double kUITextInputAccessibilityEnablingDelaySeconds = 0.5
staticconstexpr

Definition at line 24 of file FlutterTextInputPlugin.mm.

◆ kUpdateConfigMethod

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

Definition at line 57 of file FlutterTextInputPlugin.mm.