├── .flutter-plugins ├── .flutter-plugins-dependencies ├── .gitignore ├── .metadata ├── CHANGELOG.md ├── LICENSE ├── README.md ├── analysis_options.yaml ├── lib ├── bc_image_editor.dart └── edit_with_gesture.dart ├── media └── examples │ ├── 2d.gif │ ├── horizontal.gif │ ├── size.gif │ ├── vertical.gif │ └── viewMode.gif ├── pubspec.yaml └── test └── bc_image_editor_test.dart /.flutter-plugins: -------------------------------------------------------------------------------- 1 | # This is a generated file; do not edit or check into version control. 2 | path_provider=/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-2.0.9/ 3 | path_provider_android=/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_android-2.0.12/ 4 | path_provider_ios=/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_ios-2.0.8/ 5 | path_provider_linux=/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.1.5/ 6 | path_provider_macos=/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-2.0.5/ 7 | path_provider_windows=/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.0.5/ 8 | -------------------------------------------------------------------------------- /.flutter-plugins-dependencies: -------------------------------------------------------------------------------- 1 | {"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_ios","path":"/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_ios-2.0.8/","dependencies":[]}],"android":[{"name":"path_provider_android","path":"/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_android-2.0.12/","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-2.0.5/","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.1.5/","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"/Users/berkayceylan/Programming/flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.0.5/","dependencies":[]}],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_ios","path_provider_linux","path_provider_macos","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_ios","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2022-04-06 17:04:25.914394","version":"2.8.0"} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. 25 | /pubspec.lock 26 | **/doc/api/ 27 | .dart_tool/ 28 | .packages 29 | build/ 30 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: cf4400006550b70f28e4b4af815151d1e74846c6 8 | channel: stable 9 | 10 | project_type: package 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.0.1 2 | 3 | * Initial version. 4 | 5 | ## 0.0.2 6 | 7 | * Added gesture detector editing. 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Berkay CEYLAN 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BC Image Editor 2 | You can edit image using this package and also you can create flex preview image by setting foreground to null. For now, you can use only asset files. 3 | 4 | https://pub.dev/packages/bc_image_editor

