Глобальные переменные во флаттере (для веб-разработчиков)

Flutter

Об использовании глобальных переменных во флаттере

Сначала определите, что такое глобальная переменная, я, вероятно, определяю ее так:Переменные не будут уничтожены, несколько файлов имеют доступ к одной и той же переменной

В вебе js имеет объект окна. Пока интерфейс не обновляется, он не будет убит, если это спа-приложение. Вы можете делать в нем все, что хотите, что легко понять.

Но в дартс такого нет, что меня огорчает.

Прошлые статьи

флаттер - Начало работы с базой данных sqlite
флаттер - чтение и запись бинарных файлов на устройство
Локальное хранилище токена flutter-login (shared_preferences), перехват маршрута

нужно

Во всем приложении есть много вещей, которые нужно выполнить только один раз, например请求,sqlite,navigatorKey

Об этом говорилось в предыдущих статьях, но инициализация не была описана прямо.

Тогда что делать, искать, найти способ

найти эликсир

нашел эти вещи

Видно, что естьInheritedWidgetэта вещь.

Другие статьи так пишут, или госуправление и тому подобное.

InheritedWidget — это продвинутый продукт, основанный на виджетах, грубо говоря, это способ коммуникации в нем, а также послойно передаваемый по сути.

На данный момент нам нужны глобальные переменные, что нам делать.

Спокойный анализ

1, он поддерживает глобальные переменные
2, он не поддерживает глобальные переменные

Если поддерживается, то найти способ, если не поддерживается, то его надо пропускать через слой данных, а летать он не может.

Вдобавок к этому есть аппаратная поддержка, напрямую написанная на локалке. Но это не может удовлетворить потребности, его можно сериализовать только локально, а затем десериализовать, и это очень хлопотно.

После прочтения вышеуказанной статьи, вероятно, есть путь к этой статье.

Но этот продукт, похоже, хранится локально, и я видел, что он использует SharedPreferences.

Разве он не полагается на это для достижения, но определение глобальных переменных отличается? ?

текст

Во флаттере несколько файлов ссылаются на один и тот же файл дротика и будут выполняться только один раз. Переменные являются общими.

(то есть ничего не делать)

проверять

Создайте новый файл дротика

Измените значение в интерфейсе A (A.dart)

Получить значение в интерфейсе B (B.dart)

Затем посмотрите на результат выполнения

Ну модифицированный. . Они используют одну и ту же переменную.

заявление

sqlite

db.dart
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

Database db;
Future<String> initDB()async{
    return new Future(() async{
        String table_book_name = 'books';
        String createSql = '''
        CREATE TABLE $table_book_name (
            id       INTEGER,
            bookname STRING,
        );
        ''';
        // 初始化
        db = await openDatabase(
            join(await getDatabasesPath(), '.db'),
            onCreate: (Database db, int version) async{
                // 新建表
                db.execute(createSql);
            },
            version: 1,
        );
    });
}

Импортируйте запись, затем выполните initDB

Другие интерфейсы вводят db.dart, а затем используют db напрямую.

разное

Благодаря этим двум друзьям из флаттер-группы

感谢这两位flutter群友