Pablo C. García
Pablo C. García

Reputation: 22394

Send data from native to flutter

Im extending the native implementation of FirebaseMessagingService to wait for push notifications in native android.

I need to start my flutter app when the user clicks the push notification, so.. How can I send data to my flutter app?

Upvotes: 8

Views: 8036

Answers (3)

ram rakesh
ram rakesh

Reputation: 1

flutter

Map<String,dynamic> data = <String,dynamic>{};
final res = await methodChannel.invokeMethod('getDistance');
  data = Map<String,dynamic>.from(res);
   final dis = data['distance'] as String;
   final tim = data['time'] as String;

ios native

 switch call.method {

    case "getDistance":
    let data = 
     ["distance":routeFormattedDistance,"time":routeFormattedTravelTime]
     result(data)
    default :
     result("")
}

Upvotes: -1

Techalgoware
Techalgoware

Reputation: 620

In Flutter


void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScreenPage(),
    );
  }
}
class ScreenPage extends StatefulWidget {
  @override
  _ScreenPageState createState() => _ScreenPageState();
}

class _ScreenPageState extends State<ScreenPage> {
  
  static const platform = const MethodChannel("myChannel");

  @override
  void initState() {
    platform.setMethodCallHandler(nativeMethodCallHandler);
    super.initState();
  }

  Future<dynamic> nativeMethodCallHandler(MethodCall methodCall) async {
    print('Native call!');
    switch (methodCall.method) {
      case "methodNameItz" :
        return "This data from flutter.....";
        break;
      default:
        return "Nothing";
        break;
    }
  }



  
  
  
  @override
  Widget build(BuildContext context) {

    //return ();
  }
 
}

In Java


import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodChannel;
//import io.flutter.view.FlutterNativeView;


public class MyJavaFile extends FlutterActivity {

    Button clickMeButton;
    MethodChannel channel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        channel = new MethodChannel(getFlutterView(), "myChannel");

        setContentView(R.layout.home_activity);
        clickMeButton = findViewById(R.id.clickMeButton);
        
        clickMeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            
                channel.invokeMethod("methodNameItz", null, new MethodChannel.Result() {
                    @Override
                    public void success(Object o) {
                        Log.d("Results", o.toString());
                    }
                    @Override
                    public void error(String s, String s1, Object o) {
                    }
                    @Override
                    public void notImplemented() {
                    }

                });

            }
        });



    }


}

Upvotes: 2

Herbert Poul
Herbert Poul

Reputation: 4883

You can still basically look at the firebase messaging example (or the same for android)

  1. Create a Platform Channel in your AppDelegate (or MainActivity on android) and the register for the same channel on the dart/flutter side (maybe main.dart and register a method like onPushClicked)
  2. Listen for your parse messages in your native code
  3. Send them to your dart code using the platform channel (as seen in the above linked example) channel.invokeMethod('onPushClicked', myMessageArguments)

Upvotes: 0

Related Questions