flutter - 尝试调用:颤振中的 openRead()
问题描述
我有一个不明白的案例,这里我正在尝试将文档文件上传到服务器,我一直在寻找一些参考资料,但是当我打开文件时,我得到一个错误 NoSuchMethodError: The method 'openRead'在 null 上调用。 尝试调用: openRead()。我的代码有问题吗?
这是我的代码
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:async/async.dart';
import 'package:path/path.dart';
import '../../theme.dart';
class Uploadcv extends StatefulWidget {
@override
_UploadcvState createState() => _UploadcvState();
}
class _UploadcvState extends State<Uploadcv> {
File _file;
String _namaFile;
String _filePath;
void _ambilfile() async {
var path = await FilePicker.getFilePath(
type: FileType.custom, allowedExtensions: ["pdf", "doc"]);
var file = await FilePicker.getFile(
type: FileType.custom, allowedExtensions: ["pdf", "doc"]);
setState(() {
_filePath = path.toString();
_namaFile = path.toString().split("/").last;
_file = file ?? '';
});
// print(_filePath);
// print(_namaFile);
}
void _uploadFile(File file) async {
// ignore: deprecated_member_use
var stream = new http.ByteStream(DelegatingStream.typed(file.openRead()));
var length = await file.length();
var uri = Uri.parse("myurl.com");
var request = new http.MultipartRequest("POST", uri);
var multipartFile = new http.MultipartFile('dokumen', stream, length,
filename: basename(file.path));
// add file to multipart
request.files.add(multipartFile);
var response = await request.send();
if (response.statusCode == 200) {
print('oke');
} else {
print('failed');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
leading: IconButton(
icon: Icon(
Icons.arrow_back_ios,
),
onPressed: () {
Navigator.pop(context);
},
),
backgroundColor: Colors.indigoAccent,
elevation: 0,
centerTitle: true,
title: Text(
'Resume',
),
actions: [
IconButton(
icon: Icon(Icons.file_upload),
onPressed: () {
_ambilfile();
},
)
],
),
body: Container(
margin: EdgeInsets.symmetric(horizontal: defaultMargin),
child: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_namaFile == null
? Text("nama file ..")
: Text("nama file .. : $_namaFile"),
SizedBox(
height: 15,
),
_filePath == null
? Text("nama file ..")
: Text("nama file .. : $_filePath"),
OutlinedButton(
child: Text('upload'),
onPressed: () {
_uploadFile(_file);
},
)
],
),
),
));
}
}
解决方案
推荐阅读
- android - 完成活动时跳过后堆栈中的项目?
- laravel - 如何在 vue + laravel 中查看多语言
- php - mysqli fetch_assoc() 没有发布
- android - 尝试在 json 中的空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'
- javascript - ajax 发布请求加载页面并在 url 中显示参数
- python - 尝试根据多个用户输入修改列表
- python - runsslserver 命令无法在 django 中使用 pyinstaller 构建的可执行文件
- c# - 更新 VISX 项目的 nuget 包后的依赖性问题
- office365 - 列出驱动器 API 提供资源未找到
- cypress - 获取复选框的选中值 - Material Design