소스 검색

添加海报保存

tags/0.0.1
Weller 4 년 전
부모
커밋
50fbe82ea4
17개의 변경된 파일503개의 추가작업 그리고 761개의 파일을 삭제
  1. BIN
     
  2. +0
    -1
      .dart_tool/build_resolvers/sdk.sum.deps
  3. +0
    -620
      .dart_tool/package_config.json
  4. +58
    -0
      example/android/tmpmob/ShareSDK/assets/ShareSDK.xml
  5. +1
    -0
      lib/pages/favorite_page/favorite_page.dart
  6. +12
    -0
      lib/pages/goods_share_page/goods_share_bloc.dart
  7. +1
    -0
      lib/pages/goods_share_page/goods_share_editor/goods_share_preview.dart
  8. +83
    -11
      lib/pages/goods_share_page/goods_share_image/goods_share_image.dart
  9. +7
    -1
      lib/pages/goods_share_page/goods_share_link/goods_share_link.dart
  10. +6
    -1
      lib/pages/goods_share_page/goods_share_miniprogram/goods_share_miniprogram.dart
  11. +5
    -1
      lib/pages/goods_share_page/goods_share_page.dart
  12. +52
    -0
      lib/pages/goods_share_page/models/goods_share_poster_model.dart
  13. +68
    -0
      lib/pages/goods_share_page/models/goods_share_poster_style_model.dart
  14. +106
    -79
      lib/pages/goods_share_page/widgets/goods_share_edit.dart
  15. +34
    -24
      lib/template/goods_share_template/goods_share_template.dart
  16. +5
    -1
      lib/widgets/share/models/share_data_model.dart
  17. +65
    -22
      lib/widgets/share/share_alert.dart

+ 0
- 1
.dart_tool/build_resolvers/sdk.sum.deps 파일 보기

@@ -1 +0,0 @@
{"sdk":"2.7.2 (Mon Mar 23 22:11:27 2020 +0100) on \"macos_x64\"","analyzer":"/Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/analyzer-0.39.14","build_resolvers":"/Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/build_resolvers-1.3.11"}

+ 0
- 620
.dart_tool/package_config.json 파일 보기

