showDeviceRegistration method
Future<void>
showDeviceRegistration(
)
Implementation
Future<void> showDeviceRegistration() async {
final context = navigatorKey.currentContext;
if (!_active || !_foreground || isPresentingUi || context == null) return;
_deviceDialogOpen = true;
final pairingPoll = Timer.periodic(const Duration(seconds: 5), (_) {
if (_active) unawaited(deviceRegistration.refresh());
});
_notifyUi();
try {
if (deviceRegistration.credential == null ||
deviceRegistration.status == 'expired') {
unawaited(deviceRegistration.requestCode());
} else {
unawaited(deviceRegistration.refresh());
}
final registrationRoute = MaterialPageRoute<void>(
settings: _ReporterRouteSettings(this),
builder: (_) => Scaffold(
appBar: AppBar(title: const Text('Connect this device')),
body: AnimatedBuilder(
animation: deviceRegistration,
builder: (context, _) => Padding(
padding: const EdgeInsets.all(24),
child: ListView(
children: [
Text('App: ${config.recipient}'),
const Text(
'Ask your workspace administrator to approve this app installation.',
),
const SizedBox(height: 24),
Text(
deviceRegistration.approved
? 'Device approved'
: deviceRegistration.status == 'approved'
? 'Approval check needed'
: 'Status: ${deviceRegistration.status}',
style: Theme.of(context).textTheme.titleLarge,
),
if (deviceRegistration.code != null)
SelectableText(
deviceRegistration.code!,
style: Theme.of(context).textTheme.headlineLarge,
),
if (deviceRegistration.code != null)
const Text(
'In the web console, choose this app → Devices → Connect device. Codes expire after 10 minutes.',
),
if (deviceRegistration.error != null)
Text(deviceRegistration.error!),
const SizedBox(height: 24),
FilledButton(
onPressed: () async {
await deviceRegistration.requestCode();
},
child: const Text('Refresh connection'),
),
if (deviceRegistration.approved)
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text('Done'),
),
],
),
),
),
),
);
_deviceRoute = registrationRoute;
await Navigator.of(context).push(registrationRoute);
await registrationRoute.completed;
} finally {
pairingPoll.cancel();
_deviceRoute = null;
_deviceDialogOpen = false;
_notifyUi();
}
}