Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2022-03-01T22:52:51+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Caméra × ffmpeg × Flutter, message #2412742022-03-01T22:52:51+01:00Amaury/@Amauryhttps://zestedesavoir.com/forums/sujet/16094/camera-ffmpeg-flutter/?page=1#p241274<p>Bonjour ~o~</p>
<p>Avec <a href="/@sgble" rel="nofollow" class="ping ping-link">@<span class="ping-username">sgble</span></a> on prépare un projet de streaming Twitch pour ZdS (entre autres) mais il nous reste quelques points obscurs à préciser.</p>
<p>On aimerait développer une app d’acquisition caméra sous Android (voire aussi iOS à terme). L’idée est de traiter le flux vidéo après son acquisition sans la ré-encoder (le codec en sortie nous convient déjà, à savoir HEVC sur les modèles récents).</p>
<p>Nous voudrions créer des segments au format матрёшка (MKV) à partir de ce flux de sortie, lesquels seront envoyés sur le réseau par la suite (sans doute en HTTP/2 ou HTTP/3). On s’inspire un peu du modèle du HLS.</p>
<p>Pour cela, nous pensions utiliser ffmpeg via <a href="https://pub.dev/packages/flutter_ffmpeg">son package Flutter</a></p>
<p>Mais on est pas trop sûrs de la faisabilité technique globale. Savez-vous si c’est facile de faire ça avec Flutter ? Y a-t-il des pièges à éviter, des soucis de compatibilité ? Des bonnes pratiques à suivre ?</p>
<p>Merci d’avance !</p>Flutter : User null pendant la déconnexion, message #2404702022-01-23T00:41:01+01:00WinXaito/@WinXaitohttps://zestedesavoir.com/forums/sujet/16015/flutter-user-null-pendant-la-deconnexion/?page=1#p240470<p>Si on résume, tu as les étapes suivantes pour la déconnexion:</p>
<ul>
<li>L’utilisateur est sur <code>MainView</code>, il appui sur <code>Logout</code></li>
<li>On exécute la méthode <code>Logout</code> de <code>AuthProvider</code>.
<ul>
<li>La variable <code>_user</code> est passé à <code>null</code></li>
<li>On notifie les listeners <strong>Ici on a un premier problème, car <code>MainView</code> est reconstruit, et _user vaut null !* </strong></li>
</ul>
</li>
<li>Ensuite on remplace la vue par la vue de Login.</li>
<li>La vue est en transition</li>
</ul>
<p>* En soit, le code suivant n’est jamais réinterprêté:</p>
<div class="hljs-code-div hljs-code-text"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span></div><pre><code class="hljs language-text">MainView.routeName: (routeData) => isUserLoggedIn(context)
? MaterialPage(child: MainView())
: Redirect(LoginView.routeName),
</code></pre></div>
<p>** De plus, la page <code>MainView</code> n’est pas supprimé immédiatement, elle reste le temps de la transition.</p>
<hr>
<p>Pour résoudre le problème, je verrais bien le fait que tu passe l’objet <code>User</code> à <code>MainView</code>, sans faire usage de <code>AuthProvider</code>. Ceci empêche la mise à jour de la vue lorsque <code>User</code> est modifié. (Car oui, quand tu délogue l’utilisateur, il est modifié, il devient Null. Alors forcément la vue est reconstruire et ça coince).</p>Flutter : User null pendant la déconnexion, message #2404682022-01-22T20:47:51+01:00FougereBle/@FougereBlehttps://zestedesavoir.com/forums/sujet/16015/flutter-user-null-pendant-la-deconnexion/?page=1#p240468<p>Bonsoir ! <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>
<p>Afin de pratiquer un peu Flutter, je redéveloppe une app créée initialement avec Electron.</p>
<p>Cependant, je rencontre un problème. J’ai une API en NodeJS, qui gère l’authentification via JWT.</p>
<p>La connexion dans Flutter fonctionne bien, mais lorsque je me déconnecte, les champs du model <code>User</code> deviennent <code>null</code> juste avant que je sois redirigé sur l’écran de connexion, ce qui pose un problème.</p>
<p>Sachant que cette applications requière d’être connecté pour pouvoir l’utiliser.</p>
<p>Voici mon code actuel :</p>
<div class="hljs-code-div hljs-code-dart"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span></div><pre><code class="hljs language-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> </span>{
<span class="hljs-keyword">late</span> <span class="hljs-built_in">int</span> id;
<span class="hljs-keyword">late</span> <span class="hljs-built_in">String</span> email;
<span class="hljs-keyword">late</span> <span class="hljs-built_in">String</span> firstname;
<span class="hljs-keyword">late</span> <span class="hljs-built_in">String</span> lastname;
<span class="hljs-keyword">late</span> <span class="hljs-built_in">String</span> role;
User.fromJson(<span class="hljs-built_in">Map</span><<span class="hljs-built_in">String</span>, <span class="hljs-built_in">dynamic</span>> json) {
id = json[<span class="hljs-string">"id"</span>];
email = json[<span class="hljs-string">"email"</span>];
firstname = json[<span class="hljs-string">"firstname"</span>];
lastname = json[<span class="hljs-string">"lastname"</span>];
role = json[<span class="hljs-string">"role"</span>];
}
}
</code></pre></div>
<div class="hljs-code-div hljs-code-dart"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span><span data-count="29"></span><span data-count="30"></span><span data-count="31"></span><span data-count="32"></span><span data-count="33"></span><span data-count="34"></span><span data-count="35"></span><span data-count="36"></span><span data-count="37"></span><span data-count="38"></span><span data-count="39"></span><span data-count="40"></span><span data-count="41"></span></div><pre><code class="hljs language-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AuthProvider</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">ChangeNotifier</span> </span>{
<span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> host = <span class="hljs-string">"http://localhost:3000/api"</span>;
User? _user;
<span class="hljs-built_in">String?</span> _token;
User? <span class="hljs-keyword">get</span> currentUser {
<span class="hljs-keyword">return</span> _user;
}
Future<<span class="hljs-built_in">dynamic</span>> login(<span class="hljs-built_in">String</span> email, <span class="hljs-built_in">String</span> password) <span class="hljs-keyword">async</span> {
<span class="hljs-keyword">try</span> {
http.Response response = <span class="hljs-keyword">await</span> http.post(
<span class="hljs-built_in">Uri</span>.parse(<span class="hljs-string">"<span class="hljs-subst">$host</span>/users/login"</span>),
headers: {
<span class="hljs-string">"Content-Type"</span>: <span class="hljs-string">"application/json"</span>,
},
body: jsonEncode({
<span class="hljs-string">"email"</span>: email,
<span class="hljs-string">"password"</span>: password,
}),
);
<span class="hljs-built_in">Map</span><<span class="hljs-built_in">String</span>, <span class="hljs-built_in">dynamic</span>> body = jsonDecode(response.body);
_user = User.fromJson(body[<span class="hljs-string">"user"</span>]);
_token = body[<span class="hljs-string">"token"</span>];
notifyListeners();
} <span class="hljs-keyword">catch</span> (e) {
<span class="hljs-keyword">rethrow</span>;
}
}
<span class="hljs-keyword">void</span> logout() {
_user = <span class="hljs-keyword">null</span>;
_token = <span class="hljs-keyword">null</span>;
notifyListeners();
}
}
</code></pre></div>
<div class="hljs-code-div hljs-code-dart"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span><span data-count="29"></span><span data-count="30"></span><span data-count="31"></span><span data-count="32"></span><span data-count="33"></span></div><pre><code class="hljs language-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyApp</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
<span class="hljs-keyword">const</span> MyApp({Key? key}) : <span class="hljs-keyword">super</span>(key: key);
<span class="hljs-built_in">bool</span> isUserLoggedIn(BuildContext context) {
<span class="hljs-keyword">return</span> Provider.of<AuthProvider>(context, listen: <span class="hljs-keyword">false</span>).currentUser !=
<span class="hljs-keyword">null</span>;
}
<span class="hljs-meta">@override</span>
Widget build(BuildContext context) {
<span class="hljs-keyword">return</span> MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => AuthProvider(),
),
],
child: MaterialApp.router(
debugShowCheckedModeBanner: <span class="hljs-keyword">false</span>,
routerDelegate: RoutemasterDelegate(
routesBuilder: (context) => RouteMap(routes: {
LoginView.routeName: (routeData) =>
MaterialPage(child: LoginView()),
MainView.routeName: (routeData) => isUserLoggedIn(context)
? MaterialPage(child: MainView())
: Redirect(LoginView.routeName),
<span class="hljs-comment">// ...</span>
}),
),
routeInformationParser: RoutemasterParser(),
),
);
}
}
</code></pre></div>
<div class="hljs-code-div hljs-code-dart"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span></div><pre><code class="hljs language-dart">
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MainView</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
<span class="hljs-keyword">static</span> <span class="hljs-built_in">String</span> routeName = <span class="hljs-string">"/"</span>;
<span class="hljs-keyword">const</span> MainView({Key? key}) : <span class="hljs-keyword">super</span>(key: key);
<span class="hljs-meta">@override</span>
Widget build(BuildContext context) {
User user = Provider.of<AuthProvider>(context).currentUser!;
<span class="hljs-keyword">return</span> Layout(
child: Text(<span class="hljs-string">"<span class="hljs-subst">${user.email}</span>"</span>),
);
}
}
</code></pre></div>
<div class="hljs-code-div hljs-code-dart"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span></div><pre><code class="hljs language-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Layout</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
<span class="hljs-keyword">final</span> Widget child;
<span class="hljs-keyword">const</span> Layout({
Key? key,
<span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.child,
}) : <span class="hljs-keyword">super</span>(key: key);
<span class="hljs-meta">@override</span>
Widget build(BuildContext context) {
<span class="hljs-keyword">return</span> Scaffold(
appBar: AppBar(
title: Text(<span class="hljs-string">"MyApp"</span>),
actions: [
IconButton(
onPressed: () {
Provider.of<AuthProvider>(context, listen: <span class="hljs-keyword">false</span>).logout();
Routemaster.of(context).replace(LoginView.routeName);
},
icon: Icon(Icons.logout),
),
],
),
body: child,
);
}
}
</code></pre></div>
<p>Comme vous pouvez le voir, j’utilise le package <code>routemaster</code> pour gérer les routes, ce qui me permet d’avoir des <code>guards</code>.</p>
<p>Dans ce code-ci, au moment du clique sur le bouton de déconnexion (voir dernier code), j’ai une erreur à la ligne 9 de l’avant dernier code. Normal, puisque j’indique que <code>currentUser</code> n’est jamais null, alors qu’il le deviens à la déconnexion.</p>
<p>Si j’enlève le <code>!</code>, j’ai pas d’erreur, mais j’ai l’email qui affiche <code>null</code>, ce que je ne souhaite pas.</p>
<p>Ce que je veux, c’est que si je me déconnecte, ça déconnecte l’utilisateur, et ça le redirige sur la vue de connexion. Mais sans afficher de valeur <code>null</code> entre temps, ce qui rend pas bien, en plus de devoir checker partout si l’utilisateur est OK, alors qu’il est censé l’être tout le temps car l’utilisateur doit être connecté pour voir n’importe quelle vue.</p>
<p>J’ai aussi essayé en inversant les deux lignes qui gèrent la déconnexion et la redirection, mais rien à faire.</p>
<p>Avez-vous une idée ?</p>
<p>Merci ! <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>Quel IDE utiliser pour faire du web avec Flutter, message #2282822020-11-20T07:31:06+01:00mika83/@mika83https://zestedesavoir.com/forums/sujet/14363/quel-ide-utiliser-pour-faire-du-web-avec-flutter/?page=1#p228282<p>Bonjour <a href="/membres/voir/Helmasaur/" rel="nofollow" class="ping ping-link">@<span class="ping-username">Helmasaur</span></a>, habituellement j’utilise VIM <img src="/static/smileys/svg/heureux.svg" alt=":D" class="smiley"> . Du coup entre temps j’ai utilisé VSCode. Merci pour ta réponse.</p>Quel IDE utiliser pour faire du web avec Flutter, message #2241802020-07-17T17:12:22+02:00Helmasaur/@Helmasaurhttps://zestedesavoir.com/forums/sujet/14363/quel-ide-utiliser-pour-faire-du-web-avec-flutter/?page=1#p224180<p>Android Studio est bassé su IntelliJ IDEA <img src="/static/smileys/svg/langue.svg" alt=":P" class="smiley"> . C’est en effet orienté développement mobile.</p>
<p>Pour en revenir au sujet, si le projet est assez petit, prend n’importe quel éditeur de texte ou d’IDE pour ton projet. J’utilise en ce moment Visual Studio Code, quelque soit le projet. J’ai essayé PHPStorm (comme IntelliJ IDEA, c’est de JetBrains mais pour le PHP), mais ça demande du temps et de l’investissement pour en faire un bon usage. Je suis par ailleurs très loin d’utiliser VSCode bien comme il faut.</p>
<p>Quel éditeur utilises-tu habituellement ?</p>Quel IDE utiliser pour faire du web avec Flutter, message #2241562020-07-17T10:48:29+02:00mika83/@mika83https://zestedesavoir.com/forums/sujet/14363/quel-ide-utiliser-pour-faire-du-web-avec-flutter/?page=1#p224156<p>Merci Heziode !</p>
<p>Android Studio c’est plus orienté dev mobile, je ne sais pas ce que ça vaut pour le web. Je vais tester intellij <img src="/static/smileys/svg/clin.svg" alt=";)" class="smiley"> (ou peut être VS Code j’ai lu qu’il le conseillez aussi)</p>Quel IDE utiliser pour faire du web avec Flutter, message #2241552020-07-17T10:40:43+02:00Heziode/@Heziodehttps://zestedesavoir.com/forums/sujet/14363/quel-ide-utiliser-pour-faire-du-web-avec-flutter/?page=1#p224155<p>Hello,</p>
<p>Je n’ai fait que des petits tests de Flutter, du coup, je ne suis pas un « expert ».</p>
<p>Quand je dev avec, j’utilisais Android Studio (Intellij doit aussi faire l’affaire, je pense). Et c’est ce qui semble être <a href="https://flutter.dev/docs/development/tools/android-studio">recommandé par Flutter</a></p>Quel IDE utiliser pour faire du web avec Flutter, message #2241542020-07-17T10:29:29+02:00mika83/@mika83https://zestedesavoir.com/forums/sujet/14363/quel-ide-utiliser-pour-faire-du-web-avec-flutter/?page=1#p224154<p>Bonjour,</p>
<p>Quel IDE me conseillerais vous pour faire du web avec Flutter (langage Dart) ?</p>
<p>Merci d’avance !</p>-, message #1860942018-08-10T19:05:01+02:00arafaralahy/@arafaralahyhttps://zestedesavoir.com/forums/sujet/11129/--/?page=1#p186094<p>Merci <img src="/static/smileys/smile.png" alt=":)" class="smiley"></p>-, message #1860512018-08-10T13:25:46+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/11129/--/?page=1#p186051<p>Je ne suis pas trop K-pop mais ton appli est très soigné. <img src="/static/smileys/heureux.png" alt=":D" class="smiley"></p>-, message #1859942018-08-09T22:53:18+02:00arafaralahy/@arafaralahyhttps://zestedesavoir.com/forums/sujet/11129/--/?page=1#p185994<p>-</p>