FireOS上的flutter文本字段 firetv火棒在文本字段的顶部。

问题描述 投票:0回答:1

当在fire tv设备的fireOS中调用flutter上的textfield时,以做搜索为例,fireOS的虚拟键盘弹出在textfield的顶部,而不像在其他android设备上那样工作,键盘在底部,textfield是可见的。

例如在android legacy上,我可以使用edittext widget,同样的键盘弹出在顶部,但是无论我用控制器输入什么,都会在虚拟键盘上更新,因为键盘有自己的textfield或edittext。所以我的问题是,我怎么能用flutter更新firetv虚拟键盘上的edittext。

enter image description here

flutter android-edittext textfield amazon-fire-tv
1个回答
0
投票

好吧,所以我没有找到答案的任何地方,所以我不得不做一些hacky的东西heres我如何得到它的工作,因为flutter是一个没有去。

解决方案概述:

1.-所以首先检查你是否运行在Android上,你可以用if (Platform.isAndroid)对flutter进行检查。

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

3.-检查制造商或设备名称为 "Amazon "或 "Kindle "或任何if(string.contains(""))将做的伎俩。

4.-再打开一个平台通道到Native Android,然后打开一个带有Edittext的Alert Dialog,捕捉结果的字符串并返回给flutter。

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

    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;
}

在原生安卓系统上,这是代码:

                    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()

                }
© www.soinside.com 2019 - 2024. All rights reserved.