FLUTTER ECOSYSTEM

camilo1498/stories_editor

这是一个以 Instagram 故事创作者风格创建的包,可用来创建包含图片、文字、贴纸(GIF)和手指绘画的图像。

stories_editor 项目封面
Stars
128
Forks
83
最近推送(UTC)
2024年1月14日
项目状态
未归档
camilo velandia GitHub avatar
GITHUB User

camilo velandia ↗

- Mid Flutter Mobile developer with five years of experience. - Junior JS backend developer with two year of experience.

@PuntosColombiaBogotá Colombia官方网站 ↗
语言DartRubySwiftKotlinObjective-C

此仓库发布的插件

使用的依赖

依赖清单 15 项

原始 README

以下为英文项目原文快照,最新内容请访问 GitHub。

展开 / 收起项目 README

I won't be giving support or any update for a while beacuse i don't have time to spend in this project.

Flutter version 3.3.6

Previous branches was deleted (4-Nov-2022)

if you want to make a ull request you must be using the new "main" branch, the problems with gallery, overflow design were solved and the function to create Gif / mp4 was removed due to performance issues.

flutter stories editor

This is a package created in the style of the instagram story creator, with which you can create images with images, texts, stickers (Gifs), finger drawing. They can be exported as an image to the gallery or shared directly to social networks.

Features

[✔️] Draggable image

[✔️] Draggable text

[✔️] Draggable Gif/Sticker (giphy API)

[✔️] Gradient container background

[✔️] Finger painting (normal/translucent/neon)

[✔️] Custom colors, gradients and font families

[✔️] Custom gallery picker (own package => gallery_media_picker)

[✔️] Save draft as image

[✔️] Get draft local path uri

[✔️] Text animations => animated_text_kit

Future features

[❌] Save draft as a gif / video

[❌] Color filters

Demo

If you don't see the images go to the github repository and by the way give me a star :D

showcase gif showcase gif

Installation

This package has been tested in Android and ios, some features works on flutter web

Add stories_editor: 0.1.8 to your pubspec.yaml dependencies and then import it.

import 'package:stories_editor/stories_editor.dart';

How to use

  1. Android

    add uses-permission AndroidMAnifest.xml file

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
         android:maxSdkVersion="31" />
     <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.VIBRATE"/>
    
    ios

    add this config to your config.plist

    <key>NSPhotoLibraryUsageDescription</key>
    <string>Privacy - Photo Library Usage Description</string>
    <key>NSMotionUsageDescription</key>
    <string>Motion usage description</string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>NSPhotoLibraryAddUsageDescription</string>
    
  2. Create a StoriesEditor() widget with the follow params:

StoriesEditor(
    giphyKey: '[YOUR GIPHY API KEY]', /// (String) required param
    onDone: (String uri){
      /// uri is the local path of final render Uint8List
      /// here your code
    },
    colorList: [] /// (List<Color>[]) optional param 
    gradientColors: [] /// (List<List<Color>>[]) optional param 
    middleBottomWidget: Container() /// (Widget) optional param, you can add your own logo or text in the bottom tool
    fontFamilyList: [] /// (List<String>) optional param
    isCustomFontList: '' /// (bool) if you use a own font list set value to "true"
    onDoneButtonStyle: Container() /// (Widget) optional param, you can create your own button style
    onBackPress: /// (Future<bool>) optional param, here you can add yor own style dialog
    editorBackgroundColor: /// (Color) optional param, you can define your own background editor color
    galleryThumbnailQuality: /// (int = 200) optional param, you can set the gallery thumbnail quality (higher is better but reduce the performance)
);

Example

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:share_plus/share_plus.dart';
import 'package:stories_editor/stories_editor.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter stories editor Demo',
      theme: ThemeData(

        primarySwatch: Colors.blue,
      ),
      home: const Example(),
    );
  }
}

class Example extends StatefulWidget {
  const Example({Key? key}) : super(key: key);



  @override
  State<Example> createState() => _ExampleState();
}

class _ExampleState extends State<Example> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.black,
        resizeToAvoidBottomInset: false,
        body: Center(
          child: ElevatedButton(
            onPressed: (){
              Navigator.push(context, MaterialPageRoute(builder: (context) => StoriesEditor(
                giphyKey: '[HERE YOUR API KEY]',
                onDone: (uri){
                  debugPrint(uri);
                  Share.shareFiles([uri]);
                },
              ))
              );
            },
            child: const Text('Open Stories Editor'),
          ),
        )
    );
  }
}

Issues
  1. Issue of photo_View: photo_view#499 Issue log => To safely refer to a widget's ancestor in its dispose() method, save a reference to the ancestor by calling dependOnInheritedWidgetOfExactType() in the widget's didChangeDependencies() method.

ScreenShots

initial view

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/1.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/2.jpg

Custom image picker made with Photo_manager package

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/3.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/4.jpg

Gradient background taking image color pixel

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/20.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/21.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/22.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/23.jpg

Exit Dialog

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/5.jpg

Custom Gif Picker made with a fork of Giphy_picker package

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/7.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/8.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/9.jpg

Custom finger Drawing made with perfect_freehand package

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/14.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/24.jpg

Text Editor

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/10.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/11.jpg https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/12.jpg

All features together

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/17.jpg

Share to social networks made with share_plus package

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/19.jpg

Saved image

https://github.com/camilo1498/stories_editor/blob/main/stories%20editor%20screenshots/18.jpg