@@ -1,620 +0,0 @@
{
"configVersion": 2,
"packages": [
{
"name": "archive",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/archive-2.0.13",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "args",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/args-1.6.0",
"packageUri": "lib/",
"languageVersion": "2.3"
},
{
"name": "async",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/async-2.4.1",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
"name": "bloc",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/bloc-4.0.0",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "boolean_selector",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/boolean_selector-2.0.0",
"packageUri": "lib/",
"languageVersion": "2.4"
},
{
"name": "cached_network_image",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-2.2.0+1",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "charcode",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.1.3",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "clock",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/clock-1.0.1",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "collection",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.12",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "connectivity",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/connectivity-0.4.9+3",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "connectivity_for_web",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/connectivity_for_web-0.3.1+2",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "connectivity_macos",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/connectivity_macos-0.1.0+5",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "connectivity_platform_interface",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/connectivity_platform_interface-1.0.6",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "convert",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/convert-2.1.1",
"packageUri": "lib/",
"languageVersion": "1.17"
},
{
"name": "crypto",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.1.4",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "device_info",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/device_info-0.4.2+8",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "device_info_platform_interface",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/device_info_platform_interface-1.0.1",
"packageUri": "lib/",
"languageVersion": "2.7"
},
{
"name": "dio",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/dio-3.0.10",
"packageUri": "lib/",
"languageVersion": "2.4"
},
{
"name": "equatable",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/equatable-1.2.5",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "event_bus",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/event_bus-1.1.1",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "ffi",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/ffi-0.1.3",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "file",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/file-5.2.1",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
"name": "flutter",
"rootUri": "file:///Users/fnuser/Documents/flutter-sdk/packages/flutter",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
"name": "flutter_alibc",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_alibc-0.0.15",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "flutter_bloc",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_bloc-4.0.1",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "flutter_cache_manager",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_cache_manager-1.4.2",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "flutter_cupertino_date_picker",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_cupertino_date_picker-1.0.26+2",
"packageUri": "lib/",
"languageVersion": "1.19"
},
{
"name": "flutter_native_image",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_native_image-0.0.5+2",
"packageUri": "lib/",
"languageVersion": "1.19"
},
{
"name": "flutter_page_indicator",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_page_indicator-0.0.3",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "flutter_plugin_android_lifecycle",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_plugin_android_lifecycle-1.0.11",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "flutter_screenutil",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_screenutil-1.1.0",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "flutter_swiper",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/flutter_swiper-1.1.6",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "flutter_test",
"rootUri": "file:///Users/fnuser/Documents/flutter-sdk/packages/flutter_test",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
"name": "flutter_web_plugins",
"rootUri": "file:///Users/fnuser/Documents/flutter-sdk/packages/flutter_web_plugins",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "fluttertoast",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/fluttertoast-4.0.1",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "http",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/http-0.12.2",
"packageUri": "lib/",
"languageVersion": "2.4"
},
{
"name": "http_parser",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/http_parser-3.1.4",
"packageUri": "lib/",
"languageVersion": "2.3"
},
{
"name": "image",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/image-2.1.12",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "image_cropper",
"rootUri": "file:///Users/fnuser/.pub-cache/git/Image_Cropper-e32f2264f86a27a2f5d7a7a5e26c6154eaf5798e/",
"packageUri": "lib/",
"languageVersion": "1.20"
},
{
"name": "image_picker",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/image_picker-0.6.7+11",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "image_picker_platform_interface",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/image_picker_platform_interface-1.1.1",
"packageUri": "lib/",
"languageVersion": "2.5"
},
{
"name": "intl",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/intl-0.16.1",
"packageUri": "lib/",
"languageVersion": "2.5"
},
{
"name": "jdsdk",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/jdsdk-0.0.1",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "matcher",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/matcher-0.12.6",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
"name": "meta",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/meta-1.1.8",
"packageUri": "lib/",
"languageVersion": "1.12"
},
{
"name": "nested",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/nested-0.0.4",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
"name": "package_info",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/package_info-0.4.3",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "path",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/path-1.6.4",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "path_provider",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.6.18",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "path_provider_linux",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/path_provider_linux-0.0.1+2",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "path_provider_macos",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/path_provider_macos-0.0.4+4",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "path_provider_platform_interface",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/path_provider_platform_interface-1.0.3",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "path_provider_windows",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/path_provider_windows-0.0.4+1",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "pedantic",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/pedantic-1.9.0",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "permission_handler",
"rootUri": "file:///Users/fnuser/.pub-cache/git/permission_handler-b8c45c4c20221ac39fe083113fc360cc632f33a4/",
"packageUri": "lib/",
"languageVersion": "2.7"
},
{
"name": "permission_handler_platform_interface",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/permission_handler_platform_interface-2.0.1",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "petitparser",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/petitparser-2.4.0",
"packageUri": "lib/",
"languageVersion": "2.4"
},
{
"name": "platform",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/platform-2.2.1",
"packageUri": "lib/",
"languageVersion": "1.24"
},
{
"name": "plugin_platform_interface",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/plugin_platform_interface-1.0.3",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "process",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/process-3.0.13",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "provider",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/provider-4.3.2+2",
"packageUri": "lib/",
"languageVersion": "2.7"
},
{
"name": "pull_to_refresh",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.6.2",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "quiver",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/quiver-2.1.3",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "rxdart",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/rxdart-0.24.1",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "save_image",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/save_image-1.0.1",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "share_extend",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/share_extend-1.1.9",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "shared_preferences",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences-0.5.12",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "shared_preferences_linux",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences_linux-0.0.2+2",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "shared_preferences_macos",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences_macos-0.0.1+10",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "shared_preferences_platform_interface",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences_platform_interface-1.0.4",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "shared_preferences_web",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences_web-0.1.2+7",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "shared_preferences_windows",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shared_preferences_windows-0.0.1+1",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "sharesdk_plugin",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/sharesdk_plugin-1.2.8",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "shimmer",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/shimmer-1.1.1",
"packageUri": "lib/",
"languageVersion": "1.20"
},
{
"name": "sky_engine",
"rootUri": "file:///Users/fnuser/Documents/flutter-sdk/bin/cache/pkg/sky_engine",
"packageUri": "lib/",
"languageVersion": "1.11"
},
{
"name": "source_span",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.7.0",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "sqflite",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.3.1+1",
"packageUri": "lib/",
"languageVersion": "2.7"
},
{
"name": "sqflite_common",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/sqflite_common-1.0.2+1",
"packageUri": "lib/",
"languageVersion": "2.7"
},
{
"name": "stack_trace",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/stack_trace-1.9.3",
"packageUri": "lib/",
"languageVersion": "1.23"
},
{
"name": "stream_channel",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/stream_channel-2.0.0",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "string_scanner",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.5",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "string_validator",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/string_validator-0.1.4",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "synchronized",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/synchronized-2.2.0+2",
"packageUri": "lib/",
"languageVersion": "2.8"
},
{
"name": "tab_indicator_styler",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/tab_indicator_styler-1.0.0",
"packageUri": "lib/",
"languageVersion": "2.7"
},
{
"name": "term_glyph",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.1.0",
"packageUri": "lib/",
"languageVersion": "1.8"
},
{
"name": "test_api",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/test_api-0.2.15",
"packageUri": "lib/",
"languageVersion": "2.4"
},
{
"name": "transformer_page_view",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/transformer_page_view-0.1.6",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "typed_data",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.6",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "url_launcher",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/url_launcher-5.7.2",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "url_launcher_linux",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/url_launcher_linux-0.0.1+1",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "url_launcher_macos",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/url_launcher_macos-0.0.1+8",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "url_launcher_platform_interface",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/url_launcher_platform_interface-1.0.8",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "url_launcher_web",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/url_launcher_web-0.1.4+1",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
"name": "url_launcher_windows",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/url_launcher_windows-0.0.1+1",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "uuid",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/uuid-2.2.2",
"packageUri": "lib/",
"languageVersion": "2.2"
},
{
"name": "vector_math",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.0.8",
"packageUri": "lib/",
"languageVersion": "2.0"
},
{
"name": "webview_flutter",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter-0.3.24",
"packageUri": "lib/",
"languageVersion": "2.7"
},
{
"name": "win32",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/win32-1.7.3",
"packageUri": "lib/",
"languageVersion": "2.7"
},
{
"name": "xdg_directories",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/xdg_directories-0.1.0",
"packageUri": "lib/",
"languageVersion": "2.3"
},
{
"name": "xml",
"rootUri": "file:///Users/fnuser/.pub-cache/hosted/pub.flutter-io.cn/xml-3.6.1",
"packageUri": "lib/",
"languageVersion": "2.6"
},
{
"name": "zhiying_comm",
"rootUri": "../../zhiying_comm",
"packageUri": "lib/",
"languageVersion": "2.1"
},
{
"name": "zhiying_base_widget",
"rootUri": "../",
"packageUri": "lib/",
"languageVersion": "2.1"
}
],
"generated": "2020-10-09T05:51:18.485612Z",
"generator": "pub",
"generatorVersion": "2.8.2"
}

