qriib_meet 0.1.1
qriib_meet: ^0.1.1 copied to clipboard
Qriib Flutter room management and embedded meeting APIs.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:qriib_meet/qriib_meet.dart';
const _apiKey = String.fromEnvironment('QRIIB_API_KEY');
const _secretKey = String.fromEnvironment('QRIIB_SECRET_KEY');
const _finalLink = String.fromEnvironment('QRIIB_FINAL_LINK');
void main() => runApp(const QriibMeetExampleApp());
class QriibMeetExampleApp extends StatelessWidget {
const QriibMeetExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Qriib Meet Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF6750A4)),
useMaterial3: true,
),
home: const _JoinPage(),
);
}
}
class _JoinPage extends StatefulWidget {
const _JoinPage();
@override
State<_JoinPage> createState() => _JoinPageState();
}
class _JoinPageState extends State<_JoinPage> {
late final QriibMeetClient _client = QriibMeetClient.withProjectCredentials(
apiKey: _apiKey,
secretKey: _secretKey,
enableNetworkLogging: false,
);
bool _joining = false;
bool get _isConfigured =>
_apiKey.isNotEmpty && _secretKey.isNotEmpty && _finalLink.isNotEmpty;
Future<void> _join() async {
if (!_isConfigured || _joining) return;
setState(() => _joining = true);
try {
await _client.meetings.join(context: context, finalLink: _finalLink);
} on QriibMeetException {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Unable to join the Qriib meeting.')),
);
}
} finally {
if (mounted) setState(() => _joining = false);
}
}
@override
void dispose() {
_client.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Qriib Meet')),
body: Center(
child: Padding(
padding: const EdgeInsets.all(24),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
_isConfigured
? 'Ready to join with the public qriib_meet API.'
: 'Provide QRIIB_API_KEY, QRIIB_SECRET_KEY, and a fresh '
'QRIIB_FINAL_LINK with secure dart-defines.',
textAlign: TextAlign.center,
),
const SizedBox(height: 24),
FilledButton.icon(
onPressed: _isConfigured && !_joining ? _join : null,
icon: _joining
? const SizedBox.square(
dimension: 18,
child: CircularProgressIndicator(strokeWidth: 2),
)
: const Icon(Icons.video_call_outlined),
label: const Text('Join meeting'),
),
],
),
),
),
);
}
}