fletwork 0.92.71
fletwork: ^0.92.71 copied to clipboard
Allows applications to easily communicate with `Antano Server` instances by handling connection logic.
example/lib/main.dart
import 'dart:async';
import 'dart:developer' show log;
import 'package:fletwork/fletwork.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
/// Your client instance
late AntanoClient client;
/// Your AntanoEvent listeners
StreamSubscription? logInListener;
StreamSubscription? logOutListener;
StreamSubscription? messageListener;
StreamSubscription? callListener;
/// Members for login behaviour example
bool loggedIn = false;
TextEditingController usernameController = TextEditingController();
TextEditingController passwordController = TextEditingController();
@override
void initState() {
super.initState();
/// Register the event listeners you need
logInListener = AntanoEvent().eventBus.on<OnClientLoggedIn>().listen((e) {
log("Client logged in");
setState(() => loggedIn = true);
});
logOutListener = AntanoEvent().eventBus.on<OnClientLoggedOut>().listen((e) {
log("Client logged out");
setState(() => loggedIn = false);
});
messageListener =
AntanoEvent().eventBus.on<OnMessageReceived>().listen((e) {
log("Client received a message: ${e.message}");
});
callListener = AntanoEvent().eventBus.on<OnCallAccepted>().listen((e) {
log("User accepted a call: ${e.call}");
});
/// Set up the client
client = AntanoClient(
server: "my_server_url",
appID: "my_app_id",
appSecret: "my_app_secret");
/// Initialize the client, handling any errors
client.initClient().onError(handleAntanoError);
}
@override
void dispose() {
/// Make sure to cancel your listeners
logInListener?.cancel();
logOutListener?.cancel();
messageListener?.cancel();
callListener?.cancel();
super.dispose();
}
/// Example error handler
///
/// The AntanoClient may throw errors it expects the target application
/// to handle. Not implementing appropriate error handling can therefore
/// lead to crashes or other unexpected behaviour within your application.
void handleAntanoError(error, stackTrace) =>
log("AntanoClient error: ${error.toString()}");
/// Example widget shown when not logged in
Widget loginPage() {
return Center(
child: Column(
children: [
/// Username input
TextFormField(
controller: usernameController,
decoration: const InputDecoration(
labelText: 'Username',
icon: Icon(Icons.person),
)),
/// Password input
TextFormField(
controller: passwordController,
obscureText: true,
decoration: const InputDecoration(
labelText: 'Password',
icon: Icon(Icons.password),
)),
/// Button to start AntanoClient login
ElevatedButton(
onPressed: () => client
.logIn(usernameController.text, passwordController.text)
.onError(handleAntanoError),
child: const Text("Login"),
)
],
));
}
/// Example widget shown when logged in
Widget userPage() {
return Center(
child: Column(children: [
/// Get the logged in user's information
Text("Welcome, ${client.currentUser.userName}."),
/// Button to start AntanoClient logout
ElevatedButton(onPressed: client.logOut, child: Text("Logout"))
]));
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Fletwork example app'),
),
body: loggedIn ? userPage() : loginPage(),
));
}
}