flutter - 我正在用颤振构建一个照片编辑应用程序,它可以在从图库中挑选的图像上应用内置的照片过滤器
问题描述
我通过每个插件的官方文档的帮助编写了代码。尽管如此,我还是收到了下面提到的错误。任何人都可以帮助解决问题吗?
import 'dart:html';
import 'package:flutter/material.dart';
import 'package:flutter/semantics.dart';
import 'package:path/path.dart';
import 'package:photofilters/photofilters.dart';
import 'package:image_picker/image_picker.dart';
import 'package:image/image.dart' as imageLib;
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
File _image;
String fileName;
Filter _filter;
List<Filter> filters = presetFiltersList;
final picker = ImagePicker();
Future getImage() async {
final pickedFile = await picker.getImage(source: ImageSource.gallery);
fileName = basename(pickedFile.path);
var image = imageLib.decodeImage(pickedFile.readAsBytesSync());
setState(() {
if (pickedFile != null) {
_image = File(pickedFile.path);
} else {
print('No image selected.');
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
getImage();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PhotoFilterSelector(
image: _image,
filters: filters,
filename: fileName,
loader: Center(child: CircularProgressIndicator()),
),
));
},
label: Text("+"),
icon: Icon(
Icons.print,
color: Colors.black,
),
),
);
}
}
错误:
没有为“PickedFile”类型定义方法“readAsBytesSync”。尝试将名称更正为现有方法的名称,或定义名为“readAsBytesSync”的方法。
需要 2 个位置参数,但找到了 1 个。尝试添加缺少的参数。
3.参数类型'String'不能分配给参数类型'List'。
- 参数类型“文件”不能分配给参数类型“图像”。
解决方案
您可以在第 1 步:imageLib.Image _image;
不使用File _image;
第 2步:使用下面复制粘贴运行完整代码_file.readAsBytesSync()
File _file = File(pickedFile.path);
_image = imageLib.decodeImage(_file.readAsBytesSync());
第三步:onPressed
需要使用async
和await
onPressed: () async{
await getImage();
工作演示
完整代码
import 'package:flutter/material.dart';
import 'dart:io';
import 'package:flutter/semantics.dart';
import 'package:path/path.dart';
import 'package:photofilters/photofilters.dart';
import 'package:image_picker/image_picker.dart';
import 'package:image/image.dart' as imageLib;
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
imageLib.Image _image;
//File _image;
String fileName;
Filter _filter;
List<Filter> filters = presetFiltersList;
final picker = ImagePicker();
Future getImage() async {
PickedFile pickedFile = await picker.getImage(source: ImageSource.gallery);
fileName = basename(pickedFile.path);
File _file = File(pickedFile.path);
_image = imageLib.decodeImage(_file.readAsBytesSync());
setState(() {
if (pickedFile != null) {
//_image = File(pickedFile.path);
} else {
print('No image selected.');
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton.extended(
onPressed: () async{
await getImage();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PhotoFilterSelector(
title: Text("Photo Filter Example"),
image: _image,
filters: filters,
filename: fileName,
loader: Center(child: CircularProgressIndicator()),
),
));
},
label: Text("+"),
icon: Icon(
Icons.print,
color: Colors.black,
),
),
);
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(),
);
}
}
推荐阅读
- javascript - 无法从单个项目中的不同文件插入 MongoDB 实例
- nodes - Sendgrid - 如何将“内容传输编码”设置为“7bit”
- ios - 使用完成处理程序快速访问 VNRecognizeTextRequest 中的进度值
- javascript - 在 HTML5 中拖放个人资料头像
- javascript - Material UI 自动完成实现,带有包含对象数组(ID 和标签)的选项
- java - 如何检查一个类型是否是Java中的原始数组?
- c++ - 从 clang-tidy 检查中排除第三方
- wxpython - wxpython:如何直接从菜单栏打开对话框
- java - 我应该用一个字段制作 Spring Model 类吗?
- asp.net-core - 安装 Visual Studio 2019 版本 16.4 后无法使用 .NET Core 加载项目