Хранение изображения в firebase
Итак, я спрашивал об этом несколько раз и пробовал несколько строк кода, предложенных людьми, но у меня ничего еще не получилось. На этот раз я предоставлю больше информации, чтобы дать вам представление, ребята.
Итак, у меня есть страница "Создать продукт" в моем приложении для этого конкретного продукта, это "Автомобиль". Когда пользователь завершает отправку всех своих данных в TextFormFIelds
данные отправляются в Firebase
но проблема в том, что это не изображение, которое я предоставляю, и я продолжаю получать сообщение об ошибке. Идея этогоImage
является по ImagePicker
где пользователь может выбрать изображение из своей "Галереи" и опубликовать его как "Автомобиль", который они отправляют.
Я хочу, чтобы изображение, которое выбирает пользователь, было показано всем пользователям с любого устройства.
Я просто покажу, как я звоню Image
данные через приложение, так как все остальное работает нормально.
Но когда они отправляют, я получаю эту ошибку:
════════ Exception caught by gesture ═══════════════════════════════════════════
The following JsonUnsupportedObjectError was thrown while handling a gesture:
Converting object to an encodable object failed: Instance of '_File'
Вот как настроен мой провайдер:
class AddCar {
// Other data
File image;
вот как выглядит мой URL-адрес firebase (используется для извлечения и хранения данных):
Future<void> fetchAndSetCars() async {
const url = 'https://#######.firebaseio.com/cars.json';
try {
final response = await http.get(url);
final extractedData = json.decode(response.body) as Map<String, dynamic>;
final List<AddCar> loadedCars = [];
extractedData.forEach((carId, carData) {
loadedCars.add(AddCar(
// Other data
image: carData['image'],
));
});
_cars = loadedCars;
notifyListeners();
} catch (error) {
throw (error);
}
}
AddCar findById(String id) {
return _cars.firstWhere((carProd) => carProd.id == id);
}
void addCar(AddCar car) {
const url = 'https://#######.firebaseio.com/cars.json';
http.post(
url,
body: json.encode({
// other data
'image': car.image.toString(),
}),
);
final newCar = AddCar(
// Other data
image: car.image,
);
_cars.insert(0, newCar); // add car at the top of the list
notifyListeners();
}
вот как я показываю Image
в моем приложении:
Container(
width: MediaQuery.of(context).size.width * 0.35,
height: MediaQuery.of(context).size.width * 0.35,
child: GestureDetector(
child: Image.file(
image,
fit: BoxFit.fill,
),
onTap: () {
Navigator.of(context).pushNamed(
MyCarDetails.routeName,
arguments: id,
);
},
),
),
и вот мой ImagePicker
код:
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart' as syspaths;
Future<void> _takePicture() async {
final imageFile = await ImagePicker.pickImage(
source: ImageSource.gallery,
);
setState(() {
data.image = imageFile;
});
final appDir = await syspaths.getApplicationDocumentsDirectory();
String fileName = path.basename(imageFile.path);
final savedImage = await imageFile.copy('${appDir.path}/$fileName');
}
и я вызываю такой метод (который отлично работает):
onPressed: _takePicture;