flutter_smart_ptt 1.0.8
flutter_smart_ptt: ^1.0.8 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);
//example:en、es
_flutterSmartPttPlugin.setLanguage("en");
//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;
});
});
}
dynamic 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) {
case "GetTranslation":
String key=methodCall.arguments;
logger.i("method callback:GetTranslation:key: $key");
if(key=="Speaking"){
return "is currently speaking,release to end.";
}
break;
case "PlayText":
String text=methodCall.arguments[0];
bool interrupt=methodCall.arguments[1];
logger.i("method callback:PlayText:text: $text");
logger.i("method callback:PlayText:interrupt: $interrupt");
return false;
}
}
@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'),
),
],
),
],
),
),
)
),
),
);
}
}