flutter_rustore_push 6.0.1 copy "flutter_rustore_push: ^6.0.1" to clipboard
flutter_rustore_push: ^6.0.1 copied to clipboard

Flutter RuStore Push SDK.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_rustore_push/flutter_rustore_push.dart';
import 'package:flutter_rustore_push/pigeons/rustore_push.dart';
import 'package:http/http.dart' as http;
import 'package:permission_handler/permission_handler.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<String> stack = [];
  String token = "";

  @override
  void initState() {
    super.initState();

    initPush();
  }

  void initPush() {
    RustorePushClient.attachCallbacks(onNewToken: (value) {
      final item = "on new token success: ${value}";

      print(item);

      setState(() {
        stack.add(item);
        token = value;
      });
    }, onMessageReceived: (value) {
      final item =
          "on message received success: id=${value.messageId}, data=${value.data}, notification.body: ${value.notification?.body}";

      print(item);

      setState(() {
        stack.add(item);
      });
    }, onDeletedMessages: () {
      print("on delete message");
    }, onError: (value) {
      final item = "on error: ${value}";

      print(item);

      setState(() {
        stack.add(item);
      });
    });

    RustorePushClient.getToken().then((value) {
      final item = "get token success: ${value}";

      print(item);

      setState(() {
        stack.add(item);
        token = value;
      });
    });

    RustorePushClient.subscribeToTopic("topicName").then((value) {
      //Proccess success
    }, onError: (err) {
      //Process error
    });

    RustorePushClient.available().then((value) {
      final item = "available success: ${value}";

      print(item);

      setState(() {
        stack.add(item);
      });
    }, onError: (err) {
      final item = "available error: ${err}";

      print(item);

      setState(() {
        stack.add(item);
      });
    });
  }

  var project = "your_project_id_from_rustore_console";
  var serviceToken =
      "CubILkB-PWdxO8vWrFQ3WKjPKqSWQoeDMStTdU-T5PIOYKyMAt-0w3EWE2tjNOD7";

  void send(String deviceToken) async {
    if (await Permission.notification.isGranted) {
      final body = """{
   "message":{
      "token": "$deviceToken",
      "notification":{
        "body":"This is an rustore notification!",
        "title":"Message",
        "image":"https://image-hosting.org/284239234.jpeg"
      }
   }
}""";

      print(body);

      http
          .post(
        Uri.parse(
            'https://vkpns.rustore.ru/v1/projects/${project}/messages:send'),
        headers: {
          'Authorization': 'Bearer $serviceToken',
        },
        body: body,
      )
          .then((resp) {
        print(resp.statusCode);
        print(resp.body);
        print(resp);
      });
    } else {
      Permission.notification.request();
    }
  }

  void subscribe

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('RuStore PushSDK Example'),
        ),
        body: SingleChildScrollView(
          child: Padding(
            padding: EdgeInsets.symmetric(horizontal: 24),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                ElevatedButton(
                  onPressed: () {
                    RustorePushClient.getToken().then((value) {
                      final item = "get token success: ${value}";

                      print(item);

                      setState(() {
                        stack.add(item);
                        token = value;
                      });
                    }, onError: (err) {
                      final item = "get token error: ${err}";

                      print(item);

                      setState(() {
                        stack.add(item);
                      });
                    });
                  },
                  child: const Text("Get token"),
                ),
                ElevatedButton(
                  onPressed: () {
                    RustorePushClient.deleteToken().then((value) {
                      final item = "delete token success";

                      print(item);

                      setState(() {
                        stack.add(item);
                        token = "";
                      });
                    }, onError: (err) {
                      final item = "delete token error: ${err}";

                      print(item);

                      setState(() {
                        stack.add(item);
                      });
                    });
                  },
                  child: const Text("Delete token"),
                ),
                Text("token: ${token}"),
                ElevatedButton(
                  onPressed: () {
                    send(token);
                  },
                  child: const Text("Send"),
                ),
                SizedBox(height: 8),
                for (final item in stack) ...[
                  Text(item),
                  SizedBox(height: 4),
                ],
              ],
            ),
          ),
        ),
      ),
    );
  }
}