+ 58
- 0
example/android/tmpmob/ShareSDK/assets/ShareSDK.xml 파일 보기

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<DevInfor>
<SinaWeibo Enable="false" />
<TencentWeibo Enable="false" />
<Douban Enable="false" />
<QZone Enable="false" />
<Renren Enable="false" />
<KaiXin Enable="false" />
<Facebook Enable="false" />
<Twitter Enable="false" />
<Evernote Enable="false" />
<FourSquare Enable="false" />
<GooglePlus Enable="false" />
<Instagram Enable="false" />
<LinkedIn Enable="false" />
<Tumblr Enable="false" />
<Email Enable="false" />
<ShortMessage Enable="false" />
<Wechat Enable="false" />
<WechatMoments Enable="false" />
<QQ AppId="1111030588" AppKey="XoHKlrBybXy7ORBt" ShareByAppClient="true" BypassApproval="false" Enable="true" />
<Instapaper Enable="false" />
<Pocket Enable="false" />
<YouDao Enable="false" />
<Pinterest Enable="false" />
<Flickr Enable="false" />
<Dropbox Enable="false" />
<VKontakte Enable="false" />
<WechatFavorite Enable="false" />
<Yixin Enable="false" />
<YixinMoments Enable="false" />
<Mingdao Enable="false" />
<Line Enable="false" />
<WhatsApp Enable="false" />
<KakaoTalk Enable="false" />
<KakaoStory Enable="false" />
<FacebookMessenger Enable="false" />
<Alipay Enable="false" />
<AlipayMoments Enable="false" />
<Dingding Enable="false" />
<Youtube Enable="false" />
<Meipai Enable="false" />
<Telegram Enable="false" />
<Cmcc Enable="false" />
<Reddit Enable="false" />
<Telecom Enable="false" />
<Accountkit Enable="false" />
<Douyin Enable="false" />
<Wework Enable="false" />
<HWAccount Enable="false" />
<Oasis Enable="false" />
<XMAccount Enable="false" />
<SnapChat Enable="false" />
<Kuaishou Enable="false" />
<Littleredbook Enable="false" />
<Watermelonvideo Enable="false" />
<Tiktok Enable="false" />
</DevInfor>

+ 1
- 0
lib/pages/favorite_page/favorite_page.dart 파일 보기

@@ -32,6 +32,7 @@ class _FavoritePageState extends State<FavoritePage> {
child: Transform.scale(
scale: 0.2,
child: GoodsShareTemplate(
null,
contentKey: _globalKey,
),
),


+ 12
- 0
lib/pages/goods_share_page/goods_share_bloc.dart 파일 보기

@@ -1,5 +1,6 @@
import 'dart:async';

import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_poster_model.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_temp_add_model.dart';
import 'package:zhiying_comm/util/base_bloc.dart';
import 'package:zhiying_comm/zhiying_comm.dart';
@@ -7,6 +8,7 @@ import 'package:zhiying_comm/zhiying_comm.dart';
class GoodsShareData {
List<Map<String, dynamic>> tabs;
List<GoodsShareTempDataModel> datas;
GoodsSharePosterModel poster;
}

class GoodsShareBloc extends BlocBase {
@@ -31,6 +33,8 @@ class GoodsShareBloc extends BlocBase {
return GoodsShareTempDataModel.fromJson(Map<String, dynamic>.from(item));
}).toList();

_data.poster = await _loadPoster(params);

NetUtil.request(
'/api/v1/mod/pub.flutter.share?share_type=${shopType.toString()}',
method: NetMethod.GET,
@@ -54,4 +58,12 @@ class GoodsShareBloc extends BlocBase {
Logger.error(err);
}
}

// 请求分享海报
Future<GoodsSharePosterModel> _loadPoster(Map<String, dynamic> params) async {
var json = await NetUtil.post('/api/v1/share/poster', params: params);
Map<String, dynamic> data = Map<String, dynamic>.from(json['data']);

return GoodsSharePosterModel.fromJson(data);
}
}

+ 1
- 0
lib/pages/goods_share_page/goods_share_editor/goods_share_preview.dart 파일 보기

