Изображение файла не может быть присвоено параметру

#image #flutter #file-upload

#изображение #трепетание #загрузка файла

Вопрос:

Итак, я пытаюсь сделать несколько загрузочных изображений, используя эти:

 _selectImage(ImagePicker().getImage(source: ImageSource.gallery), 1);
_selectImage(ImagePicker().getImage(source: ImageSource.gallery), 2);
_selectImage(ImagePicker().getImage(source: ImageSource.gallery), 3);
 

Когда метод этого:

     void _selectImage(Future<PickedFile> image, int imageNumber) async{
    FileImage tempImg = (await image) as FileImage;
    switch(imageNumber){
      case 1: setState(() => _image1 = tempImg);
      break;

      case 2: setState(() => _image3 = tempImg);
      break;

      case 2: setState(() => _image3 = tempImg);
      break;
    }
  }
 

но здесь говорится, что ‘Изображение файла’ не может быть присвоено параметру типа ‘File’:

     Widget _displayChild() {
    if (_image1 == null){
      return Padding(
        padding: const EdgeInsets.fromLTRB(15.0, 20.0, 15.0, 20.0),
        child: new Icon(Icons.add, color: grey,),
      );
    }else{
      return Padding(
        padding: const EdgeInsets.fromLTRB(15.0, 20.0, 15.0, 20.0),
        child: Image.file(_image1)
      );
    }
  }
 

Может ли кто-нибудь 1 помочь? Эта более новая версия меня смущает

Ответ №1:

Кажется, вы, возможно, неправильно понимаете файл, который должен быть назначен, поэтому я потратил несколько минут, чтобы реализовать это в быстром main.dart файле и заставить его работать на вас.

 import 'dart:io';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

void main() {
  runApp(
    MaterialApp(
      home: MyWidget(),
    ),
  );
}

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  File _image1;
  File _image2;
  File _image3;

  void _selectImage(int imageNumber) async {
    final PickedFile pickedFile = await ImagePicker().getImage(source: ImageSource.gallery);

    switch (imageNumber) {
      case 1:
        setState(() => _image1 = File(pickedFile.path));
        break;
      case 2:
        setState(() => _image3 = File(pickedFile.path));
        break;
      case 2:
        setState(() => _image3 = File(pickedFile.path));
        break;
    }
  }

  Widget _displayChild() {
    if (_image1 == null) {
      return RaisedButton(
        padding: const EdgeInsets.fromLTRB(15.0, 20.0, 15.0, 20.0),
        child: new Icon(Icons.add, color: Colors.blue),
        onPressed: () => _selectImage(1),
      );
    } else {
      return Padding(
        padding: const EdgeInsets.fromLTRB(15.0, 20.0, 15.0, 20.0),
        child: Image.file(_image1),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Build some widgets!',
              style: Theme.of(context).textTheme.headline4,
            ),
            _displayChild(),
          ],
        ),
      ),
    );
  }
}
 

Комментарии:

1. можете ли вы помочь мне и с этим, или мне следует сделать новый пост? Я попытался проверить, но загрузка не прекращается twitlonger.com/show/n_1srhpre

2. Вы должны сделать новый пост для нового вопроса.

Ответ №2:

Загрузка изображения из файла создает копию файла в памяти, которая сохраняется в кэше изображений. Базовый файл не отслеживается на предмет изменений. Если он действительно изменится, приложение должно удалить запись из кэша изображений.