zoukankan      html  css  js  c++  java
  • Flutter 获取本地图片并剪切

    安装依赖

    dependencies:
      ...
      image_picker:
      image_cropper
    

    androidappsrcmainAndroidManifest.xml

    将UCropActivity添加到AndroidManifest.xml中

     <activity android:name="com.yalantis.ucrop.UCropActivity" android:screenOrientation="portrait" android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
    

    androidgradle.properties

    添加AndroidX兼容

    org.gradle.jvmargs=-Xmx1536M
    android.enableJetifier=true
    android.useAndroidX=true
    

    libmain.dart

    import 'package:flutter/material.dart';
    import 'dart:async';
    import 'dart:io';
    
    import 'package:image_cropper/image_cropper.dart';
    import 'package:image_picker/image_picker.dart';
    
    void main() => runApp(new MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'ImageCropper',
          home: MyHomePage(
            title: 'ImageCropper',
          ),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      final String title;
    
      MyHomePage({this.title});
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    enum AppState {
      free,
      picked,
      cropped,
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      AppState state;
      File imageFile;
    
      @override
      void initState() {
        super.initState();
        state = AppState.free;
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: imageFile != null ? Image.file(imageFile) : Container(),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              if (state == AppState.free)
                _pickImage();
              else if (state == AppState.picked)
                _cropImage();
              else if (state == AppState.cropped) _clearImage();
            },
            child: _buildButtonIcon(),
          ),
        );
      }
    
      Widget _buildButtonIcon() {
        if (state == AppState.free)
          return Icon(Icons.add);
        else if (state == AppState.picked)
          return Icon(Icons.crop);
        else if (state == AppState.cropped)
          return Icon(Icons.clear);
        else
          return Container();
      }
    
      Future<Null> _pickImage() async {
        imageFile = await ImagePicker.pickImage(source: ImageSource.gallery);
        if (imageFile != null) {
          setState(() {
            state = AppState.picked;
          });
        }
      }
    
      Future<Null> _cropImage() async {
        File croppedFile = await ImageCropper.cropImage(
          sourcePath: imageFile.path,
          toolbarTitle: 'Cropper',
          toolbarColor: Colors.blue,
          toolbarWidgetColor: Colors.white,
        );
        if (croppedFile != null) {
          imageFile = croppedFile;
          setState(() {
            state = AppState.cropped;
          });
        }
      }
    
      Future<Null> _saveImage() async {}
    
      void _clearImage() {
        imageFile = null;
        setState(() {
          state = AppState.free;
        });
      }
    }
    

    更多

  • 相关阅读:
    RAID技术
    Mysql的用户基本操作
    LNMP之Php的安装配置
    java 实现图片拼接
    java 实现Serv-U FTP 和 SFTP 上传 下载
    Image合并添加文字内容
    AOP切面用于系统日志
    网页评论实现
    java web 实体类生成
    java接口调试思想
  • 原文地址:https://www.cnblogs.com/ajanuw/p/11298775.html
Copyright © 2011-2022 走看看