Flutter:连接到Google Cloud API时在哪里找到auth文件

wvt8vs2t  于 2023-03-24  发布在  Flutter
关注(0)|答案(1)|浏览(150)

我正在尝试从Flutter应用程序使用Google Vision API。我正在使用google_vision包:https://pub.dev/packages/google_vision。从本页的示例中:https://pub.dev/packages/google_vision/example我需要使用auth.json文件来创建Google vision项目。问题是我可以将文件放在哪里以便应用可以找到它。
我尝试将文件添加到asset文件夹中并更新pubspec.yaml文件。但我仍然得到错误代码:
[错误:flutter/运行时/dart_vm_initializer.cc(41)]未处理的异常:文件系统异常:无法打开文件,路径= 'assets/auth/auth.json'(操作系统错误:没有此类文件或目录,errno = 2)
我使用的代码行是:

final googleVision = await GoogleVision.withJwt('assets/auth/auth.json');

作为替代方案,如果有一种方法可以使用API Key而不是json文件,这也是一个很好的解决方案。

6mw9ycah

6mw9ycah1#

您不能直接访问资产文件,因为资产与应用程序捆绑在一起,不是设备文件系统的一部分。您应该使用package:flutter/services.dart中的rootBundle读取资产数据,然后将其再次存储在设备的文件系统中,如GitHub上的google_vision包示例所示。

import 'dart:io';
import 'package:path_provider/path_provider.dart';

Future<String> getFileFromAsset(String assetFileName,
    {String? temporaryFileName}) async {
  final byteData = await rootBundle.load('assets/auth/$assetFileName');
  final buffer = byteData.buffer;

  final fileName = temporaryFileName ?? assetFileName;
  final filePath = await getTempFile(fileName);

  await File(filePath).delete();
  await File(filePath).writeAsBytes(
      buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));

  return filePath;
}

Future<String> getTempFile([String? fileName]) async {
  final tempDir = await getTemporaryDirectory();
  return '${tempDir.path}${Platform.pathSeparator}${fileName ?? UniqueKey().toString()}';
}

然后,您可以像这样创建GoogleVision-示例:

final jwtFromAsset = await getFileFromAsset('auth.json');
final googleVision = await GoogleVision.withJwt(jwtFromAsset);

相关问题