美文网首页
flutter 保存图片到本地

flutter 保存图片到本地

作者: 冰点雨 | 来源:发表于2020-01-19 10:53 被阅读0次

引入image_gallery_saver插件
pubspec.yaml文件中引入:

image_gallery_saver: ^1.2.2 #图片保存到本地

权限设置

(我没有开启读写权限,也可以保存成功)


ada4cc31bb5b0e504c24c5549711b8c.png

Android配置
1.文件地址:android/app/src/profile/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gjr.flutter_screenshotswatermark">
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>

    <!--开启读写storage权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    
</manifest>

2.文件地址:android/app/src/main/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gjr.flutter_screenshotswatermark">

    <!--开启读写storage权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="flutter_screenshotswatermark"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

三方git地址:https://pub.flutter-io.cn/packages/image_gallery_saver

使用

 var response = await Dio().get(url, options: Options(responseType: ResponseType.bytes));
    final result = await ImageGallerySaver.saveImage(Uint8List.fromList(response.data));
    print('result:$result');

    if(Utils.isEmpty(result)){
      print('保存失败');
    }else{
      print('保存成功');
    }

demo所有代码


import 'dart:typed_data';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_screenshotswatermark/commons/constants.dart';
import 'package:flutter_screenshotswatermark/commons/utils.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';

class SaveImagePage extends StatefulWidget {
  @override
  SaveImagePageState createState() => new SaveImagePageState();
}

class SaveImagePageState extends State<SaveImagePage> {

  String url = "https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=a62e824376d98d1069d40a31113eb807/838ba61ea8d3fd1fc9c7b6853a4e251f94ca5f46.jpg";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('保存图片'),
        ),
        body: Container(
          color: Colors.white,
          alignment: Alignment.topCenter,
          child: Column(
            children: <Widget>[
            Image.network(
            url,
            width: AutoSize.w_400,
            height: AutoSize.w_400,
            fit: BoxFit.fill,
          ),
          Container(
            color: Colors.green,
            margin: EdgeInsets.all(AutoSize.w_20),
            child: FlatButton(
              onPressed: () {
                _saveImage();
              },
              child: Text(
                '保存图片',
                style: TextStyle(
                    color: Colors.white
                ),
              ),
            ),
          )
          ],
        )
    ));
  }



  void _saveImage() async {
    var response = await Dio().get(url, options: Options(responseType: ResponseType.bytes));
    final result = await ImageGallerySaver.saveImage(Uint8List.fromList(response.data));
    print('result:$result');

    if(Utils.isEmpty(result)){
      print('保存失败');
    }else{
      print('保存成功');
    }
  }

相关文章

网友评论

      本文标题:flutter 保存图片到本地

      本文链接:https://www.haomeiwen.com/subject/wtkrzctx.html