5 | [![MIT](https://img.shields.io/github/license/berkayceylan/bc_image_editor)](https://github.com/berkayceylan/bc_image_editor) 6 | 7 | 8 | ## Features 9 | 10 | - Background and Foreground(optional) image 11 | - Resize images 12 | - Set x,y position them 13 | - 3D rotate image image on x, y axis (Foreground only) 14 | - 2D rotate foreground image 15 | - Scale for detail view 16 | - Use on device files or asset files 17 | - Edit foreground image with gesture detector moves. 18 | - Size and position. 19 | - 3D rotate Horizontal and Vertical 20 | - 2D rotate 21 | - View mode (Scale) 22 | 23 | 24 | 25 | ## Getting started 26 | Import: 27 | ```dart 28 | import 'package:bc_image_editor/bc_image_editor.dart'; 29 | ``` 30 | Using: 31 | ```dart 32 | BcImageEditor( 33 | frontImage: "image/path", 34 | bgImage: "image/path", 35 | frontWidth: 200, 36 | frontHeight: 300, 37 | bgWidth: 300, 38 | bgHeight: 200, //If one of variable of width and height not setted or set to null, the other one will auto scale 39 | frontLeft: 10, 40 | frontTop: 10, 41 | bgLeft: 10, 42 | bgTop: 10, 43 | frontBoxFit: BoxFit.fill, 44 | bgBoxFit: BoxFit.fill, 45 | rotateX: 0, //rotateX and y are on 3D axis 46 | rotateY: 0, 47 | rotate2D: 0, 48 | ), 49 | ``` 50 | --- 51 |
52 | 53 | ## Edit image with gesture detector 54 | Import: 55 | ```dart 56 | import 'package:bc_image_editor/edit_with_gesture.dart'; 57 | ``` 58 | Using: 59 | ```dart 60 | EditWithGesture( 61 | frontImage: frontFilePath, 62 | bgImage: bgFilePath, 63 | editMode: EditMode.verticalRotate, 64 | ); 65 | ``` 66 | 67 | Gesture Editing Modes: 68 | | Editing Mode | Function | 69 | |------------------|-----------------------------------------------------------| 70 | | size | Resize and change position image. | 71 | | horizontalRotate | Rotate image horizontal on 3D axis. | 72 | | verticalRotate | Rotate image vertical on 3D axis. | 73 | | rotate2D | 2D rotation. | 74 | | viewMode | Zoom image for detail things (it doesn't do any editing). | 75 | | noEdit | Close the editing. | 76 | 77 | 78 | --- 79 | ## Using from asset folder image 80 |
81 | 82 | First initialize your path name: 83 | ```dart 84 | String imagePath = ""; 85 | ``` 86 | Then create a async function like below and use it in initState: 87 | ```dart 88 | void initFiles() async { 89 | File tempImg = 90 | await getImageFileFromAssets("assets/image/path"); 91 | setState(() { 92 | imagePath = tempImg.path; 93 | }); 94 | } 95 | ``` 96 | ## Example 97 | For example; you wanna edit image with gesture detector and use image from asset file. 98 | 99 | Import edit_with_gesture file 100 | ```dart 101 | 102 | import 'package:bc_image_editor/bc_image_editor.dart'; 103 | import 'package:bc_image_editor/edit_with_gesture.dart'; 104 | 105 | ``` 106 | 107 | Create file paths as variables: 108 | 109 | ```dart 110 | String frontFilePath = "", bgFilePath = ""; 111 | ``` 112 | Create a async variable to get image files. And get images from asset with "getImageFileFromAssets" function. (If you want use device image you can write path directly). 113 | 114 | ```dart 115 | void initFiles() async { 116 | File frontTempFile = 117 | await getImageFileFromAssets("assets/images/example-front.png"); 118 | File tempFileBg = await getImageFileFromAssets("assets/images/example-bg.jpg"); 119 | setState(() { 120 | frontFilePath = frontTempFile.path; 121 | bgFilePath = tempFileBg.path; 122 | }); 123 | } 124 | ``` 125 | 126 | Use this function on initState: 127 | 128 | ```dart 129 | @override 130 | void initState() { 131 | // TODO: implement initState 132 | super.initState(); 133 | initFiles(); 134 | } 135 | ``` 136 | 137 | Use EditWithGesture widget: 138 | ```dart 139 | EditWithGesture( 140 | frontImage: frontFilePath, 141 | bgImage: bgFilePath, 142 | editMode: EditMode.verticalRotate, 143 | ); 144 | ``` 145 | 146 | Edit With Gesture Detector Examples: 147 | 148 | ```dart 149 | EditMode.size 150 | ``` 151 | 152 | 153 | 154 | ```dart 155 | EditMode.horizontalRotate 156 | ``` 157 | 158 | 159 | ```dart 160 | EditMode.verticalRotate 161 | ``` 162 | 163 | 164 | 165 | ```dart 166 | EditMode.rotate2D 167 | 168 | ``` 169 | 170 | 171 | ```dart 172 | EditMode.viewMode 173 | ``` 174 | 175 | 176 | 177 | Full Code: 178 | ```dart 179 | import 'dart:io'; 180 | 181 | import 'package:flutter/material.dart'; 182 | import 'package:bc_image_editor/bc_image_editor.dart'; 183 | import 'package:bc_image_editor/edit_with_gesture.dart'; 184 | 185 | void main() { 186 | runApp(const MyApp()); 187 | } 188 | 189 | class MyApp extends StatelessWidget { 190 | const MyApp({Key? key}) : super(key: key); 191 | 192 | @override 193 | Widget build(BuildContext context) { 194 | return MaterialApp( 195 | title: 'Flutter Demo', 196 | home: Scaffold( 197 | appBar: AppBar( 198 | title: const Text("Test"), 199 | ), 200 | body: const Home(), 201 | ), 202 | ); 203 | } 204 | } 205 | 206 | class Home extends StatefulWidget { 207 | const Home({Key? key}) : super(key: key); 208 | 209 | @override 210 | _HomeState createState() => _HomeState(); 211 | } 212 | 213 | class _HomeState extends State { 214 | String frontFilePath = "", bgFilePath = ""; 215 | 216 | void initFiles() async { 217 | File frontTempFile = 218 | await getImageFileFromAssets("assets/images/char-2.png"); 219 | File tempFileBg = await getImageFileFromAssets("assets/images/bg-2.jpg"); 220 | setState(() { 221 | frontFilePath = frontTempFile.path; 222 | bgFilePath = tempFileBg.path; 223 | }); 224 | } 225 | 226 | @override 227 | void initState() { 228 | super.initState(); 229 | initFiles(); 230 | } 231 | 232 | @override 233 | Widget build(BuildContext context) { 234 | return EditWithGesture( 235 | frontImage: frontFilePath, 236 | bgImage: bgFilePath, 237 | editMode: EditMode.verticalRotate, 238 | ); 239 | } 240 | } 241 | 242 | ``` 243 | 244 | # LICENSE 245 | MIT License 246 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:flutter_lints/flutter.yaml 2 | 3 | # Additional information about this file can be found at 4 | # https://dart.dev/guides/language/analysis-options 5 | -------------------------------------------------------------------------------- /lib/bc_image_editor.dart: -------------------------------------------------------------------------------- 1 | library bc_image_editor; 2 | 3 | import 'dart:io'; 4 | import 'dart:math'; 5 | 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter/services.dart'; 8 | import 'package:path_provider/path_provider.dart'; 9 | Future getImageFileFromAssets(String path) async { 10 | final byteData = await rootBundle.load(path); 11 | 12 | final file = File('${(await getTemporaryDirectory()).path}/$path'); 13 | bool exist = await file.exists(); 14 | if (!exist) { 15 | await file.create(recursive: true); 16 | } 17 | 18 | await file.writeAsBytes(byteData.buffer 19 | .asUint8List(byteData.offsetInBytes, byteData.lengthInBytes)); 20 | 21 | return file; 22 | } 23 | 24 | class BcImageEditor extends StatelessWidget { 25 | 26 | final String? bgImage, frontImage; 27 | 28 | final double? frontLeft, 29 | frontTop, 30 | frontWidth, 31 | rotateX, 32 | rotateY, 33 | rotate2D, 34 | frontHeight; 35 | final double? transformScale, bgLeft, bgTop, bgWidth, bgHeight; 36 | 37 | final BoxFit frontBoxFit, bgBoxFit; 38 | 39 | 40 | const BcImageEditor({ 41 | Key? key, 42 | @required this.frontImage, 43 | @required this.bgImage, 44 | this.frontWidth, 45 | this.frontHeight, 46 | this.frontLeft, 47 | this.frontTop, 48 | this.frontBoxFit = BoxFit.fill, 49 | this.bgWidth, 50 | this.bgHeight, 51 | this.bgLeft, 52 | this.bgTop, 53 | this.bgBoxFit = BoxFit.fill, 54 | this.rotateX = 0, 55 | this.rotateY = 0, 56 | this.rotate2D = 0, 57 | this.transformScale = 1, 58 | }) : super(key: key); 59 | 60 | @override 61 | Widget build(BuildContext context) { 62 | return SizedBox( 63 | width: MediaQuery.of(context).size.width, 64 | height: MediaQuery.of(context).size.height, 65 | child: Transform.scale( 66 | alignment: Alignment.bottomCenter, 67 | scale: transformScale!, 68 | child: Stack( 69 | alignment: Alignment.center, 70 | children: [ 71 | Positioned( 72 | left: bgLeft, 73 | top: bgTop, 74 | child: bgImage == "" 75 | ? const SizedBox.shrink() 76 | : Image.file( 77 | File(bgImage!), 78 | fit: bgBoxFit, 79 | width: bgWidth, 80 | height: bgHeight, 81 | ), 82 | ), 83 | Positioned( 84 | left: frontLeft, 85 | top: frontTop, 86 | child: Transform.rotate( 87 | angle: rotate2D!, 88 | child: Transform( 89 | transform: Matrix4.identity() 90 | ..setEntry(3, 2, 0.001) 91 | ..rotateY(pi / 180 * rotateY!) 92 | ..rotateX(pi / 180 * rotateX!), 93 | alignment: Alignment.center, 94 | child: Stack( 95 | children: [ 96 | frontImage! == "" 97 | ? const SizedBox.shrink() 98 | : Image.file( 99 | File(frontImage!), 100 | fit: frontBoxFit, 101 | width: frontWidth, 102 | height: frontHeight, 103 | ), 104 | ], 105 | ), 106 | ), 107 | ), 108 | ), 109 | ], 110 | ), 111 | ), 112 | ); 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /lib/edit_with_gesture.dart: -------------------------------------------------------------------------------- 1 | library bc_image_editor; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:bc_image_editor/bc_image_editor.dart'; 5 | import 'package:gesture_x_detector/gesture_x_detector.dart'; 6 | 7 | enum EditMode { 8 | size, 9 | horizontalRotate, 10 | verticalRotate, 11 | rotate2D, 12 | viewMode, 13 | noEdit 14 | } 15 | 16 | class EditWithGesture extends StatefulWidget { 17 | final String frontImage, bgImage; 18 | final EditMode editMode; 19 | const EditWithGesture({ 20 | Key? key, 21 | this.frontImage = "", 22 | this.bgImage = "", 23 | this.editMode = EditMode.noEdit, 24 | }) : super(key: key); 25 | 26 | @override 27 | State createState() => _EditWithGestureState(); 28 | } 29 | 30 | class _EditWithGestureState extends State { 31 | double frontTop = 300, 32 | frontLeft = 100, 33 | firstHeight = 100, 34 | rotateY = 0, 35 | rotateX = 0, 36 | scaleAmount = 1, 37 | frontWidth = 100; 38 | 39 | double bgLeft = 50, 40 | bgTop = 300, 41 | bgWidth = 300, 42 | scaleAmountBg = 1, 43 | firstWidthBg = 300, 44 | firstTransformScale = 1, 45 | transformScale = 1, 46 | rotate2D = 0; 47 | 48 | void mouseMove(MoveEvent event) { 49 | setState(() { 50 | switch (widget.editMode) { 51 | case EditMode.horizontalRotate: 52 | rotateY += event.delta.dx; 53 | break; 54 | case EditMode.verticalRotate: 55 | rotateX += event.delta.dy; 56 | break; 57 | case EditMode.viewMode: 58 | bgTop = bgTop + event.delta.dy; 59 | bgLeft = bgLeft + event.delta.dx; 60 | frontTop += event.delta.dy; 61 | frontLeft += event.delta.dx; 62 | break; 63 | case EditMode.rotate2D: 64 | rotate2D += event.delta.dx / 100; 65 | break; 66 | case EditMode.noEdit: 67 | break; 68 | default: 69 | frontTop += event.delta.dy / firstTransformScale; 70 | frontLeft += event.delta.dx / firstTransformScale; 71 | break; 72 | } 73 | }); 74 | } 75 | 76 | void mouseScale(ScaleEvent event) { 77 | setState(() { 78 | switch (widget.editMode) { 79 | case EditMode.viewMode: 80 | transformScale = firstTransformScale * event.scale; 81 | debugPrint(event.scale.toString()); 82 | break; 83 | case EditMode.noEdit: 84 | break; 85 | default: 86 | frontWidth = firstHeight * event.scale; 87 | scaleAmount = event.scale; 88 | break; 89 | } 90 | }); 91 | } 92 | 93 | @override 94 | Widget build(BuildContext context) { 95 | return XGestureDetector( 96 | onScaleEnd: () { 97 | switch (widget.editMode) { 98 | case EditMode.viewMode: 99 | firstTransformScale = transformScale; 100 | break; 101 | case EditMode.noEdit: 102 | break; 103 | default: 104 | firstHeight *= scaleAmount; 105 | break; 106 | } 107 | }, 108 | onScaleUpdate: mouseScale, 109 | onMoveUpdate: mouseMove, 110 | child: BcImageEditor( 111 | frontImage: widget.frontImage, 112 | bgImage: widget.bgImage, 113 | frontWidth: frontWidth, 114 | bgWidth: bgWidth, 115 | frontTop: frontTop, 116 | frontLeft: frontLeft, 117 | bgTop: bgTop, 118 | bgLeft: bgLeft, 119 | transformScale: transformScale, 120 | rotateX: rotateX, 121 | rotateY: rotateY, 122 | rotate2D: rotate2D, 123 | bgBoxFit: BoxFit.cover, 124 | frontBoxFit: BoxFit.cover, 125 | ), 126 | ); 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /media/examples/2d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/berkayceylan/bc_image_editor/a16a1fa06395fe46445c93b82e4a3d2a34577539/media/examples/2d.gif -------------------------------------------------------------------------------- /media/examples/horizontal.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/berkayceylan/bc_image_editor/a16a1fa06395fe46445c93b82e4a3d2a34577539/media/examples/horizontal.gif -------------------------------------------------------------------------------- /media/examples/size.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/berkayceylan/bc_image_editor/a16a1fa06395fe46445c93b82e4a3d2a34577539/media/examples/size.gif -------------------------------------------------------------------------------- /media/examples/vertical.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/berkayceylan/bc_image_editor/a16a1fa06395fe46445c93b82e4a3d2a34577539/media/examples/vertical.gif -------------------------------------------------------------------------------- /media/examples/viewMode.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/berkayceylan/bc_image_editor/a16a1fa06395fe46445c93b82e4a3d2a34577539/media/examples/viewMode.gif -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: bc_image_editor 2 | description: Do you need quick image editing? You can do it with this package. It is very useful and quick tool. 3 | version: 0.0.2 4 | repository: "https://github.com/berkayceylan150/bc-image-editor" 5 | 6 | environment: 7 | sdk: ">=2.15.0 <3.0.0" 8 | flutter: ">=1.17.0" 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | gesture_x_detector: ^1.0.0 14 | path_provider: ^2.0.9 15 | 16 | dev_dependencies: 17 | flutter_test: 18 | sdk: flutter 19 | flutter_lints: ^1.0.0 20 | 21 | # For information on the generic Dart part of this file, see the 22 | # following page: https://dart.dev/tools/pub/pubspec 23 | 24 | # The following section is specific to Flutter. 25 | flutter: 26 | 27 | # To add assets to your package, add an assets section, like this: 28 | # assets: 29 | # - images/a_dot_burr.jpeg 30 | # - images/a_dot_ham.jpeg 31 | # 32 | # For details regarding assets in packages, see 33 | # https://flutter.dev/assets-and-images/#from-packages 34 | # 35 | # An image asset can refer to one or more resolution-specific "variants", see 36 | # https://flutter.dev/assets-and-images/#resolution-aware. 37 | 38 | # To add custom fonts to your package, add a fonts section here, 39 | # in this "flutter" section. Each entry in this list should have a 40 | # "family" key with the font family name, and a "fonts" key with a 41 | # list giving the asset and other descriptors for the font. For 42 | # example: 43 | # fonts: 44 | # - family: Schyler 45 | # fonts: 46 | # - asset: fonts/Schyler-Regular.ttf 47 | # - asset: fonts/Schyler-Italic.ttf 48 | # style: italic 49 | # - family: Trajan Pro 50 | # fonts: 51 | # - asset: fonts/TrajanPro.ttf 52 | # - asset: fonts/TrajanPro_Bold.ttf 53 | # weight: 700 54 | # 55 | # For details regarding fonts in packages, see 56 | # https://flutter.dev/custom-fonts/#from-packages 57 | -------------------------------------------------------------------------------- /test/bc_image_editor_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | 3 | import 'package:bc_image_editor/bc_image_editor.dart'; 4 | 5 | void main() { 6 | 7 | } 8 | --------------------------------------------------------------------------------