首页 > 解决方案 > 我正在用颤振构建一个照片编辑应用程序,它可以在从图库中挑选的图像上应用内置的照片过滤器

问题描述

我通过每个插件的官方文档的帮助编写了代码。尽管如此,我还是收到了下面提到的错误。任何人都可以帮助解决问题吗?

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,
        ),
      ),
    );
  }
}

错误:

  1. 没有为“PickedFile”类型定义方法“readAsBytesSync”。尝试将名称更正为现有方法的名称,或定义名为“readAsBytesSync”的方法。

  2. 需要 2 个位置参数,但找到了 1 个。尝试添加缺少的参数。

3.参数类型'String'不能分配给参数类型'List'。

  1. 参数类型“文件”不能分配给参数类型“图像”。

标签: flutterfilterphotoediting

解决方案



您可以在第 1 步:imageLib.Image _image;不使用File _image;
第 2步:使用下面复制粘贴运行完整代码_file.readAsBytesSync()

 File _file = File(pickedFile.path);
_image = imageLib.decodeImage(_file.readAsBytesSync());

第三步:onPressed需要使用asyncawait

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(),
    );
  }
}

推荐阅读