【问题标题】:Flutter textfield on fireOS firetv/firestick on top of textfield在文本字段顶部的 fireOS firetv/firestick 上颤振文本字段
【发布时间】:2020-04-10 15:34:55
【问题描述】:

当在 fire tv 设备的 fireOS 中调用 textfield .

例如,在 android legacy 上,我可以使用 edittext 小部件,并且顶部会弹出相同的键盘,但无论我用控制器输入什么内容都会更新虚拟键盘本身,因为键盘有自己的文本字段或 edittext。所以我的问题是如何用颤振更新firetv虚拟键盘上的edittext。

【问题讨论】:

    标签: flutter android-edittext textfield amazon-fire-tv


    【解决方案1】:

    好的,所以我在任何地方都没有找到答案,所以我不得不做一些 hacky 的东西,这是我如何让它工作的,因为 Flutter 是不行的。

    解决方案概述:

    1.- 所以首先检查你是否在 Android 上运行,你可以在 Flutter 上使用 if (Platform.isAndroid) 来做到这一点。

    2.- 如果你实际上是在 android 上运行,你可以打开一个到原生 android 的平台通道来检查实际的制造商(我将在下面发布如何编码)。

    3.- 检查制造商或设备名称是否为“Amazon”或“Kindle”或任何 if(string.contains("")) 可以解决问题。

    4.- 再次打开到 Native Android 的平台通道并打开带有 Edittext 的警报对话框,捕获生成的字符串并将其返回给颤振。

    这就是我如何让 firetv 的键盘在颤动下工作。

        if (Platform.isAndroid){
    
          checkOs().then((String osName){
            print("Device running on: $osName");
            if(osName.contains("Amazon") || osName.contains("AFTN")){
              fireTvKeyboardInput().then((String result){
                buscarTitulo(result);
              });
            }else{
              _showDialog(); // Keyboard for NON FIREOS devices on Android.
            }
          });
    
        }else{
          //IF Device is not Android Eg. IOS
          _showDialog();
        }
    

    现在我使用了“checkOs”和“fireTvKeyboardInput”两个函数,代码如下:

    Future<String> checkOs() async {
      String myResult = "";
      try {
        myResult = await platform.invokeMethod("checkOS", <String, dynamic>{
          'param1': "hello",
        });
      }catch (e){
        print ("exception: $e");
      }
      return myResult;
    }
    
    Future<String> fireTvKeyboardInput() async {
      String myResult = "";
      try {
        myResult = await platform.invokeMethod("fireKeyBoard", <String, dynamic>{
          'param1': "hello",
        });
      }catch (e){
        print ("exception: $e");
      }
      return myResult;
    }
    

    在原生 Android 上,代码如下:

                        if(call.method == "checkOS"){
                        val operatingSystem = android.os.Build.MANUFACTURER + "- " + android.os.Build.MODEL
                        result.success(operatingSystem)
                    }
    
                    if(call.method == "fireKeyBoard"){
    
                            val alert = AlertDialog.Builder(this)
                            alert.setMessage("Search")
                            // Set an EditText view to get user input
                            val input = EditText(this)
                            input.hint = "Enter Text"
                            input.inputType = InputType.TYPE_CLASS_TEXT
                            alert.setView(input)
                            input.setOnKeyListener { view, keyCode, keyEvent ->
                                if (keyCode == 66) {
                                    val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                                    imm.hideSoftInputFromWindow(input.windowToken, 0)
                                }
                                false
                            }
                            alert.setPositiveButton("Ok") { dialog, whichButton ->
                                result.success(input.text.toString());
                            }
                            alert.setNegativeButton("Cancel") { dialog, whichButton ->
                                // Canceled.
                            }
                            alert.show()
    
                    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2020-04-30
      • 2020-11-24
      • 2020-06-25
      • 2021-11-24
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      相关资源
      最近更新 更多