لغة الدارت وتقنية الفلاتر
طلبت من ChatGPT مساعدتي في كتابة كود جلب صورة من الاستديو ثم اقتصاصها في flutter وكانت النتيجة https://sl.bing.net/iYCixYecxuC
هذا الكود الذي اعطاني اياه
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:image_cropper/image_cropper.dart';
class ImagePickerPage extends StatefulWidget {
@override
_ImagePickerPageState createState() => _ImagePickerPageState();
}
class _ImagePickerPageState extends State<ImagePickerPage> {
// متغير لتخزين الصورة المحددة
File _image;
// دالة لاختيار الصورة من الاستديو
Future _pickImage() async {
// استخدام image_picker لفتح الاستديو واختيار صورة
final pickedFile = await ImagePicker().getImage(source: ImageSource.gallery);
// التحقق من أن المستخدم اختار صورة
if (pickedFile != null) {
// تحديث الحالة وتعيين الصورة المحددة
setState(() {
_image = File(pickedFile.path);
});
}
}
// دالة لاقتصاص الصورة
Future _cropImage() async {
// استخدام image_cropper لفتح واجهة اقتصاص الصورة
final croppedFile = await ImageCropper.cropImage(
sourcePath: _image.path,
aspectRatio: CropAspectRatio(ratioX: 1, ratioY: 1), // نسبة الاقتصاص
compressQuality: 100, // جودة الصورة
maxWidth: 700, // العرض الأقصى للصورة
maxHeight: 700, // الارتفاع الأقصى للصورة
compressFormat: ImageCompressFormat.jpg, // صيغة الصورة
androidUiSettings: AndroidUiSettings( // إعدادات واجهة الاقتصاص لنظام الأندرويد
toolbarTitle: 'اقتصاص الصورة', // عنوان الشريط العلوي
toolbarColor: Colors.blue, // لون الشريط العلوي
toolbarWidgetColor: Colors.white, // لون الأيقونات في الشريط العلوي
initAspectRatio: CropAspectRatioPreset.original, // النسبة الافتراضية للصورة
lockAspectRatio: false, // قفل النسبة أو السماح بتغييرها
),
);
// التحقق من أن المستخدم اقتص الصورة
if (croppedFile != null) {
// تحديث الحالة وتعيين الصورة المقصوصة
setState(() {
_image = croppedFile;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('جلب واقتصاص الصورة'),
),
body: Center(
child: _image == null
? Text('لم تختر صورة بعد')
: Image.file(_image),
),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: _pickImage,
tooltip: 'اختر صورة',
child: Icon(Icons.photo_library),
),
SizedBox(height: 10),
FloatingActionButton(
onPressed: _cropImage,
tooltip: 'اقتص الصورة',
child: Icon(Icons.crop),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:image_cropper/image_cropper.dart';
class ImagePickerPage extends StatefulWidget {
@override
_ImagePickerPageState createState() => _ImagePickerPageState();
}
class _ImagePickerPageState extends State<ImagePickerPage> {
// متغير لتخزين الصورة المحددة
File _image;
// دالة لاختيار الصورة من الاستديو
Future _pickImage() async {
// استخدام image_picker لفتح الاستديو واختيار صورة
final pickedFile = await ImagePicker().getImage(source: ImageSource.gallery);
// التحقق من أن المستخدم اختار صورة
if (pickedFile != null) {
// تحديث الحالة وتعيين الصورة المحددة
setState(() {
_image = File(pickedFile.path);
});
}
}
// دالة لاقتصاص الصورة
Future _cropImage() async {
// استخدام image_cropper لفتح واجهة اقتصاص الصورة
final croppedFile = await ImageCropper.cropImage(
sourcePath: _image.path,
aspectRatio: CropAspectRatio(ratioX: 1, ratioY: 1), // نسبة الاقتصاص
compressQuality: 100, // جودة الصورة
maxWidth: 700, // العرض الأقصى للصورة
maxHeight: 700, // الارتفاع الأقصى للصورة
compressFormat: ImageCompressFormat.jpg, // صيغة الصورة
androidUiSettings: AndroidUiSettings( // إعدادات واجهة الاقتصاص لنظام الأندرويد
toolbarTitle: 'اقتصاص الصورة', // عنوان الشريط العلوي
toolbarColor: Colors.blue, // لون الشريط العلوي
toolbarWidgetColor: Colors.white, // لون الأيقونات في الشريط العلوي
initAspectRatio: CropAspectRatioPreset.original, // النسبة الافتراضية للصورة
lockAspectRatio: false, // قفل النسبة أو السماح بتغييرها
),
);
// التحقق من أن المستخدم اقتص الصورة
if (croppedFile != null) {
// تحديث الحالة وتعيين الصورة المقصوصة
setState(() {
_image = croppedFile;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('جلب واقتصاص الصورة'),
),
body: Center(
child: _image == null
? Text('لم تختر صورة بعد')
: Image.file(_image),
),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: _pickImage,
tooltip: 'اختر صورة',
child: Icon(Icons.photo_library),
),
SizedBox(height: 10),
FloatingActionButton(
onPressed: _cropImage,
tooltip: 'اقتص الصورة',
child: Icon(Icons.crop),
),
],
),
);
}
}
👍2
https://code.market/product/best-flutter-ui-templates?utm_medium=article&utm_source=medium&utm_campaign=40%20%20free%20flutter%20templates
من افضل المواقع التي توفر قوالب واجهات مستخدم بالفلاتر ( مجانا , مدفوع )
من افضل المواقع التي توفر قوالب واجهات مستخدم بالفلاتر ( مجانا , مدفوع )
Codemarket
Best Flutter
Best Flutter UI Templates, completely free for everyone. Its build-in Flutter Dart.
👍4