dart global-variables

dart - Variables globales en dardo



singleton en dart (2)

Intento crear una aplicación Dart de una sola página.

He creado un primer elemento personalizado ( custom-application ) que contiene toda la aplicación. Tiene un contenedor en él que se usa para renderizar vistas. Y una navegación lateral que contendrá información del usuario y se actualizará cuando el usuario inicie sesión.

Quiero compartir informaciones entre vistas. ¿Cómo puedo definir una variable global en custom-application y poder compartirla con las otras vistas?

Por ejemplo, cuando inicia la aplicación, no está autenticado. Cuando llame / inicie sesión ( login-view ) tendrá un formulario de inicio de sesión. Quiero, cuando inicie sesión en la aplicación, el elemento de custom-application almacena las informaciones de usuario cargadas por la vista de login-view vista anidada y actualiza la navegación lateral.

Es posible hacer lo ?


Simplemente cree un archivo de biblioteca y cree los campos para los globales que necesita allí. Importe esta biblioteca donde quiera que necesite acceder a estos campos.

app.dart

import ''globals.dart'' as globals; main() { globals.isLoggedIn = true; }

component1.dart

import ''globals.dart'' as globals; class MyComponent { view() { if(globals.isLoggedIn) { doSomething(); else { doSomethingElse(); } } }

globals.dart

library my_prj.globals; bool isLoggedIn = false;

Tú también puedes
- cree un Singleton en la biblioteca global (consulte ¿Cómo se crea un Singleton en Dart? para obtener más detalles).
- use observable para recibir notificaciones sobre los cambios (consulte Implementar un patrón de observador en Dart , ¿Cómo puedo activar un tipo de evento onChange en una clase para obtener más detalles)?


Tuve el mismo problema con las variables globales. Por lo tanto, también necesitaba una configuración diferente para cada versión de la aplicación (dev / prod) y no quiero escribir la configuración en main_dev.dart o en el archivo main_prod.dart.

Escribí un paquete de aleteo simple que trata de tener archivos de configuración separados y los cargué al inicio de la aplicación. La configuración está disponible en cada línea de código en su aplicación.

https://github.com/Ephenodrom/Flutter-Global-Config

Cómo usarlo :

Cree un archivo json en asset / cfg / $ file.json

Agregue los activos / cfg a su pubspec.yaml

Cargando diferentes archivos de configuración al inicio de la aplicación:

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 { ... }

Usando la configuración en su aplicación:

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")); } }