How to add a Flutter Plugin without publishing to Pub (Android)

I was looking for a way to quickly create Flutter Plugin. I can’t seem to find the exact same plugin on pub.dartlang or any solution about embedding the plugin directly into your Flutter App.

The plugin that I want to implement is the Facebook App Events plugin. Since I needed this plugin for the Android platform only. I wasn’t about to publish a half complete Plugin into

Step 1: Create the Dart files in /lib

import 'dart:async';

import 'package:flutter/services.dart';
import 'package:meta/meta.dart';

class FacebookAppEvents {
factory FacebookAppEvents() => _instance;

FacebookAppEvents.private(MethodChannel platformChannel) : _channel = platformChannel;

final MethodChannel _channel;

static final FacebookAppEvents _instance = FacebookAppEvents.private(const MethodChannel('facebook_app_events'));

Future<void> logEvent({@required String name, Map<String, dynamic> parameters}) async {
await _channel.invokeMethod('logEvent', <String, dynamic>{
'name': name,
'parameters': parameters,

Future<void> setUserId(String id) async {
await _channel.invokeMethod('setUserId', id);

Future<void> clearUserData() async {
await _channel.invokeMethod('clearUserData');

Step 2: Create the Java Plugin in /android/app/src/

package app.munch.facebookappevents;

import android.os.Bundle;
import com.facebook.appevents.AppEventsLogger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;

import java.util.Map;

public class FacebookAppEventsPlugin implements MethodCallHandler {

private final AppEventsLogger logger;

public FacebookAppEventsPlugin(Registrar registrar) {
this.logger = AppEventsLogger.newLogger(registrar.activity());

public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "facebook_app_events");
channel.setMethodCallHandler(new FacebookAppEventsPlugin(registrar));

public void onMethodCall(MethodCall call, Result result) {
switch (call.method) {
case "logEvent":
handleLogEvent(call, result);

private void handleLogEvent(MethodCall call, Result result) {
Map<String, Object> arguments = (Map<String, Object>) call.arguments;
final String eventName = (String) arguments.get("name");

@SuppressWarnings("unchecked") final Bundle parameterBundle =
createBundleFromMap((Map<String, Object>) arguments.get("parameters"));
logger.logEvent(eventName, parameterBundle);

Step 3: Register in

package app.munch.munchapp;

import android.os.Bundle;
import app.munch.facebookappevents.FacebookAppEventsPlugin;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
protected void onCreate(Bundle savedInstanceState) {

Step 4: Run your App

If you're interested in the implementing FacebookAppEvents for Android. Here is the gist:

I am a full-stack capable Web, Android, iOS, DevOps, software engineer and architecture.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store