flutter和安卓通信(2)
import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() { runApp(PlatformView()); } class PlatformView extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Platform View', theme: ThemeData( primarySwatch: Colors.grey, ), home: const MyHomePage(title: 'Platform View'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { static const MethodChannel _methodChannel = MethodChannel('samples.flutter.io/platform_view'); int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } Future<void> _launchPlatformCount() async { final int platformCounter = await _methodChannel.invokeMethod('switchView', _counter); setState(() { _counter = platformCounter; }); } @override Widget build(BuildContext context) => Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Expanded( child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'Button tapped $_counter time${ _counter == 1 ? '' : 's' }.', style: const TextStyle(fontSize: 17.0), ), Padding( padding: const EdgeInsets.all(18.0), child: RaisedButton( child: Platform.isIOS ? const Text('Continue in iOS view') : const Text('Continue in Android view'), onPressed: _launchPlatformCount), ), ], ), ), ), Container( padding: const EdgeInsets.only(bottom: 15.0, left: 5.0), child: Row( children: <Widget>[ Image.asset('assets/flutter-mark-square-64.png', scale: 1.5), const Text( 'Flutter', style: TextStyle(fontSize: 30.0), ), ], ), ), ], ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: const Icon(Icons.add), ), ); }
import android.content.Intent; import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugins.GeneratedPluginRegistrant; public class MainActivity extends FlutterActivity { private static final String CHANNEL = "samples.flutter.io/platform_view"; private static final String METHOD_SWITCH_VIEW = "switchView"; private static final int COUNT_REQUEST = 1; private MethodChannel.Result result; @Override public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { new MethodChannel(flutterEngine.getDartExecutor(), CHANNEL).setMethodCallHandler( new MethodChannel.MethodCallHandler() { @Override public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { MainActivity.this.result = result; int count = methodCall.arguments(); if (methodCall.method.equals(METHOD_SWITCH_VIEW)) { onLaunchFullScreen(count); } else { result.notImplemented(); } } } ); } private void onLaunchFullScreen(int count) { Intent fullScreenIntent = new Intent(this, CountActivity.class); fullScreenIntent.putExtra(CountActivity.EXTRA_COUNTER, count); startActivityForResult(fullScreenIntent, COUNT_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == COUNT_REQUEST) { if (resultCode == RESULT_OK) { result.success(data.getIntExtra(CountActivity.EXTRA_COUNTER, 0)); } else { result.error("ACTIVITY_FAILURE", "Failed while launching activity", null); } } } }