【问题标题】:Communication between android and flutterandroid与flutter之间的通信
【发布时间】:2019-05-07 19:03:40
【问题描述】:

我是 Flutter 的新手。我想在 Android 和颤振之间进行交流。我已经使用方法通道从颤振中打开了一个 android 活动。现在从当前的 android 活动。我想点击一个按钮打开一个飞镖文件。如何在 Flutter 中实现这一点?

//这是主要的。 dart 类,我使用方法通道从中打开了一个活动。

class Communication extends StatefulWidget
{
  @override
  State<StatefulWidget> createState() {
  return MyCommunication();
}



}


class MyCommunication extends State<Communication>
{

static const platform = const MethodChannel("test_activity");
@override
Widget build(BuildContext context) {

return MaterialApp(

  home: Scaffold(
    body: Container(
      child: getNewActivity(),

    ),
  )

      /*new MaterialButton(
        child: const Text('Open Screen'),
        elevation: 5.0,
        height: 48.0,
        minWidth: 250.0,
        color: Colors.blue,
        textColor: Colors.white,
        onPressed: () {
          _getNewActivity();
        })*/

);

}

getNewActivity() async{

  try {
  await platform.invokeMethod('startNewActivity');
   } on PlatformException catch (e) {
  print(e.message);
  }

    }

 }

//这是我的主要活动

类 MainActivity(): FlutterActivity() {

private val CHANNEL = "test_activity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)



MethodChannel(flutterView, CHANNEL).setMethodCallHandler(
        object : MethodChannel.MethodCallHandler {
          override fun onMethodCall(call: MethodCall, result:        MethodChannel.Result) {
            if(call.method.equals("startNewActivity")) {
              startNewActivity()
            }
          }
        })

 }

  private fun startNewActivity() {
  val intent = Intent(this, SecondActivity::class.java)
  startActivity(intent)
  }



 }

//这是我必须打开其中包含一些小部件的 dart 文件的第二个活动。

class SecondActivity : AppCompatActivity(), View.OnClickListener {
  override fun onClick(p0: View?) {

    when(p0!!.id)
    {
        R.id.btn ->
        {
            var intent =  Intent(this, MainActivity::class.java)
            intent.setAction(Intent.ACTION_RUN)
            intent.putExtra("route","screen2");
            startActivity(intent);


           }
       }

    }

  var button:Button?=null



   override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.second_actvity)
    button=findViewById(R.id.btn);
    button!!.setOnClickListener(this)
   // setSupportActionBar(toolbar)

    // Now get the support action bar
    val actionBar = supportActionBar

    // Set toolbar title/app title
    actionBar!!.title = "Android Component"
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setDisplayShowHomeEnabled(true);

}

   override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
     }



   }

【问题讨论】:

  • flutter.io/docs/development/packages-and-plugins/…(同样的东西也可以直接用在你的应用项目中)
  • 你能把这方面的代码分享给我吗?
  • github.com/flutter/plugins 都是专门用于为 Flutter/Dart 提供各种原生功能的包。 pub.dartlang.org/flutter/packages?q=plugin 列出了来自社区的相同内容和更多内容。
  • 如文档中所述,您必须在您的 android 项目上创建频道。示例在文档中。这份官方文档做得很好,很完整
  • 我已经编辑了我的问题。现在我需要为此再创建一个方法通道。请帮助我不知道如何以编程方式进行

标签: flutter


【解决方案1】:

Android、IOS 和 Flutter 之间使用 Channel 进行通信,你可以查看下面的 Url。 https://medium.com/flutter/flutter-platform-channels-ce7f540a104e

new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
            new MethodCallHandler() {
                @Override
                public void onMethodCall(MethodCall call, Result result) {
                    // Note: this method is invoked on the main thread.
                    // TODO
                }
            });

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2013-08-28
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多