flutter_smart_ptt 1.0.1 copy "flutter_smart_ptt: ^1.0.1" to clipboard
flutter_smart_ptt: ^1.0.1 copied to clipboard

smart-ptt

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:flutter/services.dart';
import 'package:flutter_smart_ptt/flutter_smart_ptt.dart';
import 'package:flutter_smart_ptt/notifier/poc_change_notifier.dart';
import 'package:flutter_smart_ptt/notifier/setting_change_notifier.dart';
import 'package:logger/logger.dart';

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

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

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

class _MyAppState extends State<MyApp> {

  var logger = Logger();
  
  late FlutterSmartPtt _flutterSmartPttPlugin;

  String account = "";
  String userName = "";
  String status = "";
  String groupName = "";
  String loginMsg = "";
  String monitorGroupIds = "";
  List<dynamic> groupData = [];
  String location = "";

  //setting
  bool enable8KCoding=false;
  bool enablePTT=true;
  bool enableToast=true;
  bool enableVoiceBroadCast=true;
  bool enableBeep=true;
  bool enableLog=true;

  final TextEditingController _accountController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();
  final TextEditingController _urlController = TextEditingController();
  final TextEditingController _groupIdController = TextEditingController();
  final TextEditingController _userIdController = TextEditingController();
  final TextEditingController _msgController = TextEditingController();
  final TextEditingController _msgUserIdController = TextEditingController();
  final TextEditingController _msgGroupIdController = TextEditingController();

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

    _flutterSmartPttPlugin=FlutterSmartPtt();

    // flutter_smart_ptt method callback
    _flutterSmartPttPlugin.smartPttMethodCall(handleMethodCall);

    //Monitor data changes
    dataState();

    //Test Data
    String defaultAccount = "flutteruser1";
    String defaultPassword = "111111";
    String defaultUrl = "http://en%d.realptt.com:29999/1/";
    int groupId=135738;
    int userId=655565;
    _groupIdController.text=groupId.toString();
    _userIdController.text=userId.toString();
    _msgGroupIdController.text=groupId.toString();
    _msgUserIdController.text=userId.toString();

