Flutter - تبقى الصورة بعد حذفها؟

3

أعاني بعض السلوك الغريب حول الصور في رفرفة.

أستخدم حزمة الكاميرا لالتقاط صور مثل ذلك:

void _takePicture() {
_controller.takePicture(_tempImagePath).then((_) {
  setState(() {
    _captured = true;
    _shutterButtonController.forward();
    _acceptCancelController.forward();
  });
});
}

واضحة جدًا - يتم التقاط الصورة بالطريقة التي أتوقعها. إذا لاحظت _captured عضو ، أنا أستخدم هذا لدفع عرض معاينة الكاميرا أو الصورة الملتقطة. هنا مقتطف من شجرة القطعة الخاصة بي:

...
AspectRatio(
        aspectRatio: _controller.value.aspectRatio,
        child: _captured
            ? Image.file(File(_tempImagePath))
            : CameraPreview(_controller)),
...

يتصرف هذا أيضًا كما أتوقع - يتم عرض الصورة بعد التقاطها. ومع ذلك ، يبدو أن الصيد هو ذلك Image.file(...) سيعرض دائمًا نفس الصورة. لقد جربت عددًا من الطرق لحذف هذه الصورة ، وأعتقد أنها تعمل ، ومع ذلك تستمر الصورة بطريقة أو بأخرى.

أنا في المرحلة التي أحذف فيها وأعيد إنشاء الدليل بأكمله داخل initState() كما يتم إنشاء الشاشة على هذا النحو:

Future<String> get getTempImageDirectory async {
  final directory = await getApplicationDocumentsDirectory();
  var imageDirectory = Directory(directory.path + '/images/');

  print('The image directory ${imageDirectory.path} exists: ${imageDirectory.existsSync()}');

  if (imageDirectory.existsSync()) {
    imageDirectory.deleteSync(recursive: true);
  }

  imageDirectory.createSync();

  return imageDirectory.path;
}

حتى مع هذا ، أو حذف الصور يدويًا بالاسم ، تستمر الصورة التي تم التقاطها في الأصل داخل الأداة التي تم إنشاؤها بواسطة Image.file(...) . أنا متأكد تمامًا من أن الحذف يعمل بشكل جيد - ستظهر واجهة برمجة تطبيقات الكاميرا خطأً حيث لا يمكن استبدال الصورة السابقة إذا لم تحذفها.

أخيرًا ، إذا قمت بقتل التطبيق وإعادة التشغيل ، فسوف أتمكن من استعادة الصورة ورؤية صورة جديدة ، ولكن مرة أخرى ، ستبقى هذه الصورة حتى يتم قتل التطبيق بالكامل. يبدو أن الصورة مخبأة بطريقة أو بأخرى؟

أنا جديد تمامًا على Flutter و Dart ، لذلك نقدر أي مساعدة.

1 إجابة

4
افضل جواب

بعد البحث من خلال القضايا جيثب، وكنت قادرا على تعلم أن الرفرفة و التخزين المؤقت هذه الصور من وراء الكواليس. سيستمرون في الذاكرة بغض النظر عن حذفهم من القرص.

أضفت هذا إلى طريقة الحذف الخاصة بي ، وتم حل مشكلتي.

import 'package:flutter/painting.dart';
...
imageCache.clear();

لقد وجدت أيضًا إجابة هنا ، ولكن يبدو أن بيان الاستيراد خاطئ استنادًا إلى Flutter v0.5.1.

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام