Mat 3D

A powerful yet easy to use utility to modify Matrix4 in flutter

Getting Started

pubspec.yaml

Add mat3D to pubspec.yaml file


...
environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  mat3d:
    git: https://github.com/rey-xi/mat3d.git 
...

Or


...
environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  mat3d: ^0.0.1
...

Usage

Main Constructor

Mat3D can be created from optional Matrix4 and Rect.

Example:
main() {
    final matrix4 = Matrix4.identity();
    final rect = Offset.zero & const Size.square(100);
    final mat3D = Mat3D(rect: rect, matrix: matrix4);
    print(mat3D); // Mat3D[...](0, 0, 100, 100)
}

Raw Constructor

Mat3D can be created to tweak a Matrix4 value using a given rect.

Example:
main() {
  final matrix4 = Matrix4.identity();
  final rect = Offset.zero & const Size.square(100);
  final mat3D = Mat3D.raw(rect: rect, matrix: matrix4);

  /// changes to [mat3D] reflects on [matrix4]
  print(mat3D); // Mat3D[...](0, 0, 100, 100)
}

Parse Constructor

Mat3D can be composed from a string source: result calling .toString() on a Mat3D object.

Example:
main() {
  final matrix4 = Matrix4.identity();
  final rect = Offset.zero & const Size.square(100);
  final mat3D = Mat3D(rect: rect, matrix: matrix4);
  print(mat3D);  // Mat3D[0, 1.0, 1.0...](0, 0, 100, 100)
  final mat3D2 = Mat3D.parse('$mat3D');
  print(mat3D2);  // Mat3D[0, 1.0, 1.0...](0, 0, 100, 100)
}

Copy Constructor

Mat3D can be duplicated as redirection to another Mat3D object

Example:
main() {
  final matrix4 = Matrix4.identity();
  final rect = Offset.zero & const Size.square(100);
  final mat3D = Mat3D.raw(rect: rect, matrix: matrix4);
  print(mat3D); // Mat3D[0, 1.0, 1.0...](0, 0, 100, 100)
  final mat3D2 = Mat3D.from(mat3D);

  /// changes to [mat3D2] reflects on [mat3D]
  print(mat3D2); // Mat3D[0, 1.0, 1.0...](0, 0, 100, 100)
}

Working Example

import 'package:flutter/material.dart';
import 'package:mat3d/mat3d.dart';


class Mat3DExample extends StatelessWidget {
  const Mat3DExample({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Transform(
              transform: Mat3D().scale(1.5).forward(24).matrix,
              child: const Text("Transformed"),
            ),
          ],
        ),
      ),
    );
  }
}

Thanks

Libraries

mat3d