Перетаскивание png-изображения должно заменяться фоновым изображением и иметь возможность изменять размер и поворачивать (приложение для редактирования фотографий) в flutter

#flutter

#flutter

Вопрос:

У меня есть список изображений стикеров png, которые я хочу перетащить поверх фонового изображения и иметь возможность изменять размер после размещения его поверх фонового изображения и перетаскивать его в новое положение после изменения размера, любые мысли об этой реализации с помощью flutter будут оценены.

введите описание изображения здесь

Ответ №1:

Вы можете скопировать вставить запустить полный код ниже
Вы можете использовать пакет https://pub.dev/packages/flutter_simple_sticker_view
Чтобы запустить демонстрационный код, вы можете скопировать ресурс из https://github.com/myriky/flutter_simple_sticker_view/tree/master/example/assets

фрагмент кода

 FlutterSimpleStickerView _stickerView = FlutterSimpleStickerView(
    Container(
      decoration: BoxDecoration(
          color: Colors.red,
          image: DecorationImage(
              fit: BoxFit.cover,
              image: NetworkImage(
                  "https://images.unsplash.com/photo-1544032527-042957c6f7ce?ixlib=rb-1.2.1amp;ixid=eyJhcHBfaWQiOjEyMDd9amp;auto=formatamp;fit=cropamp;w=800amp;q=60"))),
    ),
    [
      Image.asset("assets/icons8-superman-50.png"),
 

рабочая демонстрация

https://user-images.githubusercontent.com/581861/69323565-52a84100-0c8a-11ea-974e-f2887d8755b2.gif

полный пример кода с последней версией permission_handler

 import 'dart:typed_data';

import 'package:flutter/material.dart';

import 'package:flutter_simple_sticker_view/flutter_simple_sticker_view.dart';

import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:permission_handler/permission_handler.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(title: "Flutter Simple Sticker View", home: HomeView());
  }
}

class HomeView extends StatefulWidget {
  @override
  _HomeViewState createState() => _HomeViewState();
}

class _HomeViewState extends State<HomeView> {
  FlutterSimpleStickerView _stickerView = FlutterSimpleStickerView(
    Container(
      decoration: BoxDecoration(
          color: Colors.red,
          image: DecorationImage(
              fit: BoxFit.cover,
              image: NetworkImage(
                  "https://images.unsplash.com/photo-1544032527-042957c6f7ce?ixlib=rb-1.2.1amp;ixid=eyJhcHBfaWQiOjEyMDd9amp;auto=formatamp;fit=cropamp;w=800amp;q=60"))),
    ),
    [
      Image.asset("assets/icons8-superman-50.png"),
      Image.asset("assets/icons8-captain-america-50.png"),
      Image.asset("assets/icons8-avengers-50.png"),
      Image.asset("assets/icons8-iron-man-50.png"),
      Image.asset("assets/icons8-batman-50.png"),
      Image.asset("assets/icons8-thor-50.png"),
      Image.asset("assets/icons8-venom-head-50.png"),
      Image.asset("assets/icons8-homer-simpson-50.png"),
      Image.asset("assets/icons8-spider-man-head-50.png"),
      Image.asset("assets/icons8-harry-potter-50.png"),
      Image.asset("assets/icons8-genie-lamp-50.png"),
      Image.asset("assets/icons8-cyborg-50.png"),
      Image.asset("assets/icons8-one-ring-50.png"),
    ],
    // panelHeight: 150,
    // panelBackgroundColor: Colors.blue,
    // panelStickerBackgroundColor: Colors.pink,
    // panelStickercrossAxisCount: 4,
    // panelStickerAspectRatio: 1.0,
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Flutter Simple Sticker View"),
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.save_alt),
              onPressed: () async {
                Uint8List image = await _stickerView.exportImage();

                Map<Permission, PermissionStatus> statuses = await [
                  Permission.storage,
                ].request();
                await ImageGallerySaver.saveImage(image);
              },
            )
          ],
        ),
        body: _stickerView);
  }
}
 

Комментарии:

1. большое спасибо, есть ли какой-нибудь способ добавить к нему поворот вместе с изменением размера

2. Я бы посоветовал вам связаться с владельцем пакета