我有一个二进制文件,我需要为我的 flutter 应用程序使用改造来读取它的内容。
我想知道这是否可能。 如果是,请提供任何链接?
否则,我需要一些建议。
在此先感谢您的帮助
首先,你必须指定你的
retrofit
客户端并在里面指定你的API并通过ReturnType.bytes
注解指定DioResponseType
我将做一个从https://www.phoca.cz 网站下载图像的简单示例,您可以用同样的方式下载任何类型的文件
part 'rest_client.g.dart';
@RestApi(baseUrl: "https://www.phoca.cz/")
abstract class RestClient {
factory RestClient(Dio dio, {String baseUrl}) = _RestClient;
@GET("images/phocadownloadsite/phocadownload-category-view-bootstrap-mobile-mobile-view.png")
@DioResponseType(ResponseType.bytes)
Future<HttpResponse<List<int>>> downloadFile();
}
生成代码
flutter pub run build_runner run
初始化客户端
final dio = Dio();
final client = RestClient(dio);
final response = await client.downloadFile();
您可以通过
Image.memory
获取图像
Future<void> main() async {
final dio = Dio();
final client = RestClient(dio);
final response = await client.downloadFile();
WidgetsFlutterBinding.ensureInitialized();
runApp(MaterialApp(
home: Scaffold(
body: Center(
child: Image.memory(response.response.data),
),
),
));
}
powerman23rus 给出的答案与改造完美配合,但如果您正在寻找需要更少代码的包,您可以尝试不需要的 http 包(https://pub.dev/packages/http)标签或生成的文件。您可以收到这样的图像:
import 'package:http/http.dart' as http;
late http.Response response;
response = await http
.get(
Uri.parse("https://www.example.com/Cards/GetRandom.png"),
headers: {"Authorization":"Bearer "+token}
)
.timeout(const Duration(seconds: 7));
Uint8List image = response.bodyBytes;
获取后,您可以使用此小部件渲染图像:
Image.memory(image)