lindi_sticker_widget 1.0.3 copy "lindi_sticker_widget: ^1.0.3" to clipboard
lindi_sticker_widget: ^1.0.3 copied to clipboard

Lindi Sticker Widget is a flutter plugin to flip, rotate, resize, move, delete, edit any widgets.

example/lib/main.dart

import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:lindi_sticker_widget/lindi_controller.dart';
import 'package:lindi_sticker_widget/lindi_sticker_icon.dart';
import 'package:lindi_sticker_widget/lindi_sticker_widget.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Lindi Sticker Widget',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late LindiController controller;

  List<Widget> widgets = [
    SizedBox(
        height: 100,
        width: 100,
        child: Image.network('https://picsum.photos/200/200')),
    const Icon(Icons.favorite, color: Colors.red, size: 50)
  ];

  Uint8List? image;

  @override
  void initState() {
    controller = LindiController(
      borderColor: Colors.white,
      icons: [
        LindiStickerIcon(
            icon: Icons.done,
            alignment: Alignment.topRight,
            onTap: () {
              controller.selectedWidget!.done();
            }),
        LindiStickerIcon(
            icon: Icons.lock_open,
            lockedIcon: Icons.lock,
            alignment: Alignment.topCenter,
            type: IconType.lock,
            onTap: () {
              controller.selectedWidget!.lock();
            }),
        LindiStickerIcon(
            icon: Icons.close,
            alignment: Alignment.topLeft,
            onTap: () {
              controller.selectedWidget!.delete();
            }),
        LindiStickerIcon(
            icon: Icons.edit,
            alignment: Alignment.centerLeft,
            onTap: () {
              controller.selectedWidget!
                  .edit(const Icon(Icons.star, size: 50, color: Colors.yellow));
            }),
        LindiStickerIcon(
            icon: Icons.layers,
            alignment: Alignment.centerRight,
            onTap: () {
              controller.selectedWidget!.stack();
            }),
        LindiStickerIcon(
            icon: Icons.flip,
            alignment: Alignment.bottomLeft,
            onTap: () {
              controller.selectedWidget!.flip();
            }),
        LindiStickerIcon(
            icon: Icons.crop_free,
            alignment: Alignment.bottomRight,
            type: IconType.resize),
      ],
    );

    controller.addAll(widgets);

    controller.onPositionChange((index) {
      debugPrint(
          "widgets size: ${controller.widgets.length}, current index: $index");
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('Lindi Sticker Widget'),
      ),
      body: Column(
        children: [
          Expanded(
            child: LindiStickerWidget(
              controller: controller,
              child: SizedBox(
                  width: double.infinity,
                  height: double.infinity,
                  child: Image.network('https://picsum.photos/200/300',
                      fit: BoxFit.cover)),
            ),
          ),
          if (image != null)
            Expanded(
              child: Image.memory(image!),
            )
        ],
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(
            onPressed: () async {
              Widget widget = Container(
                padding: const EdgeInsets.all(12),
                decoration: const BoxDecoration(
                    color: Colors.blue,
                    borderRadius: BorderRadius.all(Radius.circular(20))),
                child: const Text(
                  'This is a Text',
                  style: TextStyle(color: Colors.white),
                ),
              );
              controller.add(widget);
            },
            tooltip: 'Add',
            child: const Icon(Icons.add),
          ),
          const SizedBox(height: 20),
          FloatingActionButton(
            onPressed: () async {
              Uint8List? img = await controller.saveAsUint8List();
              setState(() {
                image = img;
              });
            },
            tooltip: 'Add',
            child: const Icon(Icons.camera_alt_outlined),
          ),
        ],
      ),
    );
  }
}
48
likes
160
points
323
downloads

Publisher

unverified uploader

Weekly Downloads

Lindi Sticker Widget is a flutter plugin to flip, rotate, resize, move, delete, edit any widgets.

Repository (GitHub)
Contributing

Documentation

API reference

License

MIT (license)

Dependencies

flutter, vector_math

More

Packages that depend on lindi_sticker_widget