    _accountController.value = TextEditingValue(
        text: defaultAccount,
        selection: TextSelection.fromPosition(TextPosition(
                affinity: TextAffinity.downstream,
                offset: defaultAccount.length))
    );
    _passwordController.value = TextEditingValue(
        text: defaultPassword,
        selection: TextSelection.fromPosition(TextPosition(
                affinity: TextAffinity.downstream,
                offset: defaultPassword.length))
    );
    _urlController.value = TextEditingValue(
        text: defaultUrl,
        selection: TextSelection.fromPosition(TextPosition(
                affinity: TextAffinity.downstream,
                offset: defaultUrl.length))
    );
  }

  void dataState () {
    //Monitor intercom data
    PocChangeNotifier pocChangeNotifier = _flutterSmartPttPlugin.getPocChangeNotifier();
    pocChangeNotifier.addListener(() {
      logger.i("pocChangeNotifier:change");
      setState(() {
        account = pocChangeNotifier.account;
        userName = pocChangeNotifier.name;
        var statusText = ["Offline", "Logging in", "Online", "Logging out"];
        status = statusText[pocChangeNotifier.status];
        groupName = pocChangeNotifier.activeGroupName;
        location=pocChangeNotifier.location;

        //isOnline
        bool isOnline=pocChangeNotifier.isOnline;

        //loginMsg
        if(isOnline){
          loginMsg="";
        }else {
          int code = pocChangeNotifier.offlineCode;
          if (code == 0 || code == 2 || code == 3 || code == 4
              || code == 5 || code == 6) {
            // will auto login again
            loginMsg = "logining";
          } else if (code == 7) {
            loginMsg = "The account is paused!";
          } else if (code > 0) {
            loginMsg = "Unknown error!";
            if (code == 1) {
              loginMsg = "The account or password is incorrect!";
            } else if (code == 58) {
              loginMsg = "Account suspended!";
            } else if (code == 14) {
              loginMsg = "Log in to the account on another device!";
            } else if (code == 15) {
              loginMsg = "The account has been deleted!";
            }
          }
        }

        //monitored group id
        monitorGroupIds=pocChangeNotifier.monitoredGroupIds.toString();

        //Group and User Data
        groupData = pocChangeNotifier.groups;
      });
    });

    //Monitor setting data
    SettingChangeNotifier settingChangeNotifier = _flutterSmartPttPlugin.getSettingChangeNotifier();
    settingChangeNotifier.addListener(() {
      logger.i("settingChangeNotifier:change");
      setState(() {
        //setting data
        enable8KCoding=settingChangeNotifier.enable8KCoding;
        enablePTT=settingChangeNotifier.enablePTT;
        enableToast=settingChangeNotifier.enableToast;
        enableVoiceBroadCast=settingChangeNotifier.enableVoiceBroadCast;
        enableBeep=settingChangeNotifier.enableBeep;
        enableLog=settingChangeNotifier.enableLog;
      });
    });
  }

  void handleMethodCall (MethodCall methodCall) {
    String method = methodCall.method;
    dynamic arguments = methodCall.arguments;
    //UpdateGroup|UpdateUserList is not logger.ied because the data is too long and affects reading.
    if (method != "UpdateGroup" && method != "UpdateUserList") {
      logger.i("method callback:name: $method");
      logger.i("method callback:arguments:$arguments");
    }

    switch (method) {
      // todo
    }
  }

  @override
  Widget build(BuildContext context) {
    const TextStyle textStyle = TextStyle(fontSize: 18);
    final ButtonStyle buttonStyle = ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));

    return SmartPttWidget(
      child: MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: const Text('FlutterSmartPtt Demo'),
            ),
            body: GestureDetector(
              onTap: () {
                FocusScopeNode currentFocus = FocusScope.of(context);
                // 点击空白处隐藏键盘
                if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
                  FocusManager.instance.primaryFocus?.unfocus();
                }
              },
              child: SingleChildScrollView(
                padding: const EdgeInsets.all(10.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text("Account: $account", style: textStyle),
                    Text("Name: $userName", style: textStyle),
                    Text("Status: $status", style: textStyle),
                    Text("Group: $groupName", style: textStyle),
                    Text("Login msg: $loginMsg", style: textStyle),
                    Text("Monitored group id: $monitorGroupIds", style: textStyle),
                    Text("Location: $location", style: textStyle),
                    const SizedBox(height: 20),
                    Row(
                      children: [
                        const Text("url: ", style: textStyle),
                        SizedBox(
                          width: 250,
                          child:
                          TextField(
                            controller: _urlController,
                            decoration: const InputDecoration(
                              hintText: 'url',
                            ),
                          ),
                        ),
                      ],
                    ),
                    Row(
                      children: [
                        const Text("account: ", style: textStyle),
                        SizedBox(
                          width: 120,
                          child:
                          TextField(
                            controller: _accountController,
                            decoration: const InputDecoration(
                              hintText: 'account',
                            ),
                          ),
                        ),
                      ],
                    ),
                    Row(
                      children: [
                        const Text("password: ", style: textStyle),
                        SizedBox(
                          width: 120,
                          child:
                          TextField(
                            controller: _passwordController,
                            decoration: const InputDecoration(
                              hintText: 'password',
                            ),
                          ),
                        ),
                      ],
                    ),
                    Wrap(
                      spacing: 10,
                      children: [
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            String url = _urlController.text;
                            String account = _accountController.text;
                            String password = _passwordController.text;
                            logger.i("Login: account: $account password: $password url: $url");
                            if (url.isNotEmpty && account.isNotEmpty && password.isNotEmpty) {
                              _flutterSmartPttPlugin.setUrl(url);
                              _flutterSmartPttPlugin.login(account, password);
                            }
                          },
                          child: const Text('Login'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.logout();
                          },
                          child: const Text('Logout'),
                        ),
                        GestureDetector(
                          child: ElevatedButton(
                            style: buttonStyle,
                            onPressed: () {},
                            child: const Text('PTT(long press)'),
                          ),
                          onTapDown: (e) {
                            logger.i("ptt start");
                            _flutterSmartPttPlugin.startPTT();
                          },
                          onTapUp: (e) {
                            logger.i("ptt end");
                            _flutterSmartPttPlugin.endPTT();
                          },
                          onTapCancel: () {
                            logger.i("ptt end");
                            _flutterSmartPttPlugin.endPTT();
                          },
                        ),
                        // ElevatedButton(
                        //   style: buttonStyle,
                        //   onPressed: () {},
                        //   child: const Text('Broadcast'),
                        // ),
                        // ElevatedButton(
                        //   style: buttonStyle,
                        //   onPressed: () {},
                        //   child: const Text('Group Broadcast'),
                        // ),
                      ],
                    ),
                    const SizedBox(height: 30),
                    const Text("Group Operation", style: textStyle),
                    Wrap(
                      spacing: 10,
                      children: [
                        SizedBox(
                          width: 160,
                          child:
                          TextField(
                            controller: _groupIdController,
                            keyboardType: TextInputType.number,
                            decoration: const InputDecoration(
                              hintText: 'group id',
                            ),
                          ),
                        ),
                      ],
                    ),
                    Wrap(
                      spacing: 10,
                      children: [
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            int groupId = int.parse(_groupIdController.text);
                            _flutterSmartPttPlugin.enterGroup(groupId);
                          },
                          child: const Text('Enter Group'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.leaveGroup();
                          },
                          child: const Text('Exit Group'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enterNextGroup();
                          },
                          child: const Text('Next Group'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enterPreGroup();
                          },
                          child: const Text('Previous Group'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            int groupId = int.parse(_groupIdController.text);
                            _flutterSmartPttPlugin.addMonitorGroup(groupId);
                          },
                          child: const Text('Monitor Group'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            int groupId = int.parse(_groupIdController.text);
                            _flutterSmartPttPlugin.removeMonitorGroup(groupId);
                          },
                          child: const Text('Cancel Monitor'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.sos();
                          },
                          child: const Text('SOS'),
                        ),
                      ],
                    ),
                    const SizedBox(height: 30),
                    const Text("User Operation", style: textStyle),
                    Wrap(
                      spacing: 10,
                      children: [
                        SizedBox(
                          width: 160,
                          child:
                          TextField(
                            controller: _userIdController,
                            keyboardType: TextInputType.number,
                            decoration: const InputDecoration(
                              hintText: 'user id',
                            ),
                          ),
                        ),
                      ],
                    ),
                    Wrap(
                      spacing: 10,
                      children: [
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            List<int> userIdList = [];
                            userIdList.add(int.parse(_userIdController.text));
                            _flutterSmartPttPlugin.inviteTmpGroup(userIdList);
                          },
                          child: const Text('Create Temporary Group'),
                        ),
                        // ElevatedButton(
                        //   style: buttonStyle,
                        //   onPressed: () {},
                        //   child: const Text('Single PTT'),
                        // ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            List<int> userIdList = [];
                            userIdList.add(int.parse(_userIdController.text));
                            _flutterSmartPttPlugin.pullUsersToGroup(userIdList);
                          },
                          child: const Text('Force To Join'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            List<int> userIdList = [];
                            userIdList.add(int.parse(_userIdController.text));
                            _flutterSmartPttPlugin.disJoinUser(userIdList);
                          },
                          child: const Text('Force User Out Group'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            List<int> userIdList = [];
                            userIdList.add(int.parse(_userIdController.text));
                            _flutterSmartPttPlugin.forceUserExit(userIdList);
                          },
                          child: const Text('Force Exit'),
                        ),
                      ],
                    ),
                    const SizedBox(height: 30),
                    const Text("Message", style: textStyle),
                    Wrap(
                      spacing: 10,
                      children: [
                        SizedBox(
                          width: 260,
                          child:
                          TextField(
                            controller: _msgController,
                            keyboardType: TextInputType.text,
                            decoration: const InputDecoration(
                              hintText: 'message',
                            ),
                          ),
                        ),
                        const SizedBox(height: 10),
                        Row(
                          children: [
                            SizedBox(
                              width: 160,
                              child:
                              TextField(
                                controller: _msgGroupIdController,
                                keyboardType: TextInputType.text,
                                decoration: const InputDecoration(
                                  hintText: 'group id',
                                ),
                              ),
                            ),
                            const SizedBox(width: 10),
                            ElevatedButton(
                              style: buttonStyle,
                              onPressed: () {
                                _flutterSmartPttPlugin.sendGroupMsg(int.parse(_msgGroupIdController.text), _msgController.text);
                              },
                              child: const Text('send to group'),
                            ),
                          ],
                        ),
                        const SizedBox(height: 10),
                        Row(
                          children: [
                            SizedBox(
                              width: 160,
                              child:
                              TextField(
                                controller: _msgUserIdController,
                                keyboardType: TextInputType.text,
                                decoration: const InputDecoration(
                                  hintText: 'user id',
                                ),
                              ),
                            ),
                            const SizedBox(width: 10),
                            ElevatedButton(
                              style: buttonStyle,
                              onPressed: () {
                                _flutterSmartPttPlugin.sendUserMsg(int.parse(_msgUserIdController.text), _msgController.text);
                              },
                              child: const Text('send to user'),
                            ),
                          ],
                        ),
                      ],
                    ),
                    const SizedBox(height: 30),
                    const Text("Settings", style: textStyle),
                    Text("Enable PTT:$enablePTT", style: textStyle),
                    Text("Enable 8KCoding:$enable8KCoding", style: textStyle),
                    Text("Enable toast:$enableToast", style: textStyle),
                    Text("Enable voice broadcasting:$enableVoiceBroadCast", style: textStyle),
                    Text("Enable beep:$enableBeep", style: textStyle),
                    Text("Enable log:$enableLog", style: textStyle),
                    const SizedBox(height: 20),
                    Wrap(
                      spacing: 10,
                      children: [
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enablePTT(true);
                          },
                          child: const Text('Enable ptt'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enablePTT(false);
                          },
                          child: const Text('Disable ptt'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enable8KCoding(false);
                          },
                          child: const Text('4K Coding'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enable8KCoding(true);
                          },
                          child: const Text('8K Coding'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enableToast(true);
                          },
                          child: const Text('Enable toast'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enableToast(false);
                          },
                          child: const Text('Disable toast'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enableVoiceBroadCast(true);
                          },
                          child: const Text('Enable voice broadcasting'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enableVoiceBroadCast(false);
                          },
                          child: const Text('Disable voice broadcasting'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enableBeep(true);
                          },
                          child: const Text('Enable beep'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enableBeep(false);
                          },
                          child: const Text('Disable beep'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enableLog(true);
                          },
                          child: const Text('Enable log'),
                        ),
                        ElevatedButton(
                          style: buttonStyle,
                          onPressed: () {
                            _flutterSmartPttPlugin.enableLog(false);
                          },
                          child: const Text('Disable log'),
                        ),
                      ],
                    ),
                  ],
                ),
              ),
            )
        ),
      ),
    );
  }
}