Глобальные переменные в дротике
Я пытаюсь создать одностраничное приложение Dart.
Я создал первый пользовательский элемент (custom-application
), который содержит все приложение. В нем есть контейнер, который используется для визуализации представлений. И боковой навигатор, который будет содержать информацию о пользователе и обновляться, когда пользователь входит в систему.
Я хочу поделиться информацией между мнениями. Как я могу определить глобальную переменную в custom-application
и иметь возможность поделиться ею с другими представлениями?
Например, при запуске приложения вы не аутентифицированы. При вызове/входе в систему (login-view
входа в login-view
) у вас будет форма входа в систему. Я хочу, чтобы при входе в custom-application
элемент custom-application
сохранял информацию пользователя, загруженную в виде login-view
в вложенное login-view
и обновлял боковой навигатор.
Можно ли это сделать?
Ответы
Ответ 1
Просто создайте файл библиотеки и создайте поля для глобальных таблиц, которые вам нужны. Импортируйте эту библиотеку везде, где вам нужен доступ к этим полям.
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;
Вы также можете
- создать одноэлемент в библиотеке глобалов (см. раздел " Как создать Singleton в Dart?" для получения более подробной информации).
- использовать наблюдаемый, чтобы получать уведомления об изменениях (см. Реализация шаблона Observer в Dart, Как я могу вызвать какое-то событие onChange в классе для получения более подробной информации)
Ответ 2
++++ Обновление за июль 2019 года ++++
Я написал пакет, в который интегрирована глобальная конфигурация Flutter.
EZ Flutter - это коллекция виджетов, пакетов и многих других полезных вещей, смешанных в небольшом фреймворке. Цель состоит в том, чтобы сделать стандартные функции доступными с нуля. EZ Flutter поддерживает управление различными файлами конфигурации, доступ к которым можно получить из приложения.
Github: https://github.com/Ephenodrom/EZ-Flutter
dependencies:
ez_flutter: ^0.2.0
Ознакомьтесь с документацией о том, как работают различные конфигурации.
https://github.com/Ephenodrom/EZ-Flutter/blob/master/documentation/APPLICATION_SETTINGS.md
++++ Старый ответ ++++
У меня была такая же проблема с глобальными переменными. Поэтому мне также требовались разные настройки для каждой версии приложения (dev/prod), и я не хочу записывать конфигурацию в файл main_dev.dart или main_prod.dart.
Я написал простой пакет флаттера, который имеет дело с разделением файлов конфигурации и загрузкой их при запуске приложения. Конфигурация будет доступна в каждой строке кода в вашем приложении.
https://github.com/Ephenodrom/Flutter-Global-Config
Как это использовать:
Создайте файл json в assets/cfg/$ file.json
Добавьте assets/cfg в ваш pubspec.yaml
Загрузка различных файлов конфигурации при запуске приложения:
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 {
...
}
Использование конфигурации в вашем приложении:
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"));
}
}
Ответ 3
Просто определите переменную для класса и на другой странице получите доступ к имени этой переменной.
Example: Page one define var userName = '' and on another page direct
use userName you get the page one value on page two.