如何解决我正在使用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。无法将参数类型“字符串”分配给参数类型“列表”。
- 不能将参数类型“文件”分配给参数类型“图像”。
解决方法
您可以在下面复制粘贴运行完整代码
步骤1:使用imageLib.Image _image;
而不是File _image;
步骤2:使用_file.readAsBytesSync()
File _file = File(pickedFile.path);
_image = imageLib.decodeImage(_file.readAsBytesSync());
第3步: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(),);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。