diff --git a/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java b/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java index d5e952d7c2025da4aaa6a7542b323fde01ab7582..0d8f05e3a94a4a3ac4c39ed32b6661a63aee3fd3 100644 --- a/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java +++ b/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java @@ -77,13 +77,20 @@ public class TextInputPlugin implements MethodCallHandler { } } - private static int inputTypeFromTextInputType(String inputType, - boolean obscureText, - boolean autocorrect) { + private static int inputTypeFromTextInputType( + JSONObject type, boolean obscureText, boolean autocorrect) throws JSONException { + + String inputType = type.getString("name"); if (inputType.equals("TextInputType.datetime")) return InputType.TYPE_CLASS_DATETIME; - if (inputType.equals("TextInputType.number")) - return InputType.TYPE_CLASS_NUMBER; + if (inputType.equals("TextInputType.number")) { + int textType = InputType.TYPE_CLASS_NUMBER; + if (type.optBoolean("signed")) + textType |= InputType.TYPE_NUMBER_FLAG_SIGNED; + if (type.optBoolean("decimal")) + textType |= InputType.TYPE_NUMBER_FLAG_DECIMAL; + return textType; + } if (inputType.equals("TextInputType.phone")) return InputType.TYPE_CLASS_PHONE; @@ -119,7 +126,7 @@ public class TextInputPlugin implements MethodCallHandler { return null; outAttrs.inputType = inputTypeFromTextInputType( - mConfiguration.getString("inputType"), + mConfiguration.getJSONObject("inputType"), mConfiguration.optBoolean("obscureText"), mConfiguration.optBoolean("autocorrect", true)); outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN; diff --git a/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.mm b/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.mm index d7431ea7d91ec2090aed2b4bdb1374f4c8e0e051..2a9f6b62ec1883488652cdb91ccc0f8fb3827a9b 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.mm @@ -9,13 +9,17 @@ static const char _kTextAffinityDownstream[] = "TextAffinity.downstream"; static const char _kTextAffinityUpstream[] = "TextAffinity.upstream"; -static UIKeyboardType ToUIKeyboardType(NSString* inputType) { +static UIKeyboardType ToUIKeyboardType(NSDictionary* type) { + NSString* inputType = type[@"name"]; if ([inputType isEqualToString:@"TextInputType.text"]) return UIKeyboardTypeDefault; if ([inputType isEqualToString:@"TextInputType.multiline"]) return UIKeyboardTypeDefault; - if ([inputType isEqualToString:@"TextInputType.number"]) + if ([inputType isEqualToString:@"TextInputType.number"]) { + if ([type[@"signed"] boolValue]) + return UIKeyboardTypeNumbersAndPunctuation; return UIKeyboardTypeDecimalPad; + } if ([inputType isEqualToString:@"TextInputType.phone"]) return UIKeyboardTypePhonePad; if ([inputType isEqualToString:@"TextInputType.emailAddress"]) @@ -606,9 +610,10 @@ static UITextAutocapitalizationType ToUITextAutocapitalizationType(NSString* inp } - (void)setTextInputClient:(int)client withConfiguration:(NSDictionary*)configuration { - _view.keyboardType = ToUIKeyboardType(configuration[@"inputType"]); - _view.returnKeyType = ToUIReturnKeyType(configuration[@"inputType"]); - _view.autocapitalizationType = ToUITextAutocapitalizationType(configuration[@"inputType"]); + NSDictionary* inputType = configuration[@"inputType"]; + _view.keyboardType = ToUIKeyboardType(inputType); + _view.returnKeyType = ToUIReturnKeyType(inputType[@"name"]); + _view.autocapitalizationType = ToUITextAutocapitalizationType(inputType[@"name"]); _view.secureTextEntry = [configuration[@"obscureText"] boolValue]; NSString* autocorrect = configuration[@"autocorrect"]; _view.autocorrectionType = autocorrect && ![autocorrect boolValue]