Repository: flutter
Issue: Flutter Integration tests - Text is not entered while executing scripts on iOS Device in test lab. Getting error as 'Can't find keyplane that supports type 4 for keyboard iPhone-PortraitChoco-NumberPad;'
Labels: platform-ios,framework,f: integration_test,has reproducible steps,P1,team-ios,triaged-ios,found in release: 3.27,found in release: 3.28

### Steps to reproduce

1. Create a sample app with two fields. 
2. One as TextField with keyboardType as TextInputType.number or  TextInputType.text or TextInputType.numberWithOptions()
3. Second field as Pin with as CustomPinCode field
4. Create an integration script to enter number in first text field and pin in second text field.
5. The details are not getting entered but focus gets moved from one field to other.
6. The logs show the error as '**_Can't find keyplane that supports type 4 for keyboard iPhone-PortraitChoco-NumberPad; using 27303_PortraitChoco_iPhone-Simple-Pad_Default'_**

### Expected results

The scripts should enter the number and pin to proceed further

### Actual results

The scripts are not entering details in text fields

### Code sample

```
// Define a custom Form widget.
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

class MyCustomForm extends StatefulWidget {
  const MyCustomForm({super.key});

  @override
  State<MyCustomForm> createState() => _MyCustomFormState();
}

// Define a corresponding State class.
// This class holds data related to the Form.
class _MyCustomFormState extends State<MyCustomForm> {
  // Define the focus node. To manage the lifecycle, create the FocusNode in
  // the initState method, and clean it up in the dispose method.
  late FocusNode focusNodePassword, focusNodeLogin;
  var currentindex = 0;

  void buttonClicked() {
    setState(() {
      // setstate using for the rerender the screen
      // if we not use than it not show the sceond text
      currentindex = currentindex + 1;
    });
  }

  // Create a text controller and use it to retrieve the current value
  // of the TextField.
  final myController = TextEditingController();

  @override
  void initState() {
    super.initState();

    focusNodePassword = FocusNode();
    focusNodeLogin = FocusNode();
    // Start listening to changes.
    myController.addListener(_printLatestValue);
  }

  @override
  void dispose() {
    // Clean up the focus node when the Form is disposed.
    focusNodePassword.dispose();
    focusNodeLogin.dispose();

    // Clean up the focus node when the Form is disposed.
    myController.dispose();

    // Clean up the controller when the widget is removed from the widget tree.
    // This also removes the _printLatestValue listener.
    super.dispose();
  }

  void _printLatestValue() {
    final text = myController.text;
    if (kDebugMode) {
      print('PinCode field: $text (${text.characters.length})');
    }
  }

  @override
  Widget build(BuildContext context) {
    var questions = [
      // list of text which the text get form here
      "Enter your Credentials",
      "Credentials Entered!",
    ];
    return Scaffold(
      backgroundColor: const Color.fromARGB(199, 7, 7, 7),
      appBar: AppBar(
        title: const Text('KPN App',
            style: TextStyle(
                fontSize: 40,
                fontWeight: FontWeight.bold,
                color: Colors.white)),
        backgroundColor: Colors.orangeAccent,
      ),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            TextField(
              key: const ValueKey('Subscription'),
              keyboardType: TextInputType.numberWithOptions(),
              onChanged: (text) {
                if (kDebugMode) {
                  print(
                      'Subscription number field: $text (${text.characters.length})');
                }
                if (text.characters.length == 12) {
                  focusNodePassword.requestFocus();
                }
              },
              decoration: const InputDecoration(
                  hintText: 'Subscription Number',
                  hintStyle: TextStyle(color: Colors.black, fontSize: 15),
                  prefixIcon: Icon(Icons.lock),
                  prefixIconColor: Colors.black,
                  filled: true,
                  fillColor: Colors.white,
                  focusedBorder: OutlineInputBorder()),
            ),
            Container(
              margin: const EdgeInsets.only(top: 24),
              child: TextField(
                key: const ValueKey('PinCode'),
                obscureText: true,
                onChanged: (text) {
                  if (kDebugMode) {
                    print('PinCode field: $text (${text.characters.length})');
                  }
                  if (text.characters.length == 4) {
                    focusNodeLogin.requestFocus();
                  }
                },
                keyboardType: TextInputType.numberWithOptions(),
                controller: myController,
                focusNode: focusNodePassword,
                decoration: const InputDecoration(
                    hintText: 'PinCode',
                    hintStyle: TextStyle(color: Colors.black, fontSize: 15),
                    prefixIcon: Icon(Icons.lock),
                    prefixIconColor: Colors.black,
                    filled: true,
                    fillColor: Colors.white,
                    focusedBorder: OutlineInputBorder()),
              ),
            ),
            Container(
              margin: const EdgeInsets.only(top: 24),
              child: ElevatedButton(
                key: const ValueKey('Login'),
                focusNode: focusNodeLogin,
                onPressed: () {
                  if (kDebugMode) {
                    print('Login pressed');
                  }
                  buttonClicked();
                },
                child: Text(
                  'Login',
                  style: TextStyle(
                    color: Colors.black,
                    fontSize: 18,
                  ),
                ),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(15.0),
              child: Text(
                // questions.elementAt(1),
                questions[currentindex],
                // here index and text come form the upper list
                // of question and indexing start form the 0
                style: TextStyle(color: Colors.white, fontSize: 18),
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        // When the button is pressed,
        // give focus to the text field using myFocusNode.
        onPressed: () => focusNodePassword.requestFocus(),
        tooltip: 'Focus FocusNode Field',
        child: const Icon(Icons.wb_sunny_sharp),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

```

