Flutter: невозможно загрузить актив и path_provider до горячей перезагрузки - PullRequest
0 голосов
/ 16 июня 2020

Я загружаю изображение из inte rnet и сохраняю его в каталоге платформы.
Я получаю каталог платформы из path_provider и (await getApplicationDocumentsDirectory()).path.
На iOS он работает очень хорошо, но на android Я всегда получаю Unable to load asset: <path_to_my_directory>.

РЕДАКТИРОВАТЬ: Я получаю эту ошибку при первом запуске, после горячего перезапуска, она работает очень хорошо ...

Вот пример кода для тест:

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool dataLoaded = false;
  String pathToSave;

  @override
  void initState() {
    downloadImage();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: dataLoaded ? getImageBody() : CircularProgressIndicator()
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  getImageBody() {
    return Image.asset(pathToSave);
  }

  void downloadImage() async {
    String url = 'https://github.githubassets.com/images/modules/open_graph/github-mark.png';
    pathToSave = '${(await getApplicationDocumentsDirectory()).path}/github-mark.png';
    await Dio().download(url, pathToSave);
    print(pathToSave);
    setState(() {
      dataLoaded = true;
    });
  }
}

зависимости:

path_provider: ^1.6.11
dio: ^3.0.9

1 Ответ

0 голосов
/ 06 июля 2020

Для всех, кто сталкивается с подобными проблемами:

  • Image.asset (путь) загружает актив, который находится в пути ПЕРЕД запуском приложения.
  • Image.file (путь) загружает актив / файл и требует только ссылки на файл, например File (путь). Это означает, что ресурсы могут быть добавлены динамически или c перед запуском приложения.
...