Как сохранить и получить объект Matrix4 из библиотеки Vector_math флаттера? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть ValueNotifier, который инициализируется с Matrix4.Я могу изменить свое мнение.Теперь я хочу как-то сохранить текущее значение ValueNotifier в SQLite и снова при загрузке инициализировать мой ValueNotifier с сохраненным значением Matrix4.Ниже приведен код:

ValueNotifier<Matrix4> notifier = ValueNotifier(Matrix4.identity());

MatrixGestureDetector(
              onMatrixUpdate: (matrix, translationMatrix, scaleMatrix, rotationMatrix) {
                notifier.value = matrix;
              },
              child: AnimatedBuilder(animation: notifier,
                  builder: (context, child) {

                    return Transform(
                      transform: notifier.value,
                      child: Container(
                        width: width,
                        height: height,
                        color: Colors.yellow,

                      ),
                    );
                  }),
            )

1 Ответ

1 голос
/ 24 марта 2019

Matrix4 имеет геттер storage, который возвращает список из 16 двойников. Он также имеет именованные конструкторы (.fromList и .fromFloat64List), а также обычный конструктор (который принимает 16 отдельных двойных чисел), который создаст Matrix4 обратно из его составных частей.

В зависимости от того, как вы хотите хранить данные в SQLite, вы можете использовать их комбинацию. Если вы хотите сохранить все 16 двойных как столбцы в базе данных, используйте storage[0], storage[1], ... в качестве значений столбцов. Возможно, вы также захотите сохранить разделенную символами строку из 16 значений. Вы можете напечатать добавить все 16 значений с помощью List.join(' ') и проанализировать их обратно с помощью String.split(' ').

Наиболее эффективный способ (но наименее понятный для человека), вероятно, заключается в том, чтобы хранить его как BLOB-объект размером 128 байт. Используйте matrix.storage.buffer.asUint8List() для преобразования matrix в байты и используйте Matrix4.fromBuffer(bytes.buffer, 0) для построения матрицы из Uint8List, называемой bytes.

...