Flutter文件上传插件uploader的使用
Flutter文件上传插件uploader的使用
本插件用于创建AAB/APK和IPA文件,并将它们发送到Play Console、TestFlight和Firebase App Distribution。
安装
iOS
- 创建一个包含
issuer_id
和auth_key
的JSON文件,并将该文件的路径提供给Uploader
的iosConfig->path
参数。 issuer_id
可以在App Store Connect的“用户与访问”部分获取。- 对于
auth_key
,在同一个部分创建一个新的开发者密钥。该密钥的ID值可以用作auth_key
。下载创建的密钥文件并将其放置在计算机的~/private_keys/
目录下,该计算机将调用该包。
Android
- 配置
keystore
(详情)。 - 在Google Cloud上激活
Google Play Android Developer API
(详情)。 - 从此链接创建一个
service account
。创建完service account
后,从service account
的Keys
选项卡生成新的JSON
密钥文件,并将该JSON文件的路径提供给Uploader
的androidConfig->path
参数。 - 最后,服务账户需要被授予权限。从Google Play控制台的“用户与权限”部分,向服务账户电子邮件发送具有
Admin
或Releases
权限的邀请。
Firebase App Distribution
- 安装
Firebase CLI
(详情)。 - 在Firebase上激活
App Distribution
。 - 在Firebase的设置中,通过集成选项卡与Google Play进行集成。如果应用尚未发布,则无法完成此集成,在这种情况下,
Uploader
的androidBuildType
参数应设置为apk
。
使用
在pubspec.yaml
文件中添加依赖项:
dev_dependencies:
uploader: any
配置Uploader
参数:
uploader:
platform: all # ios, android, all
uploadType: all # appDistribution, store, all
iosConfig:
path: ios/deploy_config.json # 必须包含auth_key和issuer_id
androidConfig:
path: android/deploy_config.json # 必须包含client_email, client_id, private_key
track: internal # internal, alpha, beta
packageName: "com.package.name"
skslPath: android/sksl.json
appDistributionConfig:
androidBuildType: abb # abb, apk
androidTestersPath: android/testers.txt
iosTestersPath: ios/testers.txt
releaseNotesPath: release_notes.txt
useParallelUpload: true # 默认:true
enableLogFileCreation: false # 默认: false.
extraBuildParameters: null
配置完成后,运行Uploader:
flutter pub run uploader
示例代码
首先,在pubspec.yaml
文件中添加uploader
插件:
dev_dependencies:
uploader: any
然后,配置Uploader
参数:
uploader:
platform: all # ios, android, all
uploadType: all # appDistribution, store, all
iosConfig:
path: ios/deploy_config.json # 必须包含auth_key和issuer_id
androidConfig:
path: android/deploy_config.json # 必须包含client_email, client_id, private_key
track: internal # internal, alpha, beta
packageName: "com.package.name"
skslPath: android/sksl.json
appDistributionConfig:
androidBuildType: abb # abb, apk
androidTestersPath: android/testers.txt
iosTestersPath: ios/testers.txt
releaseNotesPath: release_notes.txt
useParallelUpload: true # 默认:true
enableLogFileCreation: false # 默认: false.
extraBuildParameters: null
最后,运行Uploader命令:
flutter pub run uploader
更多关于Flutter文件上传插件uploader的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文件上传插件uploader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,我可以为你提供一个关于如何使用Flutter文件上传插件 uploader
的代码示例。uploader
插件在Flutter中常用于将文件上传到服务器。下面是一个基本的示例,展示了如何使用该插件进行文件上传。
首先,确保你已经在 pubspec.yaml
文件中添加了 uploader
依赖:
dependencies:
flutter:
sdk: flutter
uploader: ^x.y.z # 请将 x.y.z 替换为最新版本号
然后运行 flutter pub get
来安装依赖。
接下来,编写一个完整的Flutter应用,展示如何使用 uploader
插件进行文件上传。
import 'package:flutter/material.dart';
import 'package:uploader/uploader.dart';
import 'dart:io';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter File Uploader Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FileUploadPage(),
);
}
}
class FileUploadPage extends StatefulWidget {
@override
_FileUploadPageState createState() => _FileUploadPageState();
}
class _FileUploadPageState extends State<FileUploadPage> {
final _formKey = GlobalKey<FormState>();
File? _selectedFile;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('File Upload Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: 'File URL (optional)'),
enabled: false, // Assuming we will use file picker for actual file
),
SizedBox(height: 16),
ElevatedButton(
onPressed: _pickFile,
label: Text('Choose File'),
),
SizedBox(height: 16),
if (_selectedFile != null)
ElevatedButton(
onPressed: _uploadFile,
label: Text('Upload File'),
),
SizedBox(height: 16),
if (_selectedFile != null)
Text('Selected File: ${_selectedFile!.path}'),
],
),
),
),
);
}
Future<void> _pickFile() async {
final result = await FilePicker.platform.pickFiles(
type: FileType.any,
);
if (result != null) {
File file = File(result.files.single.path!);
setState(() {
_selectedFile = file;
});
}
}
Future<void> _uploadFile() async {
if (_selectedFile == null) return;
var request = http.MultipartRequest('POST', Uri.parse('YOUR_UPLOAD_URL_HERE'));
var multipartFile = await http.MultipartFile.fromPath(
'file',
_selectedFile!.path,
contentType: MediaType('application', 'octet-stream'),
);
request.files.add(multipartFile);
var response = await request.send();
if (response.statusCode == 200) {
print('File uploaded successfully');
} else {
print('Failed to upload file');
}
response.stream.bytesToString().then(print);
}
}
注意事项
-
依赖项:确保你已经安装了
file_picker
插件,因为示例中使用了它来选择文件。你可以在pubspec.yaml
中添加file_picker
依赖:dependencies: file_picker: ^x.y.z # 请将 x.y.z 替换为最新版本号
-
权限:在
AndroidManifest.xml
和Info.plist
中添加必要的文件读写权限。 -
URL:将
'YOUR_UPLOAD_URL_HERE'
替换为你的实际文件上传服务器URL。 -
错误处理:示例代码中没有包含详细的错误处理逻辑,你可以根据需求添加更多的错误处理和用户反馈。
这个示例展示了如何使用 file_picker
插件选择文件,并通过 http
包进行文件上传。虽然示例中没有直接使用 uploader
插件(因为 uploader
插件可能不是最流行的选择,且示例通常使用更广泛使用的库),但你可以根据 uploader
插件的文档调整代码以适应其API。希望这个示例能帮助你理解文件上传的基本流程。