### Screenshots or Video

<details open>
<summary>Screenshots / Video demonstration</summary>

[Upload media here]

</details>


### Logs

```
Jan  9 01:22:47 iPhone Runner(UIKitCore)[656] <Notice>: [Interface Orientation] was:Interface Unknown now:UIInterfaceOrientationPortrait reason:Using key window scene
Jan  9 01:22:47 iPhone UserEventAgent(com.apple.netsvcproxy)[29] <Notice>: File Handle Maintainer got a readable event on a file handle: Network Agent Registration socket (126) 499D9E61-7244-4625-BA7C-CFBD5A21426A 499D9E61-7244-4625-BA7C-CFBD5A21426A 0 (null) agent flags 0x1
Jan  9 01:22:47 iPhone Runner(UIKitCore)[656] <Notice>: Can't find keyplane that supports type 4 for keyboard iPhone-PortraitChoco-NumberPad; using 27303_PortraitChoco_iPhone-Simple-Pad_Default
Jan  9 01:22:47 iPhone kbd(TextInputCore)[448] <Notice>: -[TIKeyboardInputManagerLoader inputManagerForInputMode:withKeyboardState:class:]  Reusing existing input manager for input mode <TIInputMode: 0x826e0f730; identifier = en_US>
Jan  9 01:22:47 iPhone kbd(DataDeliveryServices)[448] <Notice>: assetsForQuery: <query: com.apple.MobileAsset.LinguisticData, locO: 1, iO: 1, latO: 1, cO: 1, <filter: {
    AssetLocale = "{(\134n    en\134n)}";
}>> final result: (
) was cached: 1, cachedOnly: 1
Jan  9 01:22:47 iPhone mobileassetd(libmobileassetd.dylib)[109] <Notice>: -[DownloadInfo addNewRateDataPoint:]: Download has not progressed since last update, however, download appears to be complete. Previous Total Downloaded: 0, Total Expected: 0
Jan  9 01:22:47 iPhone kbd(DataDeliveryServices)[448] <Notice>: assetsForQuery: <query: com.apple.MobileAsset.LinguisticData, locO: 1, iO: 1, latO: 1, cO: 0, <filter: {
    AssetLocale = "{(\134n    en\134n)}";
    AssetType = "{(\134n    Delta\134n)}";
}>> final result: (
) was cached: 1, cachedOnly: 0
Jan  9 01:22:47 iPhone kbd(TextInputCore)[448] <Error>: updateSupplementalLexicons  LM model is not valid yet
Jan  9 01:22:47 iPhone kbd(TextInputCore)[448] <Notice>: <private>
Jan  9 01:22:47 iPhone kbd[448] <Notice>: -[TIKeyboardInputManagerServer prepareForActivity]  Preparing keyboard for activity
Jan  9 01:22:47 iPhone suggestd(PersonalizationPortraitInternals)[189] <Notice>: PPQuickTypeServer: warmUp
Jan  9 01:22:47 iPhone suggestd(PersonalizationPortraitInternals)[189] <Notice>: PPQuickTypeServer: warmUp
Jan  9 01:22:47 iPhone kbd(DataDeliveryServices)[448] <Notice>: assetsForQuery: <query: com.apple.MobileAsset.LinguisticData, locO: 1, iO: 1, latO: 1, cO: 0, <filter: {
    AssetLocale = "{(\134n    en\134n)}";
    AssetType = "{(\134n    Delta\134n)}";
}>> final result: (
) was cached: 1, cachedOnly: 0

```
### Flutter Doctor output

<details open><summary>Doctor output</summary>

```console
[✓] Flutter (Channel stable, 3.27.0, on macOS 15.2 24C101 darwin-arm64, locale en-NL)
    • Flutter version 3.27.0 on channel stable at 
    • Upstream repository 
    • Framework revision 8495dee1fd (4 weeks ago), 2024-12-10 14:23:39 -0800
    • Engine revision 83bacfc525
    • Dart version 3.6.0
    • DevTools version 2.40.2
• No issues found!
```

</details>