Build beautiful visual editors with Flutter! Create stunning designs with text, GIFs, stickers, gradients, and images. Customize everything, export anywhere, and re-edit anytime.
πͺ Sticker Features | π¨ Background Customization | ποΈ Create design |
---|---|---|
Create custom stickers from your gallery images | Apply solid colors or beautiful gradient backgrounds | That's it GO Creative! |
![]() |
![]() |
![]() |
Load and modify existing designs with full fidelity preservation
Professional-grade layer system - move, stack, rotate, and scale elements like in design tools
Get started with TouchCraft Editor in just a few lines of code:
class EditorScreen extends StatelessWidget {
const EditorScreen({super.key});
@override
Widget build(BuildContext context) {
return TouchCraftEditor(
onDesignReady: (designFile, backgroundGradientColorList, canvasElementList) {
// Handle your exported design here
},
);
}
}
To avoid build-time warnings, follow these steps:
- Create
proguard-rules.pro
file atyour_application/android/app/proguard-rules.pro
- Add the following line:
-dontwarn org.tensorflow.lite.gpu.GpuDelegateFactory$Options
If you're using the create sticker feature:
- Download the ML model from this link
- Create directory:
assets/models/
in your Flutter project - Place the downloaded
deeplabv3_257_mv_gpu.tflite
file in this directory
if you using GIF editor you have to provide Giphy Api key like this,
TouchCraftEditor(
giphyApiKey: "GIPHY_API_KEY",
)
Note : To generate api key head over to this guide.
Choose exactly which editing tools to expose:
- Image editing
- GIF integration
- Sticker creation
- Text editing
- Gradient backgrounds
- Quick setup with primary color configuration
- Fully customizable UI to match your app's design
- Complete control over icons, buttons, and widgets
100% compatible with both Android & iOS
Save your creations as PNG, JPG, or animated GIF
class EditorScreen extends StatelessWidget {
const EditorScreen({super.key});
@override
Widget build(BuildContext context) {
return TouchCraftEditor(
onDesignReady: (designFile, backgroundGradientColorList, canvasElementList) {
// Handle the exported design
},
);
}
}
The onDesignReady
callback returns three important parameters:
designFile
- The final exported image (PNG/JPG) or animated GIFbackgroundGradientColorList
- Background gradient colors if appliedcanvasElementList
- Complete list of all CanvasElement models used
onDesignReady: (designFile, backgroundGradientColorList, canvasElementList) {
// Save designFile to gallery or cloud storage
// Store canvasElementList as JSON for re-editing capability
},
π‘ Pro Tip: Store
canvasElementList
as JSON to enable re-editing functionality!
Control which editing features are available (all are true
by default):
TouchCraftEditor(
enableBackgroundGradientEditor: true,
enableGifEditor: true,
enableImageEditor: false,
enableStickerEditor: true,
enableTextEditor: false,
onDesignReady: (designFile, backgroundGradientColorList, canvasElementList) {},
)
Choose your preferred export format:
TouchCraftEditor(
imageFormatType: ImageFormatType.jpg, // or ImageFormatType.png
// ... other parameters
)
Customize transition animations:
TouchCraftEditor(
animationsDuration: Duration(milliseconds: 500),
// ... other parameters
)
Provide custom color palettes and font families:
TouchCraftEditor(
backgroundGradientColorList: [
[Color(0xFF2193b0), Color(0xFF6dd5ed)],
[Color(0xFFb92b27), Color(0xFF1565C0)],
[Color(0xFF373B44), Color(0xFF4286f4)],
],
fontFamilyList: ['Lato', 'Montserrat', 'Lobster'],
fontColorList: [Colors.black, Colors.white, Colors.red],
// ... other parameters
)
Match your app's primary color:
TouchCraftEditor(
primaryColor: Colors.green,
// ... other parameters
)
Take full control over the editor's appearance by providing custom widgets:
TouchCraftEditor(
onDesignReady: (designFile, backgroundGradientColorList, canvasElementList) {
// Handle exported design
},
doneButtonChild: Container(
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12),
decoration: BoxDecoration(
gradient: LinearGradient(colors: [Colors.blue, Colors.purple]),
borderRadius: BorderRadius.circular(25),
),
child: Text(
"β¨ Finish Design",
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
),
)
TouchCraftEditor(
onDesignReady: (designFile, backgroundGradientColorList, canvasElementList) {},
internetConnectionWidget: Container(
padding: EdgeInsets.all(32),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.wifi_off, size: 64, color: Colors.grey),
SizedBox(height: 16),
Text(
"π No Internet Connection",
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 8),
Text(
"Please check your connection and try again",
textAlign: TextAlign.center,
style: TextStyle(color: Colors.grey[600]),
),
],
),
),
)
We welcome contributions! Help make TouchCraft Editor even better.
- Fork the repository
- Create an issue describing your proposed changes
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Submit a pull request
- Ensure your code follows the existing style
- Add tests for new features
- Update documentation as needed
- Be descriptive in your commit messages
This project is licensed under the MIT License - see the LICENSE file for details.
Found a bug or need help?
- Issues: Create an issue
Made with β€οΈ for the Flutter community