@@ -49,6 +49,7 @@ class _GoodsSharePreviewState extends State<GoodsSharePreview> {
GoodsShareItem(
child: GoodsShareEdit(
'至高减600【24期免息】xiaomi/小米10Pro 5G手机骁龙865智能游戏拍照手机官方旗舰店小米10青春正品k305g现货\n\n原价】3999元\n券后价】3989元\n【用智莺生活再省】19.74元\n-------------\n復製(FRH51Lu9hYF),\n用【Tao·寳】下单\n-------------\n商品链接】\nhttp://hsrj3.cn/ps/FRH51Lu9hYF.html)\n',
null,
),
),
Padding(


+ 83
- 11
lib/pages/goods_share_page/goods_share_image/goods_share_image.dart 파일 보기

@@ -1,19 +1,23 @@
import 'dart:convert' as convert;
import 'dart:io';
import 'dart:typed_data';
import 'dart:ui' as ui;

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:save_image/save_image.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_editor/goods_share_editor.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/goods_share_image/goods_share_image_model.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_poster_model.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_temp_add_model.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/good_share_msg.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_edit.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_image.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/widgets/goods_share_item.dart';
import 'package:zhiying_base_widget/template/goods_share_template/goods_share_template.dart';
import 'package:zhiying_base_widget/utils/image_download_util/image_download_util.dart';
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_bottom.dart';
import 'package:zhiying_base_widget/widgets/public/custom_button/custom_button_model.dart';
@@ -23,22 +27,32 @@ import 'package:zhiying_base_widget/widgets/share/share_alert.dart';
class GoodsShareImage extends StatefulWidget {
final Map<String, dynamic> model;
final GoodsShareTempDataModel datas;
final GoodsSharePosterModel poster;

const GoodsShareImage(this.model, this.datas, {Key key}) : super(key: key);
const GoodsShareImage(this.model, this.datas, {Key key, this.poster})
: super(key: key);

@override
_GoodsShareImageState createState() => _GoodsShareImageState();
}

class _GoodsShareImageState extends State<GoodsShareImage> {
class _GoodsShareImageState extends State<GoodsShareImage>
with AutomaticKeepAliveClientMixin {
GlobalKey _globalKey = GlobalKey();
GoodsShareImageModel _style;
Map<int, String> _images = Map();
List<Widget> widgets = List();
String _content = '';
bool _isContentSelected = false;
bool _isPosterSelected = false;

// 分享数据
final ShareDataModel _shareModel = ShareDataModel();

@override
// 切换Tab导航栏保持页面状态
bool get wantKeepAlive => true;

@override
void initState() {
String data = widget.model['data'];
@@ -57,6 +71,7 @@ class _GoodsShareImageState extends State<GoodsShareImage> {
imgCheckSelected: _style.cssList.chooseImage,
child: GoodsShareEdit(
_content,
widget.datas,
imgCheck: _style.cssList.unChooseImage,
imgCheckSelected: _style.cssList.chooseImage,
onCopyClick: () {
@@ -69,9 +84,15 @@ class _GoodsShareImageState extends State<GoodsShareImage> {
Navigator.push(context,
MaterialPageRoute(builder: (context) => GoodsShareEditor()));
},
onTempChange: (temp) {
setState(() {
_content = widget.datas.shareContent + temp;
});
},
),
onSelected: (isSelected) {
_shareModel.content = isSelected ? _content : '';
_isContentSelected = isSelected;
// _shareModel.content = isSelected ? _content : '';
},
));
for (String message in _style.customContent) {
@@ -85,6 +106,31 @@ class _GoodsShareImageState extends State<GoodsShareImage> {
),
);
}
widgets.add(
GoodsShareItem(
imgHeader: _style.cssList.headerImage,
imgCheck: _style.cssList.unChooseImage,
imgCheckSelected: _style.cssList.chooseImage,
enabled: true,
child: Container(
// color: Colors.redAccent,
width: 100,
height: 140,
padding: EdgeInsets.only(left: 25),
child: Transform.scale(
alignment: Alignment.centerLeft,
scale: 0.2,
child: GoodsShareTemplate(
widget.poster,
contentKey: _globalKey,
),
),
),
onSelected: (isSelected) {
_isPosterSelected = isSelected;
},
),
);
for (int index = 0; index < _style.customImage.length; index++) {
String image = _style.customImage[index];
// 分享图片
@@ -201,6 +247,8 @@ class _GoodsShareImageState extends State<GoodsShareImage> {
}

void _saveImages() async {
_updateModel();

List<String> images = List();
for (int index = 0; index < _style.customImage.length; index++) {
if (_images.containsKey(index)) {
@@ -213,25 +261,48 @@ class _GoodsShareImageState extends State<GoodsShareImage> {
_shareModel.image = null;
}

if ((_shareModel.image == null || _shareModel.image.length == 0)) {
if ((_shareModel.image == null || _shareModel.image.length == 0) &&
_shareModel.poster == null) {
Fluttertoast.showToast(msg: '请选择要保存的图片');
return;
}
bool isSaveSuccess = false;
if (_shareModel.poster != null) {
isSaveSuccess = await SaveImage.save(imageBytes: _shareModel.poster);
}

List<String> paths = await ImageDownloadUtil.download(images);
paths.forEach((path) async {
Uint8List data = File(path).readAsBytesSync();
bool isSaveSuccess = await SaveImage.save(imageBytes: data);
if (!isSaveSuccess) {
Fluttertoast.showToast(msg: '保存失败');
return;
}
isSaveSuccess = await SaveImage.save(imageBytes: data);
});
Fluttertoast.showToast(msg: '保存成功');
if (isSaveSuccess)
Fluttertoast.showToast(msg: '保存成功');
else
Fluttertoast.showToast(msg: '保存失败');
}

void _updateModel() async {
if (_isPosterSelected) {
BuildContext buildContext = _globalKey.currentContext;
if (null != buildContext) {
RenderRepaintBoundary boundary = buildContext.findRenderObject();
ui.Image image = await boundary.toImage(pixelRatio: 2.0);
// 注意:png是压缩后格式,如果需要图片的原始像素数据,请使用rawRgba
ByteData byteData =
await image.toByteData(format: ui.ImageByteFormat.png);
Uint8List pngBytes = byteData.buffer.asUint8List();
_shareModel.poster = pngBytes;
}
} else {
_shareModel.poster = null;
}
_shareModel.content = _isContentSelected ? _content : '';
}

// 弹出分享框
void _showShareAlert() async {
_updateModel();
List<String> images = List();
for (int index = 0; index < _style.customImage.length; index++) {
if (_images.containsKey(index)) {
@@ -247,7 +318,8 @@ class _GoodsShareImageState extends State<GoodsShareImage> {
if ((_shareModel.title == null || _shareModel.title == '') &&
(_shareModel.image == null || _shareModel.image.length == 0) &&
(_shareModel.content == null || _shareModel.content == '') &&
(_shareModel.url == null || _shareModel.url == '')) {
(_shareModel.url == null || _shareModel.url == '') &&
(_shareModel.poster == null)) {
Fluttertoast.showToast(msg: '请选择要分享的内容');
return;
}


+ 7
- 1
lib/pages/goods_share_page/goods_share_link/goods_share_link.dart 파일 보기

@@ -27,7 +27,8 @@ class GoodsShareLink extends StatefulWidget {
_GoodsShareLinkState createState() => _GoodsShareLinkState();
}

class _GoodsShareLinkState extends State<GoodsShareLink> {
class _GoodsShareLinkState extends State<GoodsShareLink>
with AutomaticKeepAliveClientMixin {
GoodsShareImageModel _style;
Map<int, String> _images = Map();
List<Widget> widgets = List();
@@ -35,6 +36,10 @@ class _GoodsShareLinkState extends State<GoodsShareLink> {
// 分享数据
final ShareDataModel _shareModel = ShareDataModel();

@override
// 切换Tab导航栏保持页面状态
bool get wantKeepAlive => true;

@override
void initState() {
String data = widget.model['data'];
@@ -66,6 +71,7 @@ class _GoodsShareLinkState extends State<GoodsShareLink> {
enabled: false,
child: GoodsShareEdit(
_style.content,
widget.datas,
onCopyClick: () {
Fluttertoast.showToast(msg: '复制成功');
},


+ 6
- 1
lib/pages/goods_share_page/goods_share_miniprogram/goods_share_miniprogram.dart 파일 보기

@@ -15,7 +15,12 @@ class GoodsShareMiniprogram extends StatefulWidget {
_GoodsShareMiniprogramState createState() => _GoodsShareMiniprogramState();
}

class _GoodsShareMiniprogramState extends State<GoodsShareMiniprogram> {
class _GoodsShareMiniprogramState extends State<GoodsShareMiniprogram>
with AutomaticKeepAliveClientMixin {
@override
// 切换Tab导航栏保持页面状态
bool get wantKeepAlive => true;

@override
Widget build(BuildContext context) {
return Container(


+ 5
- 1
lib/pages/goods_share_page/goods_share_page.dart 파일 보기

@@ -83,7 +83,11 @@ class _GoodsShareContainerState extends State<_GoodsShareContainer>
_tabs.add(_createTabItem(item['title']));
String mod_name = item['mod_name'];
if (mod_name == 'share_goods_image.taobao') {
_contents.add(GoodsShareImage(item, model));
_contents.add(GoodsShareImage(
item,
model,
poster: data.poster,
));
} else if (mod_name == 'share_goods_link.taobao') {
_contents.add(GoodsShareLink(item, model));
} else if (mod_name == 'share_goods_mini.taobao') {


+ 52
- 0
lib/pages/goods_share_page/models/goods_share_poster_model.dart 파일 보기

@@ -0,0 +1,52 @@
class GoodsSharePosterModel {
String qrcode;
String avatar;
String title;
String provider;
String posterImage;
String inviteCode;
String couponPrice;
String coupon;
String marketPrice;
String style;

GoodsSharePosterModel(
{this.qrcode,
this.avatar,
this.title,
this.provider,
this.posterImage,
this.inviteCode,
this.couponPrice,
this.coupon,
this.marketPrice,
this.style});

GoodsSharePosterModel.fromJson(Map<String, dynamic> json) {
qrcode = json['qrcode'];
avatar = json['avatar'];
title = json['title'];
provider = json['provider'];
posterImage = json['poster_image'];
inviteCode = json['invite_code'];
couponPrice = json['coupon_price'];
coupon = json['coupon'];
marketPrice = json['market_price'];
style = json['style'];
}

Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['qrcode'] = this.qrcode;
data['avatar'] = this.avatar;
data['title'] = this.title;
data['provider'] = this.provider;
data['poster_image'] = this.posterImage;
data['invite_code'] = this.inviteCode;
data['coupon_price'] = this.couponPrice;
data['coupon'] = this.coupon;
data['market_price'] = this.marketPrice;
data['style'] = this.style;
return data;
}
}

+ 68
- 0
lib/pages/goods_share_page/models/goods_share_poster_style_model.dart 파일 보기

@@ -0,0 +1,68 @@
class GoodsSharePosterStyleModel {
String inviteCodeFontColor;
String inviteCodeBgColor;
String providerNameColor;
String providerBgColor;
String titleColor;
String couponpriceColor;
String couponpriceBgColor;
String couponColor;
String couponBgColor;
String marketPriceColor;
String fingerprintImg;
String fingerprintText;
String fingerprintTextColor;
String applogImg;

GoodsSharePosterStyleModel(
{this.inviteCodeFontColor,
this.inviteCodeBgColor,
this.providerNameColor,
this.providerBgColor,
this.titleColor,
this.couponpriceColor,
this.couponpriceBgColor,
this.couponColor,
this.couponBgColor,
this.marketPriceColor,
this.fingerprintImg,
this.fingerprintText,
this.fingerprintTextColor,
this.applogImg});

GoodsSharePosterStyleModel.fromJson(Map<String, dynamic> json) {
inviteCodeFontColor = json['invite_code_font_color'];
inviteCodeBgColor = json['invite_code_bg_color'];
providerNameColor = json['provider_name_color'];
providerBgColor = json['provider_bg_color'];
titleColor = json['title_color'];
couponpriceColor = json['couponprice_color'];
couponpriceBgColor = json['couponprice_bg_color'];
couponColor = json['coupon_color'];
couponBgColor = json['coupon_bg_color'];
marketPriceColor = json['market_price_color'];
fingerprintImg = json['fingerprint_img'];
fingerprintText = json['fingerprint_text'];
fingerprintTextColor = json['fingerprint_text_color'];
applogImg = json['applog_img'];
}

Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['invite_code_font_color'] = this.inviteCodeFontColor;
data['invite_code_bg_color'] = this.inviteCodeBgColor;
data['provider_name_color'] = this.providerNameColor;
data['provider_bg_color'] = this.providerBgColor;
data['title_color'] = this.titleColor;
data['couponprice_color'] = this.couponpriceColor;
data['couponprice_bg_color'] = this.couponpriceBgColor;
data['coupon_color'] = this.couponColor;
data['coupon_bg_color'] = this.couponBgColor;
data['market_price_color'] = this.marketPriceColor;
data['fingerprint_img'] = this.fingerprintImg;
data['fingerprint_text'] = this.fingerprintText;
data['fingerprint_text_color'] = this.fingerprintTextColor;
data['applog_img'] = this.applogImg;
return data;
}
}

+ 106
- 79
lib/pages/goods_share_page/widgets/goods_share_edit.dart 파일 보기

@@ -1,28 +1,80 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_temp_add_model.dart';

class GoodsShareEdit extends StatelessWidget {
class GoodsShareEdit extends StatefulWidget {
final String message;
final GoodsShareTempDataModel model;
final VoidCallback onEditorClick;
final VoidCallback onCopyClick;

final ValueChanged<String> onTempChange;

final String imgCheck;
final String imgCheckSelected;
final String imgEdit;
final String imgCopy;

const GoodsShareEdit(this.message,
const GoodsShareEdit(this.message, this.model,
{Key key,
this.onEditorClick,
this.onCopyClick,
this.onTempChange,
this.imgCheck,
this.imgCheckSelected,
this.imgEdit,
this.imgCopy})
: super(key: key);

@override
_GoodsShareEditState createState() => _GoodsShareEditState();
}

class _GoodsShareEditState extends State<GoodsShareEdit> {
List<bool> _isItemSelected;

@override
void initState() {
_isItemSelected = List.generate(
widget.model?.shareTemplate?.length ?? 0, (index) => false);

super.initState();
}

void _checkSelected() {
String result = '';
for (int index = 0;
index < widget.model.shareTemplate.length &&
index < _isItemSelected.length;
index++) {
if (_isItemSelected[index]) {
result += '\n' + widget.model.shareTemplate[index].temp;
}
}
if (widget.onTempChange != null) {
widget.onTempChange(result);
}
}

@override
Widget build(BuildContext context) {
List<Widget> widgets = List.generate(
widget.model?.shareTemplate?.length ?? 0,
(index) => GestureDetector(
behavior: HitTestBehavior.opaque,
child: GoodsShareCheckButton(
widget.model.shareTemplate[index].name,
imgIcon: widget.imgCheck,
imgIconSelected: widget.imgCheckSelected,
isSelected: _isItemSelected[index],
),
onTap: () {
setState(() {
_isItemSelected[index] = !_isItemSelected[index];
});
_checkSelected();
},
)).toList();
return Container(
margin: EdgeInsets.only(left: 10, right: 10),
// padding: EdgeInsets.only(left: 16, top: 10, right: 16, bottom: 10),
@@ -35,89 +87,64 @@ class GoodsShareEdit extends StatelessWidget {
padding:
const EdgeInsets.only(left: 16, top: 10, right: 16, bottom: 10),
child: Text(
message,
widget.message,
style: TextStyle(
fontSize: 11,
fontWeight: FontWeight.bold,
),
),
),
// Container(
// padding:
// const EdgeInsets.only(left: 16, top: 6, bottom: 6, right: 16),
// width: double.infinity,
// child: Wrap(
// spacing: 10,
// runSpacing: 6,
// children: <Widget>[
// GoodsShareCheckButton(
// '标题',
// imgIcon: this.imgCheck,
// imgIconSelected: this.imgCheckSelected,
// isSelected: false,
// ),
// GoodsShareCheckButton(
// '收益',
// imgIcon: this.imgCheck,
// imgIconSelected: this.imgCheckSelected,
// isSelected: false,
// ),
// GoodsShareCheckButton(
// '邀请码',
// imgIcon: this.imgCheck,
// imgIconSelected: this.imgCheckSelected,
// isSelected: false,
// ),
// GoodsShareCheckButton(
// '链接',
// imgIcon: this.imgCheck,
// imgIconSelected: this.imgCheckSelected,
// isSelected: false,
// ),
// ],
// ),
// ),
// Container(
// width: double.infinity,
// height: 0.5,
// color: Color(0xffececec),
// ),
// Container(
// height: 44,
// child: Row(
// children: <Widget>[
// Expanded(
// child: GestureDetector(
// child: Container(
// color: Colors.transparent,
// child: GoodsShareCheckButton(
// '编辑模版',
// isSelected: true,
// ),
// ),
// onTap: onEditorClick,
// ),
// ),
// Container(
// width: 0.5,
// height: 20,
// color: Color(0xffececec),
// ),
// Expanded(
// child: GestureDetector(
// child: Container(
// color: Colors.transparent,
// child: GoodsShareCheckButton(
// '复制文案',
// isSelected: false,
// ),
// ),
// onTap: onCopyClick,
// ),
// ),
// ],
// ),
// )
Container(
padding:
const EdgeInsets.only(left: 16, top: 6, bottom: 6, right: 16),
width: double.infinity,
child: Wrap(
spacing: 10,
runSpacing: 6,
children: widgets,
),
),
Container(
width: double.infinity,
height: 0.5,
color: Color(0xffececec),
),
Container(
height: 44,
child: Row(
children: <Widget>[
Expanded(
child: GestureDetector(
child: Container(
color: Colors.transparent,
child: GoodsShareCheckButton(
'编辑模版',
isSelected: true,
),
),
onTap: widget.onEditorClick,
),
),
Container(
width: 0.5,
height: 20,
color: Color(0xffececec),
),
Expanded(
child: GestureDetector(
child: Container(
color: Colors.transparent,
child: GoodsShareCheckButton(
'复制文案',
isSelected: false,
),
),
onTap: widget.onCopyClick,
),
),
],
),
)
],
),
);


+ 34
- 24
lib/template/goods_share_template/goods_share_template.dart 파일 보기

@@ -1,12 +1,24 @@
import 'dart:convert' as convert;

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_poster_model.dart';
import 'package:zhiying_base_widget/pages/goods_share_page/models/goods_share_poster_style_model.dart';
import 'package:zhiying_base_widget/widgets/home/home_quick_entry/cached_network_image_util.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

// 商品详情分享,合成模板
class GoodsShareTemplate extends StatelessWidget {
final GlobalKey contentKey;
final GoodsSharePosterModel model;
GoodsSharePosterStyleModel _style;

const GoodsShareTemplate({Key key, this.contentKey}) : super(key: key);
GoodsShareTemplate(this.model, {Key key, this.contentKey}) : super(key: key) {
String data = model.style;
Map<String, dynamic> json =
Map<String, dynamic>.from(convert.jsonDecode(data));
_style = GoodsSharePosterStyleModel.fromJson(json);
}

@override
Widget build(BuildContext context) {
@@ -35,18 +47,16 @@ class GoodsShareTemplate extends StatelessWidget {
Widget _createHeader() {
return Row(
children: <Widget>[
Container(
width: 30,
height: 30,
decoration: BoxDecoration(
color: Colors.redAccent, borderRadius: BorderRadius.circular(15)),
),
Expanded(
child: Container(
margin: EdgeInsets.only(left: 10, right: 10),
height: 30,
width: 80,
color: Colors.redAccent,
child: CachedNetworkImage(
alignment: Alignment.centerLeft,
fit: BoxFit.fitHeight,
imageUrl: _style?.applogImg ?? '',
),
),
),
Container(
@@ -55,7 +65,7 @@ class GoodsShareTemplate extends StatelessWidget {
color: Color(0xfff7f7f7),
borderRadius: BorderRadius.circular(30)),
child: Text(
'邀请码 SDWE45',
'邀请码 ' + (model?.inviteCode ?? ''),
style: TextStyle(fontSize: 11, fontWeight: FontWeight.bold),
),
)
@@ -71,10 +81,12 @@ class GoodsShareTemplate extends StatelessWidget {
aspectRatio: 1,
child: Container(
width: double.infinity,
child: CachedNetworkImage(
imageUrl:
'https://img.alicdn.com/bao/uploaded/i1/2200818126974/O1CN01HvqWcg21O8mq9EPwf_!!0-item_pic.jpg_500x500.jpg',
fit: BoxFit.fitWidth,
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: CachedNetworkImage(
imageUrl: model.posterImage,
fit: BoxFit.fitWidth,
),
),
// color: Colors.redAccent,
),
@@ -109,10 +121,7 @@ class GoodsShareTemplate extends StatelessWidget {
width: 124,
height: 124,
// color: Colors.redAccent,
child: CachedNetworkImage(
imageUrl:
'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1410436569,3239963707&fm=26&gp=0.jpg',
),
child: Image.memory(convert.base64Decode(model.qrcode)),
),
Container(
child: Row(
@@ -120,8 +129,9 @@ class GoodsShareTemplate extends StatelessWidget {
Container(
width: 14,
height: 16,
color: Colors.redAccent,
margin: EdgeInsets.only(right: 4),
child: CachedNetworkImage(
imageUrl: _style?.fingerprintImg ?? '',
),
),
Text(
'长按识别领取优惠',
@@ -146,7 +156,7 @@ class GoodsShareTemplate extends StatelessWidget {
padding: EdgeInsets.only(left: 2, right: 2, top: 3, bottom: 3),
margin: EdgeInsets.only(right: 4),
child: Text(
'淘宝',
model?.provider ?? '',
style: TextStyle(
fontSize: 9,
height: 1,
@@ -158,7 +168,7 @@ class GoodsShareTemplate extends StatelessWidget {
),
));
list.add(TextSpan(
text: '小米10至尊纪念版5g手机120X变焦骁龙865小米官方旗舰店小米手机',
text: model?.title ?? '',
style: TextStyle(
fontSize: 14,
color: HexColor.fromHex('#333333'),
@@ -210,7 +220,7 @@ class GoodsShareTemplate extends StatelessWidget {
borderRadius: BorderRadius.circular(2.5),
),
child: Text(
'700元券',
model.coupon + '元券',
textAlign: TextAlign.center,
maxLines: 1,
style: TextStyle(
@@ -231,7 +241,7 @@ class GoodsShareTemplate extends StatelessWidget {
return Padding(
padding: EdgeInsets.only(bottom: 2),
child: Text(
'¥5999',
'¥' + (model?.marketPrice ?? ''),
style: TextStyle(
fontSize: 11,
height: 1,
@@ -260,7 +270,7 @@ class GoodsShareTemplate extends StatelessWidget {
),
),
TextSpan(
text: '5299',
text: model.couponPrice,
style: TextStyle(
fontSize: 20,
color: HexColor.fromHex('#ff4242'),


+ 5
- 1
lib/widgets/share/models/share_data_model.dart 파일 보기

@@ -1,7 +1,10 @@
import 'dart:typed_data';

class ShareDataModel {
String title;
String content;
List image;
Uint8List poster; // 海报
List image; // 图片地址列表
String url;

ShareDataModel({
@@ -9,5 +12,6 @@ class ShareDataModel {
this.content,
this.image,
this.url,
this.poster,
});
}

+ 65
- 22
lib/widgets/share/share_alert.dart 파일 보기

@@ -63,10 +63,10 @@ class _ShareAlertContentState extends State<_ShareAlertContent> {
void initState() {
NetUtil.request('/api/v1/mod/${widget.skipIdentifier}',
method: NetMethod.GET, onCache: (data) {
_parseData(data);
}, onSuccess: (data) {
_parseData(data);
}, onError: (err) {});
_parseData(data);
}, onSuccess: (data) {
_parseData(data);
}, onError: (err) {});

super.initState();
}
@@ -118,7 +118,7 @@ class _ShareAlertContentState extends State<_ShareAlertContent> {
),
Container(
margin:
EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
child: _createIcons(),
),
GestureDetector(
@@ -213,27 +213,70 @@ class _ShareAlertContentState extends State<_ShareAlertContent> {
}

void _shareByMob(ShareSDKPlatform plateform) async {
// dynamic image;
if (widget.model.image != null && widget.model.image.length > 1) {
int count = 0;
if (widget.model.poster != null) {
count++;
}
count += (widget.model?.image?.length ?? 0);
// 多图分享
if (count > 1) {
_shareMultipleImages();
return;
}
SSDKMap params;
if (widget.model.poster != null) {
// 检查并请求权限
// PermissionStatus status = await PermissionHandler().checkPermissionStatus(
// PermissionGroup.storage);
// if (PermissionStatus.granted != status) {
// PermissionHandler().requestPermissions(<PermissionGroup>[
// PermissionGroup.storage,
// ]);
// }

// final result = await ImageGallerySaver.saveImage(widget.model.poster);

//单独公共分享
SSDKMap params = SSDKMap()
..setGeneral(
widget.model.title,
widget.model.content,
widget.model.image,
null,
null,
widget.model.url,
null,
null,
null,
null,
SSDKContentTypes.auto,
);
// var appDocDir = await getTemporaryDirectory();
// String savePath = appDocDir.path + "/temp.mp4";
// await Dio().download(
// "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4", savePath);
// final result = await ImageGallerySaver.saveFile(savePath);
// print(result);
// List<String> paths = await ImageDownloadUtil.download([
// 'https://upload-images.jianshu.io/upload_images/19714621-fe7d422703eb7e70.jpeg?imageMogr2/auto-orient/strip|imageView2/1/w/360/h/240'
// ]);
// params = SSDKMap()
// ..setGeneral(
// widget.model.title,
// widget.model.content,
// [
// 'https://upload-images.jianshu.io/upload_images/19714621-fe7d422703eb7e70.jpeg?imageMogr2/auto-orient/strip|imageView2/1/w/360/h/240'
// ],
// null,
// null,
// widget.model.url,
// null,
// null,
// null,
// null,
// SSDKContentTypes.auto,
// );
} else {
params = SSDKMap()
..setGeneral(
widget.model.title,
widget.model.content,
widget.model.image,
null,
null,
widget.model.url,
null,
null,
null,
null,
SSDKContentTypes.auto,
);
}

SharesdkPlugin.share(plateform, params, (SSDKResponseState state,
Map userdata, Map contentEntity, SSDKError error) {


불러오는 중...
취소
저장