matrix4_transform 1.1.7 copy "matrix4_transform: ^1.1.7" to clipboard
matrix4_transform: ^1.1.7 copied to clipboard

outdated

Helper math class for easily creating Matrix4 transformations, that you can use in Container's transform parameter and elsewhere.

example/lib/main.dart

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

// Developed by Marcelo Glasberg (Aug 2019).
// For more info, see: https://pub.flutter-io.cn/packages/matrix4_transform

void main() async => runApp(MaterialApp(home: Demo()));

class Demo extends StatelessWidget {
  final boxes = [
    Box(null, "Original"),
    Box(Matrix4Transform().translate(x: 25).matrix4, ".translate(x: 25)"),
    Box(Matrix4Transform().rotateDegrees(20).matrix4, ".rotateDegrees(20)"),
    Box(Matrix4Transform().rotateDegrees(45).matrix4, ".rotateDegrees(45)"),
    Box(Matrix4Transform().rotateDegrees(20, origin: Offset(25, 25)).matrix4,
        ".rotateDegrees(20, origin: Offset(25, 25))"),
    Box(Matrix4Transform().rotateDegrees(45, origin: Offset(25, 25)).matrix4,
        ".rotateDegrees(45, origin: Offset(25, 25))"),
    Box(Matrix4Transform().rotateDegrees(45, origin: Offset(25, 25)).translate(x: 25).matrix4,
        ".rotateDegrees(45, origin: Offset(25, 25)).\ntranslate(x: 25)"),
    Box(Matrix4Transform().scaleBy(x: 2.0, y: 0.5).matrix4, ".scaleBy(x: 2.0, y: 0.5)"),
    Box(Matrix4Transform().scaleBy(x: 2.0, y: 0.5, origin: Offset(25, 25)).matrix4,
        ".scaleBy(x: 2.0, y: 0.5, origin: Offset(25, 25))"),
    Box(Matrix4Transform().scaleBy(x: 2, y: 0.5, origin: Offset(25, 25)).right(25).matrix4,
        ".scaleBy(x: 2, y: 0.5, origin: Offset(25, 25))\n.right(25)"),
    Box(
        Matrix4Transform()
            .scaleBy(x: 2, y: 0.5, origin: Offset(25, 25))
            .translateOriginalCoordinates(x: 25)
            .matrix4,
        ".scaleBy(x: 2, y: 0.5, origin: Offset(25, 25))\n.translateOriginalCoordinates(x: 25)"),
    //
    Box(Matrix4Transform().flipHorizontally().matrix4, ".flipHorizontally()"),
    Box(Matrix4Transform().flipHorizontally(origin: Offset(25, 25)).matrix4,
        ".flipHorizontally(origin: Offset(25, 25))"),
    Box(Matrix4Transform().flipVertically().matrix4, ".flipVertically()"),
    Box(Matrix4Transform().flipVertically(origin: Offset(25, 25)).matrix4,
        ".flipVertically(origin: Offset(25, 25))"),
    Box(Matrix4Transform().flipDiagonally().matrix4, ".flipDiagonally())"),
    Box(Matrix4Transform().flipDiagonally(origin: Offset(25, 25)).matrix4,
        ".flipDiagonally(origin: Offset(25, 25))"),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Matrix4Transform Example')),
      body: Stack(
        children: <Widget>[
          SingleChildScrollView(
            child: Container(
              color: Colors.grey[400],
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  for (var box in boxes) wrap(box),
                ],
              ),
            ),
          ),
          Center(
            child: Container(
              width: 50,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Container(width: 1.5, height: double.infinity, color: Colors.black),
                  Container(width: 0.75, height: double.infinity, color: Colors.black26),
                  Container(width: 1.0, height: double.infinity, color: Colors.black26),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}

Widget wrap(Box box) {
  return Column(
    children: <Widget>[
      if (box.description != null)
        Align(
          alignment: Alignment.centerLeft,
          child: Text(box.description.toString(), style: TextStyle(fontSize: 11)),
        ),
      Container(height: 1.5, width: double.infinity, color: Colors.black),
      Container(child: box, alignment: Alignment.center, height: 50, width: double.infinity),
      Container(height: 1.0, width: double.infinity, color: Colors.black26),
      SizedBox(height: 70.0),
    ],
  );
}

class Box extends StatelessWidget {
  final Matrix4 matrix;
  final String description;

  Box(
    Matrix4 matrix,
    this.description,
  ) : matrix = matrix ?? Matrix4.identity();

  @override
  Widget build(BuildContext context) {
    return Container(
      transform: matrix,
      color: Colors.red,
      width: 50,
      height: 50,
      child: Center(
        child: Stack(
          children: [
            Icon(Icons.cancel, color: Colors.yellow, size: 38),
            Icon(Icons.expand_less, color: Colors.yellow, size: 38),
            Icon(Icons.add_circle, color: Colors.yellow, size: 10),
          ],
        ),
      ),
    );
  }
}
176
likes
40
points
55.1k
downloads

Publisher

verified publisherglasberg.dev

Weekly Downloads

Helper math class for easily creating Matrix4 transformations, that you can use in Container's transform parameter and elsewhere.

Repository (GitHub)
View/report issues

License

BSD-2-Clause (license)

Dependencies

flutter

More

Packages that depend on matrix4_transform