Showing
3 changed files
with
53 additions
and
23 deletions
... | @@ -19,12 +19,16 @@ | ... | @@ -19,12 +19,16 @@ |
19 | while the Flutter UI initializes. After that, this theme continues | 19 | while the Flutter UI initializes. After that, this theme continues |
20 | to determine the Window background behind the Flutter UI. --> | 20 | to determine the Window background behind the Flutter UI. --> |
21 | <intent-filter> | 21 | <intent-filter> |
22 | - <action android:name="android.intent.action.MAIN"/> | 22 | + <action android:name="android.intent.action.MAIN" /> |
23 | - <category android:name="android.intent.category.LAUNCHER"/> | 23 | + <category android:name="android.intent.category.LAUNCHER" /> |
24 | </intent-filter> | 24 | </intent-filter> |
25 | </activity> | 25 | </activity> |
26 | <!-- Don't delete the meta-data below. | 26 | <!-- Don't delete the meta-data below. |
27 | This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> | 27 | This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> |
28 | + <activity | ||
29 | + android:name="com.yalantis.ucrop.UCropActivity" | ||
30 | + android:screenOrientation="portrait" | ||
31 | + android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> | ||
28 | <meta-data | 32 | <meta-data |
29 | android:name="flutterEmbedding" | 33 | android:name="flutterEmbedding" |
30 | android:value="2" /> | 34 | android:value="2" /> | ... | ... |
1 | -import 'dart:io'; | ||
2 | - | ||
3 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
4 | import 'package:Parlando/extension/int_extension.dart'; | 2 | import 'package:Parlando/extension/int_extension.dart'; |
5 | import 'package:Parlando/widgets/my_app_bar.dart'; | 3 | import 'package:Parlando/widgets/my_app_bar.dart'; |
6 | import 'package:flutter_gen/gen_l10n/Parlando_localizations.dart'; | 4 | import 'package:flutter_gen/gen_l10n/Parlando_localizations.dart'; |
5 | +import 'package:image_cropper/image_cropper.dart'; | ||
7 | import 'package:image_picker/image_picker.dart'; | 6 | import 'package:image_picker/image_picker.dart'; |
8 | 7 | ||
9 | class AccountEditPage extends StatefulWidget { | 8 | class AccountEditPage extends StatefulWidget { |
... | @@ -95,7 +94,17 @@ class MapScreenState extends State<AccountEditPage> | ... | @@ -95,7 +94,17 @@ class MapScreenState extends State<AccountEditPage> |
95 | ), | 94 | ), |
96 | ), | 95 | ), |
97 | onTap: () { | 96 | onTap: () { |
98 | - _getImage(); | 97 | + Navigator.pop(context); |
98 | + onImageButtonPressed( | ||
99 | + ImageSource.camera, | ||
100 | + context: context, | ||
101 | + capturedImageFile: (s) { | ||
102 | + setState(() { | ||
103 | + print(s); | ||
104 | + // _imageFile = s; | ||
105 | + }); | ||
106 | + }, | ||
107 | + ); | ||
99 | }, | 108 | }, |
100 | ), | 109 | ), |
101 | ListTile( | 110 | ListTile( |
... | @@ -108,10 +117,13 @@ class MapScreenState extends State<AccountEditPage> | ... | @@ -108,10 +117,13 @@ class MapScreenState extends State<AccountEditPage> |
108 | ), | 117 | ), |
109 | ), | 118 | ), |
110 | onTap: () { | 119 | onTap: () { |
120 | + Navigator.pop(context); | ||
111 | onImageButtonPressed( | 121 | onImageButtonPressed( |
112 | - ImageSource.gallery, context: context, | 122 | + ImageSource.gallery, |
123 | + context: context, | ||
113 | capturedImageFile: (s) { | 124 | capturedImageFile: (s) { |
114 | - print("file path ${s}"); | 125 | + print( |
126 | + "file path ${s}"); | ||
115 | setState(() { | 127 | setState(() { |
116 | // _imageFile = s; | 128 | // _imageFile = s; |
117 | }); | 129 | }); |
... | @@ -463,32 +475,46 @@ class MapScreenState extends State<AccountEditPage> | ... | @@ -463,32 +475,46 @@ class MapScreenState extends State<AccountEditPage> |
463 | } | 475 | } |
464 | } | 476 | } |
465 | 477 | ||
478 | +typedef CapturedImageFile = String Function(String); | ||
479 | +typedef OnPickImageCallback = void Function( | ||
480 | + double maxWidth, double maxHeight, int quality); | ||
481 | + | ||
466 | onImageButtonPressed(ImageSource source, | 482 | onImageButtonPressed(ImageSource source, |
467 | {required BuildContext context, capturedImageFile}) async { | 483 | {required BuildContext context, capturedImageFile}) async { |
468 | final ImagePicker _picker = ImagePicker(); | 484 | final ImagePicker _picker = ImagePicker(); |
469 | - File val; | ||
470 | - | ||
471 | final pickedFile = await _picker.pickImage( | 485 | final pickedFile = await _picker.pickImage( |
472 | source: source, | 486 | source: source, |
473 | ); | 487 | ); |
474 | 488 | ||
475 | - val = await ImageCropper.cropImage( | 489 | + if (pickedFile == null) { |
490 | + capturedImageFile(pickedFile!.path); | ||
491 | + return; | ||
492 | + } | ||
493 | + CroppedFile? croppedFile = await ImageCropper().cropImage( | ||
476 | sourcePath: pickedFile.path, | 494 | sourcePath: pickedFile.path, |
477 | - aspectRatio: CropAspectRatio(ratioX: 1, ratioY: 1), | 495 | + aspectRatio: const CropAspectRatio(ratioX: 1, ratioY: 1), |
478 | compressQuality: 100, | 496 | compressQuality: 100, |
479 | maxHeight: 700, | 497 | maxHeight: 700, |
480 | maxWidth: 700, | 498 | maxWidth: 700, |
481 | - compressFormat: ImageCompressFormat.jpg, | 499 | + compressFormat: ImageCompressFormat.png, |
482 | - androidUiSettings: AndroidUiSettings( | 500 | + aspectRatioPresets: [ |
483 | - toolbarColor: Colors.white, | 501 | + CropAspectRatioPreset.square, |
484 | - toolbarTitle: "genie cropper", | 502 | + CropAspectRatioPreset.ratio3x2, |
485 | - ), | 503 | + CropAspectRatioPreset.original, |
504 | + CropAspectRatioPreset.ratio4x3, | ||
505 | + CropAspectRatioPreset.ratio16x9 | ||
506 | + ], | ||
507 | + uiSettings: [ | ||
508 | + AndroidUiSettings( | ||
509 | + toolbarTitle: '裁剪', | ||
510 | + toolbarColor: Colors.deepOrange, | ||
511 | + toolbarWidgetColor: Colors.white, | ||
512 | + initAspectRatio: CropAspectRatioPreset.original, | ||
513 | + lockAspectRatio: false), | ||
514 | + IOSUiSettings( | ||
515 | + title: '裁剪', | ||
516 | + ), | ||
517 | + ], | ||
486 | ); | 518 | ); |
487 | - print("cropper ${val.runtimeType}"); | 519 | + capturedImageFile(croppedFile!.path); |
488 | - capturedImageFile(val.path); | ||
489 | - | ||
490 | } | 520 | } |
491 | - | ||
492 | -typedef capturedImageFile = String Function(String); | ||
493 | -typedef void OnPickImageCallback( | ||
494 | - double maxWidth, double maxHeight, int quality); | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment