Merge remote-tracking branch 'origin/main'

This commit is contained in:
2025-11-20 14:38:37 +08:00
12 changed files with 1083 additions and 51 deletions

View File

@@ -1,6 +1,12 @@
{
"configVersion": 2,
"packages": [
{
"name": "archive",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/archive-4.0.7",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "args",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/args-2.7.0",
@@ -37,6 +43,12 @@
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "colorfilter_generator",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/colorfilter_generator-0.0.8",
"packageUri": "lib/",
"languageVersion": "2.15"
},
{
"name": "common_utils",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/common_utils-2.1.0",
@@ -103,6 +115,18 @@
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "extended_image",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/extended_image-8.3.1",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{
"name": "extended_image_library",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/extended_image_library-4.0.6",
"packageUri": "lib/",
"languageVersion": "3.2"
},
{
"name": "fake_async",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/fake_async-1.3.1",
@@ -145,6 +169,18 @@
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "flex_color_picker",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flex_color_picker-3.7.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "flex_seed_scheme",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flex_seed_scheme-3.5.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "flustars_flutter3",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flustars_flutter3-3.0.0",
@@ -259,12 +295,24 @@
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "font_awesome_flutter",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/font_awesome_flutter-10.9.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "get",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/get-4.7.2",
"packageUri": "lib/",
"languageVersion": "2.15"
},
{
"name": "hand_signature",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/hand_signature-3.1.0+2",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "html",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/html-0.15.6",
@@ -277,12 +325,30 @@
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "http_client_helper",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/http_client_helper-3.0.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "http_parser",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/http_parser-4.1.2",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "image",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/image-4.5.4",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "image_editor_plus",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/image_editor_plus-1.0.6",
"packageUri": "lib/",
"languageVersion": "2.17"
},
{
"name": "image_gallery_saver_plus",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/image_gallery_saver_plus-4.0.1",
@@ -343,6 +409,12 @@
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "js",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/js-0.7.1",
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "leak_tracker",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/leak_tracker-10.0.7",
@@ -385,6 +457,12 @@
"packageUri": "lib/",
"languageVersion": "2.17"
},
{
"name": "matrix2d",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/matrix2d-1.0.4",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "meta",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/meta-1.15.0",
@@ -517,6 +595,12 @@
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "posix",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/posix-6.0.3",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "provider",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/provider-6.1.5+1",
@@ -535,6 +619,12 @@
"packageUri": "lib/",
"languageVersion": "2.14"
},
{
"name": "reorderables",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/reorderables-0.6.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "screen_brightness",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/screen_brightness-2.1.7",
@@ -577,6 +667,12 @@
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "screenshot",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/screenshot-3.0.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "shared_preferences",
"rootUri": "file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences-2.5.3",
@@ -830,7 +926,7 @@
"languageVersion": "3.6"
}
],
"generated": "2025-11-10T09:10:29.853637Z",
"generated": "2025-11-14T03:05:37.015796Z",
"generator": "pub",
"generatorVersion": "3.6.2",
"flutterRoot": "file:///Users/wxl/Desktop/flutter",

View File

@@ -1,3 +1,7 @@
archive
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/archive-4.0.7/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/archive-4.0.7/lib/
args
3.3
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/args-2.7.0/
@@ -22,6 +26,10 @@ collection
3.4
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/collection-1.19.0/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/collection-1.19.0/lib/
colorfilter_generator
2.15
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/colorfilter_generator-0.0.8/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/colorfilter_generator-0.0.8/lib/
common_utils
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/common_utils-2.1.0/
@@ -66,6 +74,14 @@ dio_web_adapter
3.3
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/dio_web_adapter-2.1.1/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/dio_web_adapter-2.1.1/lib/
extended_image
2.18
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/extended_image-8.3.1/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/extended_image-8.3.1/lib/
extended_image_library
3.2
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/extended_image_library-4.0.6/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/extended_image_library-4.0.6/lib/
fake_async
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/fake_async-1.3.1/
@@ -94,6 +110,14 @@ file_selector_windows
3.4
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/file_selector_windows-0.9.3+4/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/file_selector_windows-0.9.3+4/lib/
flex_color_picker
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flex_color_picker-3.7.1/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flex_color_picker-3.7.1/lib/
flex_seed_scheme
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flex_seed_scheme-3.5.1/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flex_seed_scheme-3.5.1/lib/
flustars_flutter3
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flustars_flutter3-3.0.0/
@@ -158,10 +182,18 @@ flutter_widget_from_html_core
3.4
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flutter_widget_from_html_core-0.16.1/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/flutter_widget_from_html_core-0.16.1/lib/
font_awesome_flutter
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/font_awesome_flutter-10.9.1/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/font_awesome_flutter-10.9.1/lib/
get
2.15
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/get-4.7.2/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/get-4.7.2/lib/
hand_signature
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/hand_signature-3.1.0+2/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/hand_signature-3.1.0+2/lib/
html
3.2
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/html-0.15.6/
@@ -170,10 +202,22 @@ http
3.4
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/http-1.5.0/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/http-1.5.0/lib/
http_client_helper
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/http_client_helper-3.0.0/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/http_client_helper-3.0.0/lib/
http_parser
3.4
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/http_parser-4.1.2/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/http_parser-4.1.2/lib/
image
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/image-4.5.4/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/image-4.5.4/lib/
image_editor_plus
2.17
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/image_editor_plus-1.0.6/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/image_editor_plus-1.0.6/lib/
image_gallery_saver_plus
3.5
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/image_gallery_saver_plus-4.0.1/
@@ -214,6 +258,10 @@ intl
3.3
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/intl-0.20.2/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/intl-0.20.2/lib/
js
3.1
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/js-0.7.1/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/js-0.7.1/lib/
leak_tracker
3.2
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/leak_tracker-10.0.7/
@@ -242,6 +290,10 @@ material_color_utilities
2.17
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/material_color_utilities-0.11.1/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/material_color_utilities-0.11.1/lib/
matrix2d
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/matrix2d-1.0.4/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/matrix2d-1.0.4/lib/
meta
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/meta-1.15.0/
@@ -330,6 +382,10 @@ plugin_platform_interface
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/plugin_platform_interface-2.1.8/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/plugin_platform_interface-2.1.8/lib/
posix
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/posix-6.0.3/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/posix-6.0.3/lib/
provider
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/provider-6.1.5+1/
@@ -342,6 +398,10 @@ rational
2.14
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/rational-2.2.3/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/rational-2.2.3/lib/
reorderables
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/reorderables-0.6.0/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/reorderables-0.6.0/lib/
screen_brightness
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/screen_brightness-2.1.7/
@@ -370,6 +430,10 @@ screen_brightness_windows
3.0
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/screen_brightness_windows-2.1.0/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/screen_brightness_windows-2.1.0/lib/
screenshot
2.12
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/screenshot-3.0.0/
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/screenshot-3.0.0/lib/
shared_preferences
3.5
file:///Users/wxl/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences-2.5.3/

View File

@@ -6,6 +6,9 @@
<excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/.pub" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/build" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />

View File

@@ -19,7 +19,7 @@ pluginManagement {
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.1.0" apply false
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
id "org.jetbrains.kotlin.android" version "2.2.21" apply false
}
include ":app"

View File

@@ -2,6 +2,9 @@ import 'package:dio/dio.dart';
import 'package:example/exif/customer_exif_Page.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_common/upload_image/look_images_widget.dart';
import 'package:flutter_common/upload_image/upload_images_tool.dart';
import 'package:get/get.dart';
import 'package:image_editor_plus/image_editor_plus.dart';
void main() {
@@ -14,34 +17,21 @@ class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
return GetMaterialApp(
title: '熊猫文旅通',
debugShowCheckedModeBanner: false,
theme: ThemeData(
// This is the theme of your application.
//
// TRY THIS: Try running your application with "flutter run". You'll see
// the application has a purple toolbar. Then, without quitting the app,
// try changing the seedColor in the colorScheme below to Colors.green
// and then invoke "hot reload" (save your changes or press the "hot
// reload" button in a Flutter-supported IDE, or press "r" if you used
// the command line to start the app).
//
// Notice that the counter didn't reset back to zero; the application
// state is not lost during the reload. To reset the state, use hot
// restart instead.
//
// This works for code too, not just values: Most code changes can be
// tested with just a hot reload.
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
appBarTheme: AppBarTheme(surfaceTintColor: Colors.transparent),
scaffoldBackgroundColor: const Color(0xffF5F5F5),
// useMaterial3: true,
// colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple)
// .copyWith(background: const Color(0xffF5F5F5)),
),
// home: const MyHomePage(title: 'Flutter Demo Home Page'),
home: CustomerExifPage(),
home: const MyHomePage(title: '编辑图片'),
);
}
}
/// Dio 最简版:网络图片转 Uint8List
Future<Uint8List?> networkImageToUint8ListWithDio(String imageUrl) async {
final dio = Dio(); // 初始化 Dio 实例
@@ -52,16 +42,13 @@ Future<Uint8List?> networkImageToUint8ListWithDio(String imageUrl) async {
options: Options(responseType: ResponseType.bytes),
);
// 响应成功且数据非空时,直接转为 Uint8List
return response.statusCode == 200 && response.data != null
? Uint8List.fromList(response.data!)
: null;
return response.statusCode == 200 && response.data != null ? Uint8List.fromList(response.data!) : null;
} catch (e) {
print('图片转换失败:$e'); // 捕获网络错误、URL 非法等异常
return null;
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
@@ -83,16 +70,15 @@ class MyHomePage extends StatefulWidget {
class _MyHomePageState extends State<MyHomePage> {
final int _counter = 0;
Future<void> _incrementCounter()async {
String imageUrl = 'https://static.cop.jingheyijia.com/wxapp-map2/upload/moment/20251029/app-bpItvFOQufCL.jpg';
Uint8List? imageBytes = await networkImageToUint8ListWithDio(imageUrl);
Future<Uint8List?> editImage({required String url})async{
Uint8List? imageBytes = await networkImageToUint8ListWithDio(url);
ImageEditor.setI18n({
'crop': '裁剪',
'rotate left': '左旋转',
'rotate right': '右旋转',
'flip': '水平翻转',
'brush': '涂抹',
'link':'链接',
'link': '链接',
'save': '保存',
'text': '文本',
'blur': '模糊',
@@ -109,8 +95,8 @@ class _MyHomePageState extends State<MyHomePage> {
'color opacity': '透明度',
'blur radius': '模糊半径',
});
if(mounted){
final editedImage = await Navigator.push(
if (mounted) {
Uint8List? editedImage = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ImageEditor(
@@ -123,11 +109,16 @@ class _MyHomePageState extends State<MyHomePage> {
),
),
);
print(editedImage);
return editedImage;
}
return null;
}
Future<void> _incrementCounter() async {
}
@override
Widget build(BuildContext context) {
// This method is rerun every time setState is called, for instance as done

View File

@@ -7,9 +7,13 @@
#include "generated_plugin_registrant.h"
#include <file_selector_linux/file_selector_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
}

View File

@@ -4,6 +4,7 @@
list(APPEND FLUTTER_PLUGIN_LIST
file_selector_linux
url_launcher_linux
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST

View File

@@ -9,6 +9,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.7"
args:
dependency: transitive
description:
name: args
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.7.0"
async:
dependency: transitive
description:
@@ -57,6 +65,22 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.0.8"
common_utils:
dependency: transitive
description:
name: common_utils
sha256: c26884339b13ff99b0739e56f4b02090c84054ed9dd3a045435cd24e7b99c2c1
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
convert:
dependency: transitive
description:
name: convert
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.2"
cross_file:
dependency: transitive
description:
@@ -73,6 +97,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.7"
csslib:
dependency: transitive
description:
name: csslib
sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.2"
cupertino_icons:
dependency: "direct main"
description:
@@ -81,6 +113,38 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.8"
dbus:
dependency: transitive
description:
name: dbus
sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.11"
decimal:
dependency: transitive
description:
name: decimal
sha256: fc706a5618b81e5b367b01dd62621def37abc096f2b46a9bd9068b64c1fa36d0
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.4"
device_info_plus:
dependency: transitive
description:
name: device_info_plus
sha256: "72d146c6d7098689ff5c5f66bcf593ac11efc530095385356e131070333e64da"
url: "https://pub.flutter-io.cn"
source: hosted
version: "11.3.0"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "7.0.2"
dio:
dependency: "direct main"
description:
@@ -129,6 +193,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.3"
file:
dependency: transitive
description:
name: file
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.flutter-io.cn"
source: hosted
version: "7.0.1"
file_selector_linux:
dependency: transitive
description:
@@ -177,11 +249,98 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.5.1"
flustars_flutter3:
dependency: transitive
description:
name: flustars_flutter3
sha256: d4f412eeb97e648dfe5cf888aa9066f6c1b1f133ff72dca264c0d23a906e3dab
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.0"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_common:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
version: "0.0.1"
flutter_easyloading:
dependency: transitive
description:
name: flutter_easyloading
sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.5"
flutter_inappwebview:
dependency: transitive
description:
name: flutter_inappwebview
sha256: "80092d13d3e29b6227e25b67973c67c7210bd5e35c4b747ca908e31eb71a46d5"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.5"
flutter_inappwebview_android:
dependency: transitive
description:
name: flutter_inappwebview_android
sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.3"
flutter_inappwebview_internal_annotations:
dependency: transitive
description:
name: flutter_inappwebview_internal_annotations
sha256: "787171d43f8af67864740b6f04166c13190aa74a1468a1f1f1e9ee5b90c359cd"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
flutter_inappwebview_ios:
dependency: transitive
description:
name: flutter_inappwebview_ios
sha256: "5818cf9b26cf0cbb0f62ff50772217d41ea8d3d9cc00279c45f8aabaa1b4025d"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.2"
flutter_inappwebview_macos:
dependency: transitive
description:
name: flutter_inappwebview_macos
sha256: c1fbb86af1a3738e3541364d7d1866315ffb0468a1a77e34198c9be571287da1
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.2"
flutter_inappwebview_platform_interface:
dependency: transitive
description:
name: flutter_inappwebview_platform_interface
sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0+1"
flutter_inappwebview_web:
dependency: transitive
description:
name: flutter_inappwebview_web
sha256: "55f89c83b0a0d3b7893306b3bb545ba4770a4df018204917148ebb42dc14a598"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.2"
flutter_inappwebview_windows:
dependency: transitive
description:
name: flutter_inappwebview_windows
sha256: "8b4d3a46078a2cdc636c4a3d10d10f2a16882f6be607962dbfff8874d1642055"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.0"
flutter_lints:
dependency: "direct dev"
description:
@@ -198,6 +357,30 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.29"
flutter_screenutil:
dependency: transitive
description:
name: flutter_screenutil
sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.9.3"
flutter_spinkit:
dependency: transitive
description:
name: flutter_spinkit
sha256: "77850df57c00dc218bfe96071d576a8babec24cf58b2ed121c83cca4a2fdce7f"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.2.2"
flutter_staggered_grid_view:
dependency: transitive
description:
name: flutter_staggered_grid_view
sha256: "19e7abb550c96fbfeb546b23f3ff356ee7c59a019a651f8f102a4ba9b7349395"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.0"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -208,6 +391,14 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_widget_from_html_core:
dependency: transitive
description:
name: flutter_widget_from_html_core
sha256: "50990ec287434a280ed15d602aa3bf6e8db9c54159762d906057a04e9493b91a"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.16.1"
font_awesome_flutter:
dependency: transitive
description:
@@ -216,6 +407,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "10.9.1"
get:
dependency: "direct main"
description:
name: get
sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.7.2"
hand_signature:
dependency: transitive
description:
@@ -224,14 +423,22 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.0+2"
html:
dependency: transitive
description:
name: html
sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.15.6"
http:
dependency: transitive
description:
name: http
sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.0"
version: "1.6.0"
http_client_helper:
dependency: transitive
description:
@@ -264,8 +471,16 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.6"
image_picker:
image_gallery_saver_plus:
dependency: transitive
description:
name: image_gallery_saver_plus
sha256: "199b9e24f8d85e98f11e3d35571ab68ae50626ad40e2bb85c84383f69a6950ad"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.1"
image_picker:
dependency: "direct main"
description:
name: image_picker
sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041"
@@ -328,6 +543,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.2.2"
intl:
dependency: transitive
description:
name: intl
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.20.2"
js:
dependency: transitive
description:
@@ -368,6 +591,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.1.1"
logging:
dependency: transitive
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
matcher:
dependency: transitive
description:
@@ -408,6 +639,30 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
nested:
dependency: transitive
description:
name: nested
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
package_info_plus:
dependency: transitive
description:
name: package_info_plus
sha256: f69da0d3189a4b4ceaeb1a3defb0f329b3b352517f52bed4290f83d4f06bc08d
url: "https://pub.flutter-io.cn"
source: hosted
version: "9.0.0"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.1"
path:
dependency: transitive
description:
@@ -520,6 +775,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.0.2"
photo_view:
dependency: transitive
description:
name: photo_view
sha256: "1fc3d970a91295fbd1364296575f854c9863f225505c28c46e0a03e48960c75e"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.15.0"
platform:
dependency: transitive
description:
@@ -544,6 +807,30 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.0.3"
provider:
dependency: transitive
description:
name: provider
sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.5+1"
pull_to_refresh:
dependency: transitive
description:
name: pull_to_refresh
sha256: bbadd5a931837b57739cf08736bea63167e284e71fb23b218c8c9a6e042aad12
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
rational:
dependency: transitive
description:
name: rational
sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.3"
reorderables:
dependency: transitive
description:
@@ -552,6 +839,62 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.0"
screen_brightness:
dependency: transitive
description:
name: screen_brightness
sha256: "5f70754028f169f059fdc61112a19dcbee152f8b293c42c848317854d650cba3"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.7"
screen_brightness_android:
dependency: transitive
description:
name: screen_brightness_android
sha256: d34f5321abd03bc3474f4c381f53d189117eba0b039eac1916aa92cca5fd0a96
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.3"
screen_brightness_ios:
dependency: transitive
description:
name: screen_brightness_ios
sha256: "2493953340ecfe8f4f13f61db50ce72533a55b0bbd58ba1402893feecf3727f5"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.2"
screen_brightness_macos:
dependency: transitive
description:
name: screen_brightness_macos
sha256: "4edf330ad21078686d8bfaf89413325fbaf571dcebe1e89254d675a3f288b5b9"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
screen_brightness_ohos:
dependency: transitive
description:
name: screen_brightness_ohos
sha256: a93a263dcd39b5c56e589eb495bcd001ce65cdd96ff12ab1350683559d5c5bb7
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.2"
screen_brightness_platform_interface:
dependency: transitive
description:
name: screen_brightness_platform_interface
sha256: "737bd47b57746bc4291cab1b8a5843ee881af499514881b0247ec77447ee769c"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
screen_brightness_windows:
dependency: transitive
description:
name: screen_brightness_windows
sha256: d3518bf0f5d7a884cee2c14449ae0b36803802866de09f7ef74077874b6b2448
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
screenshot:
dependency: transitive
description:
@@ -560,6 +903,62 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.0"
shared_preferences:
dependency: transitive
description:
name: shared_preferences
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.5.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "5bcf0772a761b04f8c6bf814721713de6f3e5d9d89caf8d3fe031b02a342379e"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.11"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.5.4"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.1"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.1"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.3"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.1"
sky_engine:
dependency: transitive
description: flutter
@@ -573,6 +972,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.10.0"
sp_util:
dependency: transitive
description:
name: sp_util
sha256: "9da43dce5de79c17a787d0626bf01538d63090ca32521200d22a232171c495dc"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.3"
stack_trace:
dependency: transitive
description:
@@ -581,6 +988,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.12.0"
sticky_headers:
dependency: transitive
description:
name: sticky_headers
sha256: "9b3dd2cb0fd6a7038170af3261f855660cbb241cb56c501452cb8deed7023ede"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.0+2"
stream_channel:
dependency: transitive
description:
@@ -597,6 +1012,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
synchronized:
dependency: transitive
description:
name: synchronized
sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.3.0+3"
term_glyph:
dependency: transitive
description:
@@ -613,6 +1036,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.3"
transparent_image:
dependency: transitive
description:
name: transparent_image
sha256: e8991d955a2094e197ca24c645efec2faf4285772a4746126ca12875e54ca02f
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.1"
typed_data:
dependency: transitive
description:
@@ -621,6 +1052,70 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.4.0"
url_launcher:
dependency: transitive
description:
name: url_launcher
sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.3.2"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
sha256: "0aedad096a85b49df2e4725fa32118f9fa580f3b14af7a2d2221896a02cd5656"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.3.17"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.3.3"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.2"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.1"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.4"
vector_math:
dependency: transitive
description:
@@ -629,6 +1124,46 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.4"
video_player:
dependency: transitive
description:
name: video_player
sha256: "0d55b1f1a31e5ad4c4967bfaa8ade0240b07d20ee4af1dfef5f531056512961a"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.10.0"
video_player_android:
dependency: transitive
description:
name: video_player_android
sha256: "28dcc4122079f40f93a0965b3679aff1a5f4251cf79611bd8011f937eb6b69de"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.8.4"
video_player_avfoundation:
dependency: transitive
description:
name: video_player_avfoundation
sha256: f9a780aac57802b2892f93787e5ea53b5f43cc57dc107bee9436458365be71cd
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.8.4"
video_player_platform_interface:
dependency: transitive
description:
name: video_player_platform_interface
sha256: cf2a1d29a284db648fd66cbd18aacc157f9862d77d2cc790f6f9678a46c1db5a
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.4.0"
video_player_web:
dependency: transitive
description:
name: video_player_web
sha256: "9f3c00be2ef9b76a95d94ac5119fb843dca6f2c69e6c9968f6f2b6c9e7afbdeb"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.0"
vm_service:
dependency: transitive
description:
@@ -637,14 +1172,46 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "14.3.0"
wakelock_plus:
dependency: transitive
description:
name: wakelock_plus
sha256: "9296d40c9adbedaba95d1e704f4e0b434be446e2792948d0e4aa977048104228"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.4.0"
wakelock_plus_platform_interface:
dependency: transitive
description:
name: wakelock_plus_platform_interface
sha256: "036deb14cd62f558ca3b73006d52ce049fabcdcb2eddfe0bf0fe4e8a943b5cf2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
web:
dependency: transitive
description:
name: web
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.5.1"
version: "1.1.1"
win32:
dependency: transitive
description:
name: win32
sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.10.1"
win32_registry:
dependency: transitive
description:
name: win32_registry
sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.5"
xdg_directories:
dependency: transitive
description:

View File

@@ -28,6 +28,8 @@ environment:
# the latest version available on pub.dev. To see which dependencies have newer
# versions available, run `flutter pub outdated`.
dependencies:
flutter_common:
path: ../
flutter:
sdk: flutter
@@ -35,15 +37,12 @@ dependencies:
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.8
image_editor_plus: ^1.0.6
get: ^4.6.5
dio: ^5.9.0
image_picker: ^1.1.0 #相册单选
# native_exif: ^0.6.2
# exif: ^3.3.0
flutter_common:
git:
url: https://code.keplerjai.com/wangliankun/flutter_common.git
dev_dependencies:
flutter_test:
sdk: flutter

View File

@@ -1,21 +1,43 @@
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_common/upload_image/ossUtil.dart';
import 'package:get/get.dart';
import 'package:photo_view/photo_view.dart';
import 'package:image_editor_plus/image_editor_plus.dart';
import 'package:path_provider/path_provider.dart';
import 'package:photo_view/photo_view_gallery.dart';
class LookImagesTool {
static lookImages({
required List<String> listData,
int? currentPage,
void Function(String)? onCallBack,
String? oSSAccessKeyId,
Function? callBack,
bool? isShowEdit,
String? policy,
String? callback,
String? signature,
String? ossDirectory,
String? ossHost,
}) async {
showDialog(
context: Get.context!,
useSafeArea: false,
builder: (_) {
return LookImagesWidget(
listData: listData,
currentPage: currentPage,
);
listData: listData,
currentPage: currentPage,
onCallBack: onCallBack,
oSSAccessKeyId: oSSAccessKeyId,
policy: policy,
callback: callback,
isShowEdit: isShowEdit,
signature: signature,
ossDirectory: ossDirectory,
ossHost: ossHost);
});
}
}
@@ -23,11 +45,27 @@ class LookImagesTool {
class LookImagesWidget extends StatefulWidget {
final List<String> listData;
final int? currentPage;
final String? oSSAccessKeyId;
final String? policy;
final String? callback;
final String? signature;
final String? ossDirectory;
final String? ossHost;
final void Function(String)? onCallBack;
final bool? isShowEdit;
const LookImagesWidget({
super.key,
required this.listData,
this.currentPage,
this.oSSAccessKeyId,
this.policy,
this.callback,
this.signature,
this.ossDirectory,
this.ossHost,
this.onCallBack,
this.isShowEdit,
});
@override
@@ -39,6 +77,132 @@ class _LookImagesWidgetState extends State<LookImagesWidget> {
late int currentPage;
late int initialPage = 0;
/// Dio 最简版:网络图片转 Uint8List
Future<Uint8List?> networkImageToUint8ListWithDio(String imageUrl) async {
final dio = Dio(); // 初始化 Dio 实例
try {
// 发起 GET 请求,响应类型设为字节数组(关键)
final response = await dio.get<List<int>>(
imageUrl,
options: Options(responseType: ResponseType.bytes),
);
// 响应成功且数据非空时,直接转为 Uint8List
return response.statusCode == 200 && response.data != null ? Uint8List.fromList(response.data!) : null;
} catch (e) {
print('图片转换失败:$e'); // 捕获网络错误、URL 非法等异常
return null;
}
}
Future<Uint8List?> editImage({required String url}) async {
Uint8List? imageBytes = await networkImageToUint8ListWithDio(url);
ImageEditor.setI18n({
'crop': '裁剪',
'rotate left': '左旋转',
'rotate right': '右旋转',
'flip': '水平翻转',
'brush': '涂抹',
'link': '链接',
'save': '保存',
'text': '文本',
'blur': '模糊',
'filter': '滤镜',
'size': '大小',
'color': '颜色',
'background color': '背景颜色',
'background opacity': '背景透明度',
'reset': '重置',
'freeform': '自由裁剪',
'remove': '移除',
'emoji': '表情',
'slider color': '滑块颜色',
'color opacity': '透明度',
'blur radius': '模糊半径',
});
if (mounted) {
Uint8List? editedImage = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ImageEditor(
image: imageBytes,
blurOption: null,
filtersOption: null,
brushOption: null,
textOption: null,
emojiOption: null,
),
),
);
return editedImage;
}
return null;
}
/// 可选:根据字节头自动识别文件后缀(如图片、视频)
String getExtension(Uint8List uint8List) {
if (uint8List.length < 4) return "bin"; // 无法识别时返回二进制后缀
// PNG 头89 50 4E 47
if (uint8List[0] == 0x89 && uint8List[1] == 0x50 && uint8List[2] == 0x4E && uint8List[3] == 0x47) {
return "png";
}
// JPG 头FF D8 FF
else if (uint8List[0] == 0xFF && uint8List[1] == 0xD8 && uint8List[2] == 0xFF) {
return "jpg";
}
// MP4 头00 00 00 18 66 74 79 70
else if (uint8List.length >= 8 &&
uint8List[0] == 0x00 &&
uint8List[1] == 0x00 &&
uint8List[2] == 0x00 &&
uint8List[3] == 0x18 &&
uint8List[4] == 0x66 &&
uint8List[5] == 0x74 &&
uint8List[6] == 0x79 &&
uint8List[7] == 0x70) {
return "mp4";
}
// 其他格式可自行扩展(如 GIF、PDF 等)
else {
return "bin";
}
}
/// Uint8List 转临时 File 并且上传到oss并返回访问路径
Future<String?> uint8ListToTempFile(Uint8List uint8List, {String fileName = "temp_file"}) async {
if (uint8List.isEmpty) return null;
try {
// 1. 获取临时存储目录(跨平台兼容)
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
// 2. 拼接文件路径(可自定义后缀,如 .png、.mp4 等)
File tempFile = File("$tempPath/$fileName.${getExtension(uint8List)}"); // 自动识别后缀(可选)
// 3. 将 Uint8List 写入文件
await tempFile.writeAsBytes(uint8List);
// print("临时文件路径:${tempFile.path}");
String imageUrl = await UploadOss.upload(
tempFile.path,
fileType: getExtension(uint8List),
oSSAccessKeyId: widget.oSSAccessKeyId ?? '',
ossHost: widget.ossHost ?? '',
ossDirectory: widget.ossDirectory ?? '',
policy: widget.policy ?? '',
callback: widget.callback ?? '',
signature: widget.signature ?? '',
);
// print("上传后的访问路径:$imageUrl");
return imageUrl;
} catch (e) {
print("转换临时文件失败:$e");
return null;
}
}
@override
void initState() {
listData = widget.listData;
@@ -46,7 +210,6 @@ class _LookImagesWidgetState extends State<LookImagesWidget> {
initialPage = 0;
currentPage = 0;
} else {
// initialPage = 0;
currentPage = widget.currentPage ?? 0;
}
super.initState();
@@ -77,6 +240,20 @@ class _LookImagesWidgetState extends State<LookImagesWidget> {
left: 15,
top: 50,
child: GestureDetector(onTap: () => Get.back(), child: Icon(Icons.arrow_back_ios, color: Colors.white))),
Positioned(
right: 15,
top: 50,
child: GestureDetector(
onTap: () async {
Uint8List? imageFile = await editImage(url: listData[currentPage]);
String? url = await uint8ListToTempFile(imageFile ?? Uint8List(0));
if(widget.onCallBack != null){
widget.onCallBack!(url??'');
}
},
child: Visibility(
visible: widget.isShowEdit??false,
child: Icon(Icons.edit, color: Colors.white)))),
//图片张数指示器
Positioned(
left: 0,

View File

@@ -1,6 +1,14 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
archive:
dependency: transitive
description:
name: archive
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.7"
args:
dependency: transitive
description:
@@ -49,6 +57,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.19.0"
colorfilter_generator:
dependency: transitive
description:
name: colorfilter_generator
sha256: ccc2995e440b1d828d55d99150e7cad64624f3cb4a1e235000de3f93cf10d35c
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.0.8"
common_utils:
dependency: transitive
description:
@@ -137,6 +153,22 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
extended_image:
dependency: transitive
description:
name: extended_image
sha256: "69d4299043334ecece679996e47d0b0891cd8c29d8da0034868443506f1d9a78"
url: "https://pub.flutter-io.cn"
source: hosted
version: "8.3.1"
extended_image_library:
dependency: transitive
description:
name: extended_image_library
sha256: e61dafd94400fff6ef7ed1523d445ff3af137f198f3228e4a3107bc5b4bec5d1
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.6"
fake_async:
dependency: transitive
description:
@@ -193,6 +225,22 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.3+4"
flex_color_picker:
dependency: transitive
description:
name: flex_color_picker
sha256: "8f753a1a026a13ea5cc5eddbae3ceb886f2537569ab2e5208efb1e3bb5af72ff"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.7.1"
flex_seed_scheme:
dependency: transitive
description:
name: flex_seed_scheme
sha256: b06d8b367b84cbf7ca5c5603c858fa5edae88486c4e4da79ac1044d73b6c62ec
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.5.1"
flustars_flutter3:
dependency: "direct main"
description:
@@ -336,6 +384,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.16.1"
font_awesome_flutter:
dependency: transitive
description:
name: font_awesome_flutter
sha256: b738e35f8bb4957896c34957baf922f99c5d415b38ddc8b070d14b7fa95715d4
url: "https://pub.flutter-io.cn"
source: hosted
version: "10.9.1"
get:
dependency: "direct main"
description:
@@ -344,6 +400,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.7.2"
hand_signature:
dependency: transitive
description:
name: hand_signature
sha256: "05b40d3b2d1885a5dda126f26db386660aa46e497b63c96feb91d3198a667eea"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.0+2"
html:
dependency: transitive
description:
@@ -360,6 +424,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.0"
http_client_helper:
dependency: transitive
description:
name: http_client_helper
sha256: "8a9127650734da86b5c73760de2b404494c968a3fd55602045ffec789dac3cb1"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.0"
http_parser:
dependency: transitive
description:
@@ -368,6 +440,22 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.1.2"
image:
dependency: transitive
description:
name: image
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.5.4"
image_editor_plus:
dependency: "direct main"
description:
name: image_editor_plus
sha256: "0108c24756e7867f9a325c8f1d15ff29ca0a40aae03517e7d55dee6135f9b3e6"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.6"
image_gallery_saver_plus:
dependency: "direct main"
description:
@@ -448,6 +536,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.20.2"
js:
dependency: transitive
description:
name: js
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.1"
leak_tracker:
dependency: transitive
description:
@@ -504,6 +600,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.11.1"
matrix2d:
dependency: transitive
description:
name: matrix2d
sha256: "188718dd3bc2a31e372cfd0791b0f77f4f13ea76164147342cc378d9132949e7"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.4"
meta:
dependency: transitive
description:
@@ -553,7 +657,7 @@ packages:
source: hosted
version: "1.9.0"
path_provider:
dependency: transitive
dependency: "direct main"
description:
name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
@@ -680,6 +784,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.8"
posix:
dependency: transitive
description:
name: posix
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.0.3"
provider:
dependency: "direct main"
description:
@@ -704,6 +816,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.3"
reorderables:
dependency: transitive
description:
name: reorderables
sha256: "004a886e4878df1ee27321831c838bc1c976311f4ca6a74ce7d561e506540a77"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.0"
screen_brightness:
dependency: "direct main"
description:
@@ -760,6 +880,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
screenshot:
dependency: transitive
description:
name: screenshot
sha256: "63817697a7835e6ce82add4228e15d233b74d42975c143ad8cfe07009fab866b"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.0"
shared_preferences:
dependency: transitive
description:

View File

@@ -38,6 +38,8 @@ dependencies:
url_launcher: ^6.1.10
flutter_inappwebview: ^6.1.5
device_info_plus: ^11.3.0
image_editor_plus: ^1.0.6
path_provider: ^2.1.5
dev_dependencies:
flutter_test: