--- title: "Flutter" slug: "flutter" updated: 2026-06-12T10:30:54Z published: 2026-06-12T10:30:54Z canonical: "docs.xtremepush.com/flutter" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.xtremepush.com/llms.txt > Use this file to discover all available pages before exploring further. # Flutter Você pode adicionar Xtremepush aos seus apps Flutter rapidamente seguindo nossa integração nativa para Android e iOS, e então adicionando um canal de método para se comunicar do seu código Dart para a respectiva plataforma. Siga nosso guia abaixo para mostrar como isso pode ser feito. Certifique-se de que seus aplicativos móveis estejam adicionados ao Xtremepush, seguindo os guias para [Android](/documentation/docs/pt-br/android-integration) e [iOS](/documentation/docs/pt-br/ios-integration). O `Xtremepush.dart` arquivo e o código de integração podem ser [baixados aqui](https://xtremepush-libs.s3.eu-west-1.amazonaws.com/Xtremepush_flutter_v1.1.0.zip). ## Adição do canal do método Adicione o `Xtremepush.dart` arquivo ao seu diretório principal de bibliotecas, ao lado do `main.dart` arquivo. ## Android Na sua MainActivity.java aula, adicione o canal do método Xtremepush adicionando o seguinte: **Java** ```java private static final String CHANNEL = "ie.imobile.xtremepush/flutter";    @Override    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {        super.configureFlutterEngine(flutterEngine);        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)                .setMethodCallHandler(                        (call, result) -> {                            // Note: this method is invoked on the main thread.                            switch (call.method) {                                case "hitEvent":                                    final String xpEvent = call.argument("xpEvent");                                    mPushConnector.hitEvent(xpEvent);                                    break;                                case "hitTag":                                    final String xpTag = call.argument("xpTag");                                    mPushConnector.hitTag(xpTag);                                    break;                                case "hitTagWithValue":                                    final String xpTagw = call.argument("xpTag");                                    final String xpTagValue = call.argument("xpTagValue");                                    mPushConnector.hitTag(xpTagw, xpTagValue);                                    break;                                case "setUser":                                    final String user_id = call.argument("xp_user_id");                                    mPushConnector.setUser(user_id);                                    break;                                case "setTempUser":                                    final String temp_user_id = call.argument("xp_temp_user_id");                                    mPushConnector.setTempUser(temp_user_id);                                    break;                                case "openInbox":                                    mPushConnector.openInbox(this);                                    break;                                case "setSubscription":                                    final boolean sub_status = call.argument("subscription_flag");                                    mPushConnector.setSubscription(sub_status);                                    break;                                case "getInboxList":                                    final int offset = call.argument("offset");                                    final int limit = call.argument("limit");                                    mPushConnector.inboxListWithOffset(this, offset, limit);                                    break;                                case "requestNotificationPermissions":                                    mPushConnector.requestNotificationPermissions(this);                                    break;                            }                        }                );    } ``` **Kotlin** ```kotlin override fun configureFlutterEngine(flutterEngine: FlutterEngine) {        super.configureFlutterEngine(flutterEngine)        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)                .setMethodCallHandler { call: MethodCall, result: MethodChannel.Result? ->                    when (call.method) {                        "hitEvent" -> {                            val xpEvent = call.argument("xpEvent")                            PushConnector.mPushConnector.hitEvent(xpEvent)                        }                        "hitTag" -> {                            val xpTag = call.argument("xpTag")                            PushConnector.mPushConnector.hitTag(xpTag)                        }                        "hitTagWithValue" -> {                            val xpTagw = call.argument("xpTag")                            val xpTagValue = call.argument("xpTagValue")                            PushConnector.mPushConnector.hitTag(xpTagw, xpTagValue)                        }                        "setUser" -> {                            val user_id = call.argument("xp_user_id")                            PushConnector.mPushConnector.setUser(user_id)                        }                        "setTempUser" -> {                            val temp_user_id = call.argument("xp_temp_user_id")                            PushConnector.mPushConnector.setTempUser(temp_user_id)                        }                        "openInbox" -> PushConnector.mPushConnector.openInbox(this)                        "setSubscription" -> {                            val sub_status = call.argument("subscription_flag")!!                            PushConnector.mPushConnector.setSubscription(sub_status)                        }                    }                }    }    companion object {        private const val CHANNEL = "ie.imobile.xtremepush/flutter"    } ``` ## iOS Na chamada do `didFinishLaunching` seu AppDelegate, adicione o canal do método como abaixo: **Swift** ```swift let controller : FlutterViewController = window?.rootViewController as! FlutterViewController    let xtremepushChannel = FlutterMethodChannel(name: "ie.imobile.xtremepush/flutter",                                              binaryMessenger: controller.binaryMessenger)    xtremepushChannel({      (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in        switch call.method {        case "hitEvent":            let xpEvent = call.arguments["xpEvent"] as! String            XPush.hitEvent(xpEvent)        case "hitTag":            let xpTag = call.arguments["xpTag"] as! String;            XPush.hitTag(xpTag)        case "hitTagWithValue":            let xpTag = call.arguments["xpTag"] as! String;            let xpTagValue = call.arguments["xpTagValue"] as! String;            XPush.hitTag(xpTag, withValue: xpTagValue)        case "setUser":            let userId = call.arguments["xp_user_id"] as! String;            XPush.setUser(userId)        case "setTempUser":            let userId = call.arguments["xp_temp_user_id"] as! String;            XPush.setTempUser(userId)        case "openInbox":            XPush.openInbox()        case "setSubscription":            let subscription_flag = (call.arguments["xp_temp_user_id"] as! NSNumber).boolValue;            XPush.setSubscription(subscription_flag)        }    }) ``` **Objective-C** ```objectivec [xtremepushChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {        if ([@"hitEvent" isEqualToString:call.method]) {            NSString *xpEvent = call.arguments[@"xpEvent"];            [XPush hitEvent: xpEvent];        }        if ([@"hitTag" isEqualToString:call.method]) {            NSString *xpTag = call.arguments[@"xpTag"];            [XPush hitTag: xpTag];        }        if ([@"hitTagWithValue" isEqualToString:call.method]) {            NSString *xpTag = call.arguments[@"xpTag"];            NSString *xpTagValue = call.arguments[@"xpTagValue"];            [XPush hitTag: xpTag withValue:xpTagValue];        }        if ([@"setUser" isEqualToString:call.method]) {            NSString *xpUser = call.arguments[@"xp_user_id"];            [XPush setUser: xpUser];        }        if ([@"setTempUser" isEqualToString:call.method]) {            NSString *xpUser = call.arguments[@"xp_temp_user_id"];            [XPush setTempUser: xpUser];        }        if ([@"openInbox" isEqualToString:call.method]) {            [XPush openInbox];        }        if ([@"setSubscription" isEqualToString:call.method]) {            BOOL subscription_flag = [call.arguments[@"subscription_flag"] boolValue];            [XPush setSubscription: subscription_flag];        }      }]; ``` ## Chamando funções Xtremepush a partir do Dart No seu arquivo Dart, importe Xtremepush do arquivo Xtremepush.dart: ```dart import 'Xtremepush.dart'; ``` Você pode então chamar as funções usando o seguinte: ```dart Xtremepush.hitEvent("string"); Xtremepush.hitTag("string"); Xtremepush.hitTagWithValue("string", "string"); Xtremepush.hitEvent("string"); Xtremepush.setUser("string"); Xtremepush.setTempUser("string"); Xtremepush.openInbox(); Xtremepush.getInboxList(offset, limit); Xtremepush.setSubscription(true/false); ``` > [!TIP] > Certifique-se de definir o ID do usuário > > Recomenda-se que, nesta fase, você use nosso método SDK para definir IDs de usuário, seguindo nosso [guia dedicado](/documentation/docs/pt-br/set-user-id) para garantir que os dispositivos possam ser associados e direcionados em suas campanhas por seu próprio identificador único.