PlatformException,在尝试模拟集成测试的file_picker后无效参数,Flutter



我已经在我的应用程序中使用file_picker,现在我创建一个集成测试。我一直在寻找一种模拟file_picker或依赖项的方法,结果如下:

import 'dart:io';
import 'dart:typed_data';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:path_provider/path_provider.dart';
void main() async {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
setUp(() {
mockFilePicker();
});
testWidgets("test", (WidgetTester tester) async {
// await app.main();
// .. test case ..
});
}
mockFilePicker() {
const MethodChannel channel =
MethodChannel('miguelruivo.flutter.plugins.filepicker');
channel.setMockMethodCallHandler((MethodCall methodCall) async {
print("MockMethodChannel run");
ByteData data = await rootBundle.load('assets/images/ic_bill.png');
Uint8List bytes = data.buffer.asUint8List();
Directory tempDir = await getTemporaryDirectory();
File file = await File(
'${tempDir.path}/image.png',
).writeAsBytes(bytes);
PlatformFile platformFile = PlatformFile(
name: "image.png", size: file.lengthSync(), path: file.path);
FilePickerResult filePickerResult = FilePickerResult([platformFile]);
return filePickerResult;
});
}
使用该代码,我得到如下错误:

[MethodChannelFilePicker]平台异常:PlatformException(error, Invalid argument: Instance of 'FilePickerResult', null, null)

如何解决这个问题?

看起来通道方法调用期望一个映射列表而不是FilePickerResult对象。地图的格式为:

{
'name': String,
'path': String,
'bytes': Uint8List,
'size': int,
}

下面的模拟通道为我工作:

const MethodChannel channelFilePicker =
MethodChannel('miguelruivo.flutter.plugins.filepicker');
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(channelFilePicker,
(MethodCall methodCall) async {
final ByteData data = await rootBundle.load('assets/icon/Icon.png');
final Uint8List bytes = data.buffer.asUint8List();
final Directory tempDir = await getTemporaryDirectory();
final File file = await File(
'${tempDir.path}/tmp.tmp',
).writeAsBytes(bytes);
print(file.path);
return [
{
'name': "Icon.png",
'path': file.path,
'bytes': bytes,
'size': bytes.lengthInBytes,
}
];
});

最新更新