import 'dart:io'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; class Step3 extends StatelessWidget { const Step3({Key? key}) : super(key: key); Widget buildContent(BuildContext context, SharedPreferences prefs) { return Column(children: [ const Padding( padding: EdgeInsets.symmetric(vertical: 20), child: Text('Étape 3:Authorisation de l\'application', style: TextStyle(fontSize: 20)), ), const Text( 'Pour pouvoir utiliser l\'application, il faut récupérer les clefs associées à l\'application créée juste avant.'), ]); } Future waitAuthorizationCallback() async { var server = await HttpServer.bind(InternetAddress.loopbackIPv4, 1214); var request = await server.first; var uri = Uri.dataFromString(request.requestedUri.toString()); var query = uri.queryParameters; var code = query['code']; if (code != null) { var prefs = await SharedPreferences.getInstance(); prefs.setString('code', code); } request.response ..headers.contentType = ContentType.text ..write('You can close tab now') ..close(); } @override Widget build(BuildContext context) { waitAuthorizationCallback(); return Column( children: [ Expanded( child: FutureBuilder( future: SharedPreferences.getInstance(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasData) { final prefs = snapshot.data!; return buildContent(context, prefs); } else { return const Center(child: CircularProgressIndicator()); } })), Padding( padding: const EdgeInsets.symmetric(vertical: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ TextButton( onPressed: () {}, child: const Text('Étape précédente')), TextButton(onPressed: () {}, child: const Text('Étape suivante')) ], ), ) ], ); } }