Как загрузить картинку из ассетов?

Я использую приведенный ниже код для загрузки изображения из галереи во флаттере, если в случае, если изображение не выбрано из галереи, я хочу, чтобы изображение из assets было загружено в хранилище firebase, поскольку это avatarImageFile должно быть эквивалентно изображению файл из активов. Как я могу этого добиться?

Future getImage() async {
    print("get image");

    PickedFile image = await _picker.getImage(source: ImageSource.gallery);

    if (image != null) {
      setState(() {
        final File file = File(image.path);
        avatarImageFile = file;
        isLoading = true;

      });
    }
    else{
      //if image is null then the image from the assets should be made picked into `avatarImageFile `

   }


  }

person Community    schedule 06.07.2020    source источник


Ответы (1)


Во Flutter вы можете загружать свои активы двумя способами:

  • Использование rootBundle.loadString("assets/my_file.json") для загрузки текстовых файлов

  • Использование rootBundle.load("assets/something.png") для загрузки любого типа файла (изображений, PDF или любых других двоичных файлов).

Обратите внимание, что load также работает с файлами .json, но в целом loadString - лучший выбор, когда дело доходит до получения текста. Для получения дополнительной информации прочтите документ.

avatarImageFile = await rootBundle.load("assets/a/b/c.png");

Не используйте rootBundle, когда находитесь внутри виджетов: вместо этого лучше использовать _5 _ :

class MyWidget extends StatelessWidget {
  const MyWidget();

  Future<String> loadConfig(BuildContext context) async =>
    await DefaultAssetBundle
    .of(context)
    .loadString("myassets/some_cfg.json");

  @override
  Widget build(BuildContext context) {...}

}

Опять же, проделайте то же самое, когда находитесь внутри виджетов. В любом другом случае используйте rootBundle.

person Alberto Miola    schedule 06.07.2020