From 1b564c824ed8e83b96fa7ffe3421b4eb163caf2a Mon Sep 17 00:00:00 2001 From: developer1054 Date: Wed, 26 May 2021 15:47:55 -0300 Subject: [PATCH] CS001305-3_APP-CARDS_STARTER --- android/app/build.gradle | 3 + ios/Podfile.lock | 30 +++++++ ios/Runner.xcodeproj/project.pbxproj | 3 + lib/funcoes_gerais.dart | 1 + lib/index/index_controller.dart | 15 ++-- lib/notificacoes/notificacoes.dart | 2 + lib/pdfviewer/pdfviewer.dart | 31 +++++++ lib/pdfviewer/pdfviewer_controller.dart | 106 ++++++++++++++++++++++++ pubspec.lock | 81 +++++++++++++++++- pubspec.yaml | 3 + 10 files changed, 267 insertions(+), 8 deletions(-) create mode 100644 lib/pdfviewer/pdfviewer.dart create mode 100644 lib/pdfviewer/pdfviewer_controller.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index a89ca03..2504b46 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -78,6 +78,9 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + debug { + signingConfig signingConfigs.debug + } } splits { diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f790248..a860381 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,4 +1,6 @@ PODS: + - advance_pdf_viewer (1.0.5): + - Flutter - device_info (0.0.1): - Flutter - Firebase/Core (6.33.0): @@ -52,6 +54,9 @@ PODS: - Flutter (1.0.0) - flutter_inappwebview (0.0.1): - Flutter + - FMDB (2.7.5): + - FMDB/standard (= 2.7.5) + - FMDB/standard (2.7.5) - GoogleAppMeasurement (6.8.3): - GoogleUtilities/AppDelegateSwizzler (~> 6.7) - GoogleUtilities/MethodSwizzler (~> 6.7) @@ -84,10 +89,17 @@ PODS: - nanopb/encode (= 1.30906.0) - nanopb/decode (1.30906.0) - nanopb/encode (1.30906.0) + - path_provider (0.0.1): + - Flutter - PromisesObjC (1.2.11) - Protobuf (3.14.0) + - share (0.0.1): + - Flutter - shared_preferences (0.0.1): - Flutter + - sqflite (0.0.2): + - Flutter + - FMDB (>= 2.7.5) - url_launcher (0.0.1): - Flutter - video_player (0.0.1): @@ -98,11 +110,15 @@ PODS: - Flutter DEPENDENCIES: + - advance_pdf_viewer (from `.symlinks/plugins/advance_pdf_viewer/ios`) - device_info (from `.symlinks/plugins/device_info/ios`) - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - Flutter (from `Flutter`) - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`) + - path_provider (from `.symlinks/plugins/path_provider/ios`) + - share (from `.symlinks/plugins/share/ios`) - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) + - sqflite (from `.symlinks/plugins/sqflite/ios`) - url_launcher (from `.symlinks/plugins/url_launcher/ios`) - video_player (from `.symlinks/plugins/video_player/ios`) - wakelock (from `.symlinks/plugins/wakelock/ios`) @@ -117,6 +133,7 @@ SPEC REPOS: - FirebaseInstallations - FirebaseInstanceID - FirebaseMessaging + - FMDB - GoogleAppMeasurement - GoogleDataTransport - GoogleUtilities @@ -125,6 +142,8 @@ SPEC REPOS: - Protobuf EXTERNAL SOURCES: + advance_pdf_viewer: + :path: ".symlinks/plugins/advance_pdf_viewer/ios" device_info: :path: ".symlinks/plugins/device_info/ios" firebase_messaging: @@ -133,8 +152,14 @@ EXTERNAL SOURCES: :path: Flutter flutter_inappwebview: :path: ".symlinks/plugins/flutter_inappwebview/ios" + path_provider: + :path: ".symlinks/plugins/path_provider/ios" + share: + :path: ".symlinks/plugins/share/ios" shared_preferences: :path: ".symlinks/plugins/shared_preferences/ios" + sqflite: + :path: ".symlinks/plugins/sqflite/ios" url_launcher: :path: ".symlinks/plugins/url_launcher/ios" video_player: @@ -145,6 +170,7 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/webview_flutter/ios" SPEC CHECKSUMS: + advance_pdf_viewer: 5c832f382b4ca84fe735f893b7e91aa830c27d7b device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 Firebase: 8db6f2d1b2c5e2984efba4949a145875a8f65fe5 firebase_messaging: 21344b3b3a7d9d325d63a70e3750c0c798fe1e03 @@ -156,13 +182,17 @@ SPEC CHECKSUMS: FirebaseMessaging: 5eca4ef173de76253352511aafef774caa1cba2a Flutter: 0e3d915762c693b495b44d77113d4970485de6ec flutter_inappwebview: 69dfbac46157b336ffbec19ca6dfd4638c7bf189 + FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a GoogleAppMeasurement: 966e88df9d19c15715137bb2ddaf52373f111436 GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833 GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3 nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc + path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c PromisesObjC: 8c196f5a328c2cba3e74624585467a557dcb482f Protobuf: 0cde852566359049847168e51bd1c690e0f70056 + share: 0b2c3e82132f5888bccca3351c504d0003b3b410 shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d + sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef video_player: 9cc823b1d9da7e8427ee591e8438bfbcde500e6e wakelock: bfc7955c418d0db797614075aabbc58a39ab5107 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 332252e..afc83ef 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -366,6 +366,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = WJ7RU32S89; ENABLE_BITCODE = NO; + FLUTTER_BUILD_NUMBER = 2; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", @@ -506,6 +507,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = WJ7RU32S89; ENABLE_BITCODE = NO; + FLUTTER_BUILD_NUMBER = 2; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", @@ -541,6 +543,7 @@ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = WJ7RU32S89; ENABLE_BITCODE = NO; + FLUTTER_BUILD_NUMBER = 2; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", diff --git a/lib/funcoes_gerais.dart b/lib/funcoes_gerais.dart index 8dd55c5..9e6cb29 100644 --- a/lib/funcoes_gerais.dart +++ b/lib/funcoes_gerais.dart @@ -18,6 +18,7 @@ class FuncoesGerais{ static const String channelId = "UCJ_EUoswNTvRGotJ-ROxaKw"; static const String homeURL = "https://www.decpisos.com.br/"; static const String dominioPermitido = "https://www.decpisos.com.br"; + static const String urlPDF = "http://app-cards.com/files/card-decpisos.pdf"; static Future checkInternetConnection() async{ diff --git a/lib/index/index_controller.dart b/lib/index/index_controller.dart index b4d2b05..5b94817 100644 --- a/lib/index/index_controller.dart +++ b/lib/index/index_controller.dart @@ -1,11 +1,12 @@ import 'package:decpisos/home/home.dart'; -import 'package:decpisos/instagram_embed/instagram_embed.dart'; +//import 'package:decpisos/instagram_embed/instagram_embed.dart'; import 'package:decpisos/notificacoes/notificacoes.dart'; //import 'package:decpisos/videos/youtube_videos.dart'; import 'package:convex_bottom_bar/convex_bottom_bar.dart'; +import 'package:decpisos/pdfviewer/pdfviewer.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:line_icons/line_icons.dart'; +//import 'package:line_icons/line_icons.dart'; class IndexController extends GetxController with SingleGetTickerProviderMixin{ TabController tabController; @@ -26,11 +27,13 @@ class IndexController extends GetxController with SingleGetTickerProviderMixin{ void initTabs(){ //this.childrenTabs.add(YouTubeVideosScreen()); - this.childrenTabs.add(InstagramScreen()); - this.childrenTabs.add(HomeScreen()); - this.childrenTabs.add(NotificacoesScreen()); + //this.childrenTabs.add(InstagramScreen()); + this.childrenTabs.add(Tab(key: PageStorageKey('pdftab'), child:PDFViewerScreen())); + this.childrenTabs.add(Tab(child: HomeScreen())); + this.childrenTabs.add(Tab(child: NotificacoesScreen())); //this.tabs.add(TabItem(icon: Icons.video_collection, title: 'Vídeos')); - this.tabs.add(TabItem(icon: LineIcons.instagram, title: 'Instagram')); + //this.tabs.add(TabItem(icon: LineIcons.instagram, title: 'Instagram')); + this.tabs.add(TabItem(icon: Icons.book_online, title: 'DecCard')); this.tabs.add(TabItem(icon: Icons.home, title: 'Home')); this.tabs.add(TabItem(icon: Icons.notifications, title: 'Notificações')); this.tabController = TabController(vsync: this, length: this.tabs.length); diff --git a/lib/notificacoes/notificacoes.dart b/lib/notificacoes/notificacoes.dart index 088ca09..2dec89d 100644 --- a/lib/notificacoes/notificacoes.dart +++ b/lib/notificacoes/notificacoes.dart @@ -15,6 +15,8 @@ class NotificacoesScreen extends StatelessWidget { return Scaffold( appBar: AppBar( title: const Text('Notificações'), + leading: Container(), + leadingWidth: 0, centerTitle: false, ), body: Obx(() => c.loading.value ? Center(child: CircularProgressIndicator(),) : c.errorCode.value != 0 ? this._buildError() : RefreshIndicator( diff --git a/lib/pdfviewer/pdfviewer.dart b/lib/pdfviewer/pdfviewer.dart new file mode 100644 index 0000000..eaba796 --- /dev/null +++ b/lib/pdfviewer/pdfviewer.dart @@ -0,0 +1,31 @@ +import 'package:advance_pdf_viewer/advance_pdf_viewer.dart'; +import 'package:decpisos/pdfviewer/pdfviewer_controller.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class PDFViewerScreen extends StatelessWidget { + final PDFViewerScreenController c = Get.put(PDFViewerScreenController()); + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('DecCard'), + centerTitle: false, + leading: Container(), + leadingWidth: 0, + actions: [ + Obx(() => c.loadPDF.value ? Center(child: CircularProgressIndicator()) : IconButton(icon: Icon(Icons.share), onPressed: c.sharePDF)), + Obx(() => c.visibleRefresh.value ? IconButton(icon: Icon(Icons.refresh), onPressed: c.refreshPDF) : Container()) + ], + ), + body: Obx(() => c.loading.value + ? Center( + child: CircularProgressIndicator(), + ) + : c.error.value ? c.buildError() : PDFViewer( + lazyLoad: false, + document: c.doc, + )), + ); + } +} diff --git a/lib/pdfviewer/pdfviewer_controller.dart b/lib/pdfviewer/pdfviewer_controller.dart new file mode 100644 index 0000000..9c6ef66 --- /dev/null +++ b/lib/pdfviewer/pdfviewer_controller.dart @@ -0,0 +1,106 @@ +import 'dart:io'; +import 'package:flutter/foundation.dart'; + +import 'package:advance_pdf_viewer/advance_pdf_viewer.dart'; +import 'package:decpisos/funcoes_gerais.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:share/share.dart'; + +class PDFViewerScreenController extends GetxController{ + var loading = true.obs; + var loadPDF = false.obs; + var visibleRefresh = false.obs; + var error = false.obs; + PDFDocument doc; + File _filePDF; + + @override + void onInit() { + super.onInit(); + this._loadPDF(); + } + + Future _loadPDF() async { + var file = await this._createFileOfPdfUrl(); + if(file != null && await file.exists()){ + this.doc = await PDFDocument.fromFile(file); + //this.visibleRefresh.value = true; + } + else{ + if(await FuncoesGerais.checkInternetConnection() == false){ + this.error.value = true; + } + else{ + this.doc = await PDFDocument.fromURL(FuncoesGerais.urlPDF); + } + + } + + this.loading.value = false; + } + + Future refreshPDF() async { + this.loading.value = true; + try { + await this._filePDF.delete(); + this._loadPDF(); + } catch (e) { + Get.rawSnackbar(message: 'Não possível atualizar o PDF. Tente novamente'); + this.loading.value = false; + } + } + + Future sharePDF() async { + //Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture'); + this.loadPDF.value = true; + var file = await this._createFileOfPdfUrl(); + try { + Share.shareFiles([file.path], text: 'DecCard').then((value) => this.loadPDF.value = false); + } catch (e) { + this.loadPDF.value = false; + Get.rawSnackbar(message: 'Não foi possível compartilhar o PDF'); + } + + } + + Future _createFileOfPdfUrl() async { + final url = FuncoesGerais.urlPDF; + File file; + + final filename = url.substring(url.lastIndexOf("/") + 1); + String dir = (await getApplicationDocumentsDirectory()).path; + file = new File('$dir/$filename'); + if(!await file.exists()){ + if(await FuncoesGerais.checkInternetConnection()){ + var request = await HttpClient().getUrl(Uri.parse(url)); + var response = await request.close(); + var bytes = await consolidateHttpClientResponseBytes(response); + await file.writeAsBytes(bytes); + } + else{ + file = null; + } + } + this._filePDF = file; + if(this._filePDF != null) this.visibleRefresh.value = await this._filePDF.exists(); + + return file; + } + + Widget buildError(){ + return Container( + width: double.maxFinite, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text('Não foi possível carregar o PDF'), + SizedBox(height: 10.0,), + RaisedButton(onPressed: this.refreshPDF,child: Text('Atualizar'),) + ], + ), + ); + } +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 132ad5a..9501abd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,13 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + advance_pdf_viewer: + dependency: "direct main" + description: + name: advance_pdf_viewer + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.2" animated_splash_screen: dependency: "direct main" description: @@ -181,6 +188,13 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" flutter_html: dependency: "direct main" description: @@ -287,6 +301,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.2" + infinite_listview: + dependency: transitive + description: + name: infinite_listview + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1+1" intl: dependency: transitive description: @@ -329,6 +350,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.9.7" + numberpicker: + dependency: transitive + description: + name: numberpicker + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" page_transition: dependency: transitive description: @@ -357,6 +385,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.4" + path_provider: + dependency: "direct main" + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.28" path_provider_linux: dependency: transitive description: @@ -364,6 +399,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.1+2" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4+8" path_provider_platform_interface: dependency: transitive description: @@ -420,6 +462,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.5" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.25.0" sa_v1_migration: dependency: transitive description: @@ -427,6 +476,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.2" + share: + dependency: "direct main" + description: + name: share + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.5+4" shared_preferences: dependency: "direct main" description: @@ -488,6 +544,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0-nullsafety.2" + sqflite: + dependency: transitive + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.2+4" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3+3" stack_trace: dependency: transitive description: @@ -523,6 +593,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.4.0" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0+2" term_glyph: dependency: transitive description: @@ -692,5 +769,5 @@ packages: source: hosted version: "7.0.0+7" sdks: - dart: ">=2.10.0-110 <2.11.0" - flutter: ">=1.22.0 <2.0.0" + dart: ">=2.10.2 <2.11.0" + flutter: ">=1.22.2 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index c69679d..a2e8166 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,6 +48,9 @@ dependencies: animations: ^1.1.2 shared_preferences: ^0.5.12+4 youtube_player_flutter: ^7.0.0+7 + share: ^0.6.5+4 + advance_pdf_viewer: ^1.2.2 + path_provider: ^1.6.28 dev_dependencies: flutter_test: