首页 > 解决方案 > 尝试调用:颤振中的 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);
                  },
                )
              ],
            ),
          ),
        ));
  }
}

标签: flutterdartflutter-dependencies

解决方案


推荐阅读