J'essaie de créer une application Dart d'une seule page.
J'ai créé un premier élément personnalisé (custom-application
) qui contient l'ensemble de l'application . Il contient un conteneur utilisé pour le rendu des vues. Et un navigateur latéral qui contiendra les informations de l'utilisateur et sera mis à jour lorsque l'utilisateur sera connecté.
Je souhaite partager des informations entre des vues. Comment puis-je définir une variable globale dans custom-application
et pouvoir la partager avec les autres vues?
Par exemple, lorsque vous démarrez l'application, vous n'êtes pas authentifié. Lorsque vous appelez/connectez-vous (login-view
), vous obtenez un formulaire de connexion. Je veux, lorsque vous vous connectez à l'application, l'élément custom-application
stocke les informations de l'utilisateur chargées par la vue imbriquée login-view
et met à jour le navigateur latéral.
Est-il possible de le faire?
Créez simplement un fichier de bibliothèque et créez des champs pour les éléments globaux dont vous avez besoin. Importez cette bibliothèque partout où vous avez besoin d'accéder à ces champs.
app.Dart
import 'globals.Dart' as globals;
main() {
globals.isLoggedIn = true;
}
composant1.Dart
import 'globals.Dart' as globals;
class MyComponent {
view() {
if(globals.isLoggedIn) {
doSomething();
else {
doSomethingElse();
}
}
}
globals.Dart
library my_prj.globals;
bool isLoggedIn = false;
Vous pouvez également
- créer un singleton dans la bibliothèque globals (voir Comment construire un singleton dans Dart? pour plus de détails).
- utilise observable pour être averti des modifications (voir Implémenter un motif Observer dans Dart , Comment puis-je déclencher une sorte d'événement onChange dans une classe pour plus de détails)
J'ai eu le même problème avec les variables globales. Par conséquent, j’avais également besoin d’une configuration différente pour chaque version de l’application (dev/prod) et je ne souhaite pas écrire la configuration dans le fichier main_dev.Dart ou dans le fichier main_prod.Dart.
J'ai écrit un paquetage simple qui traite de la séparation des fichiers de configuration et de leur chargement au démarrage de l'application. La configuration est alors disponible sur chaque ligne de code de votre application.
https://github.com/Ephenodrom/Flutter-Global-Config
Comment l'utiliser :
Créez un fichier json sous assets/cfg/$ file.json
Ajouter assets/cfg à votre pubspec.yaml
Chargement de différents fichiers de configuration au démarrage de l'application:
import 'package:flutter/material.Dart';
import 'package:global_configuration/global_configuration.Dart';
void main() async{
await GlobalConfiguration().loadFromAsset("app_settings");
await GlobalConfiguration().loadFromAsset("env_dev_settings");
runApp(MyApp());
}
class MyApp extends StatelessWidget {
...
}
Utilisation de la configuration dans votre application:
import 'package:flutter/material.Dart';
import 'package:global_configuration/global_configuration.Dart';
class CustomWidget extends StatelessWidget {
CustomWiget(){
// Access the config in the constructor
print(GlobalConfiguration().getString("key1"); // prints value1
}
@override
Widget build(BuildContext context) {
// Access the config in the build method
return new Text(GlobalConfiguration().getString("key2"));
}
}