引入image_gallery_saver插件
pubspec.yaml文件中引入:
image_gallery_saver: ^1.2.2 #图片保存到本地
权限设置
(我没有开启读写权限,也可以保存成功)

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('保存成功');
}
}
网友评论