wipter_sdk 1.8.1
wipter_sdk: ^1.8.1 copied to clipboard
A Flutter plugin for the Wipter SDK
example/lib/main.dart
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:wipter_sdk/wipter_sdk.dart';
import 'dart:io';
import 'package:permission_handler/permission_handler.dart';
import 'package:wipter_sdk/wipter_sdk_model.dart';
import 'package:wipter_sdk/wipter_sdk_state.dart';
import 'package:wipter_sdk/wipter_sdk_transfer_rate.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primarySwatch: Colors.blue),
home: const MainScreen(),
);
}
}
class MainScreen extends StatefulWidget {
const MainScreen({super.key});
@override
State<MainScreen> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
SDKState _sdkState = SDKState.uninitialized;
SDKTransferRate _sdkTransferRate = SDKTransferRate(upstreamRate: 0.0, downstreamRate: 0.0);
String? _deviceId = "Not available";
String? _sessionId = "Not available";
@override
void initState() {
super.initState();
_initializeSDK();
_requestNotificationPermission();
}
Future<void> _initializeSDK() async {
WipterSDK.stateStream.listen((SDKState state) async {
setState(() {
_sdkState = state;
});
if (state == SDKState.running) {
// Ask SessionID when running
var sessionId = await WipterSDK.getSessionId();
setState(() {
_sessionId = sessionId;
});
}
}, onError: (error) {
// Handle error
});
WipterSDK.transferRateStream.listen((SDKTransferRate rate) async {
setState(() {
_sdkTransferRate = rate;
});
});
var clientId = "<< use your client Id >>";
var clientSecret = "<< use your secret >>";
WipterSDK.setupWithClientCredentials(clientId: clientId, clientSecret: clientSecret);
WipterSDK.setBackgroundNotificationProperties(
title: "Title of notification",
text: "Text of notification"
);
// Request Device ID After connection
var deviceId = await WipterSDK.getDeviceId();
setState(() {
_deviceId = deviceId;
});
final state = await WipterSDK.getState();
debugPrint("Current State of SDK is: $state");
}
Future<void> _requestNotificationPermission() async {
if (Platform.isAndroid) {
var status = await Permission.notification.status;
if (!status.isGranted) {
await Permission.notification.request();
}
}
}
Future<void> _copyToClipboard(BuildContext context, String label, String text) async {
final ScaffoldMessengerState messenger = ScaffoldMessenger.of(context);
final data = ClipboardData(text: text);
await Clipboard.setData(data);
messenger.showSnackBar(
SnackBar(content: Text('$label copied to clipboard')),
);
}
Future<void> _copyLogToClipboard(BuildContext context) async {
final ScaffoldMessengerState messenger = ScaffoldMessenger.of(context);
final logFile = File('${Directory.systemTemp.path}/m_log.txt');
String logContent = "Log file does not exist";
if (await logFile.exists()) {
logContent = await logFile.readAsString();
}
messenger.showSnackBar(
const SnackBar(content: Text('Log File copied to clipboard')),
);
await Clipboard.setData(ClipboardData(text: logContent));
}
Future<void> _startSDK(SDKServiceMode mode) async {
await WipterSDK.start(mode: mode);
}
Future<void> _stopSDK() async {
await WipterSDK.stop();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Wipter SDK Sample"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text("Device Id: $_deviceId"),
Text("Session Id: $_sessionId"),
if (_deviceId != null && _deviceId!.isNotEmpty)
ElevatedButton(
onPressed: () => _copyToClipboard(context, "DeviceID", _deviceId!),
child: const Text("Copy DeviceID to clipboard"),
),
if (_sessionId != null && _sessionId!.isNotEmpty)
ElevatedButton(
onPressed: () => _copyToClipboard(context, "SessionID", _sessionId!),
child: const Text("Copy SessionID to clipboard"),
),
const Divider(),
Text("$_sdkTransferRate"),
const Divider(),
ElevatedButton(
onPressed: () => _copyLogToClipboard(context),
child: const Text("Copy log file content to clipboard"),
),
const Divider(),
Text("SDK State: ${_sdkState.toReadableString()}"),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () => _startSDK(SDKServiceMode.foregroundOnly),
child: const Text("Start SDK (Foreground Only)"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => _startSDK(SDKServiceMode.always),
child: const Text("Start SDK (Always)"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: _stopSDK,
child: const Text("Stop SDK"),
),
],
),
),
),
);
}
}