Ich versuche, eine Dart-Einzelseitenanwendung zu erstellen.
Ich habe ein erstes benutzerdefiniertes Element ( custom-application
) erstellt, das die gesamte Anwendung enthält. Es enthält einen Container, mit dem Ansichten gerendert werden. Und ein Seitennavigationssystem, das Benutzerinformationen enthält und aktualisiert wird, wenn sich der Benutzer anmeldet.
Ich möchte Informationen zwischen Ansichten teilen. Wie kann ich eine globale Variable definieren custom-application
und mit anderen Ansichten teilen?
Wenn Sie beispielsweise die App starten, werden Sie nicht authentifiziert. Wenn Sie / login ( login-view
) aufrufen, erhalten Sie ein Anmeldeformular. Ich möchte, dass das custom-application
Element beim Anmelden in der Anwendung die von der verschachtelten Ansicht geladenen Benutzerinformationen speichert login-view
und das Seitennavigationsprogramm aktualisiert.
Ist es möglich das zu tun?
quelle
library my_prj.globals
man inglobals.dart
datei?Sie können eine Klasse erstellen
myColors.dart
class AppColors { static var primary = Colors.blue; }
Und importiere deine Klasse
import 'package:myapp/.../myColors.dart';
Und Zugriff mit
AppColors.primary
quelle
++++ Update Juli 2019 ++++
Ich habe ein Paket geschrieben, das die Flutter Global Config integriert.
EZ Flutter ist eine Sammlung von Widgets, Paketen und vielen weiteren nützlichen Dingen, die in einem kleinen Rahmen zusammengefasst sind. Ziel ist es, Standardfunktionen von Grund auf neu verfügbar zu machen. EZ Flutter unterstützt die Verwaltung verschiedener Konfigurationsdateien, auf die innerhalb der App zugegriffen werden kann.
Github: https://github.com/Ephenodrom/EZ-Flutter
dependencies: ez_flutter: ^0.2.0
Lesen Sie in der Dokumentation nach, wie die Verwendung verschiedener Konfigurationen funktioniert.
https://github.com/Ephenodrom/EZ-Flutter/blob/master/documentation/APPLICATION_SETTINGS.md
++++ Alte Antwort ++++
Ich hatte das gleiche Problem mit globalen Variablen. Daher brauchte ich auch eine andere Konfiguration für jede App-Version (dev / prod) und ich möchte die Konfiguration nicht in die Datei main_dev.dart oder in die Datei main_prod.dart schreiben.
Ich habe ein einfaches Flatterpaket geschrieben, das sich mit getrennten Konfigurationsdateien befasst und diese beim Start der App lädt. Die Konfiguration ist dann in jeder Codezeile Ihrer App verfügbar.
https://github.com/Ephenodrom/Flutter-Global-Config
Wie man es benutzt:
Erstellen Sie eine JSON-Datei unter Assets / cfg / $ file.json
Fügen Sie Assets / cfg zu Ihrer pubspec.yaml hinzu
Laden verschiedener Konfigurationsdateien beim Start der App:
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 { ... }
Verwenden der Konfiguration in Ihrer App:
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")); } }
quelle
Basierend auf der Bibliotheksidee hier eine Möglichkeit, einer Karte, die von anderen Widgets aufgerufen wird, "verschlüsselte" globale Variablen eines beliebigen Typs hinzuzufügen. Auf diese Weise müssen Sie solche Variablen nicht vorher deklarieren. Wenn eine Variable nicht vorhanden ist, wird sie von appDataSet zur Karte hinzugefügt. So können Sie in einem Widget wie einem Kontrollkästchen beispielsweise in der Funktion setState () Folgendes hinzufügen: appDataSet ('aCheckBox', Wert); Wenn aCheckBox nicht in der Map vorhanden ist, wird es hinzugefügt und der Wert mit value geladen (in diesem Fall ein Boolescher Wert).
library my_prj.globals; Map appData = Map<String,dynamic>(); void appDataSet(String key, dynamic value) { if (!appData.containsKey(key)) appData.putIfAbsent(key, () => value); else appData.update(key, (dynamic) => value); print(appData); } dynamic appDataGet(String key) { if (appData.containsKey(key)) return (appData.putIfAbsent(key, () => {})); else return (null); }
quelle
Sie müssen lediglich eine Datei wie "constatnts.dart" erstellen.
import '...materials.dart'; const Color baseColor = Color(0XFF353535);
und so verwenden
import '...constants.dart'; ....... ...... .... Container( color: baseColor, .....
),
quelle