From 862451543370b67e99f5a4fdaf9511208a618252 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 31 Aug 2023 11:42:03 +0300 Subject: [PATCH] local & network files opener added. --- lib/views/pages/user/requests/create_request.dart | 7 +++++-- .../widgets/images/multi_image_picker_item.dart | 15 +++++++++++++-- pubspec.lock | 8 ++++++++ pubspec.yaml | 1 + 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index 74000354..96321251 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -80,7 +80,7 @@ class CreateRequestPageState extends State { } else { _serviceRequest = ServiceRequest(); } - _isLoading = true; + super.initState(); } @@ -123,7 +123,10 @@ class CreateRequestPageState extends State { _subtitle = AppLocalization.of(context).subtitle; if (_serviceRequestsProvider == null) { _serviceRequestsProvider = Provider.of(context); - getServiceRequestById(widget.serviceRequest.id); + if (widget.serviceRequest?.id != null) { + _isLoading = true; + getServiceRequestById(widget.serviceRequest.id); + } } return Scaffold( diff --git a/lib/views/widgets/images/multi_image_picker_item.dart b/lib/views/widgets/images/multi_image_picker_item.dart index fea9ce6f..5cddee73 100644 --- a/lib/views/widgets/images/multi_image_picker_item.dart +++ b/lib/views/widgets/images/multi_image_picker_item.dart @@ -1,9 +1,13 @@ import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:open_file/open_file.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; +import 'package:url_launcher/url_launcher.dart'; class MultiFilesPickerItem extends StatelessWidget { final File file; @@ -31,7 +35,7 @@ class MultiFilesPickerItem extends StatelessWidget { ), child: MaterialButton( padding: EdgeInsets.zero, - onPressed: () { + onPressed: () async { if (isImage) { Navigator.of(context).push( MaterialPageRoute( @@ -39,7 +43,7 @@ class MultiFilesPickerItem extends StatelessWidget { body: SafeArea( child: Stack( children: [ - Center(child: isImage ? InteractiveViewer(child: Image(image: (_isLocalUrl(file.path) ? FileImage(file) : NetworkImage(file.path)))) : const SizedBox.shrink()), + InteractiveViewer(child: Image(image: (_isLocalUrl(file.path) ? FileImage(file) : NetworkImage(file.path)))).center, const ABackButton(), ], ), @@ -47,6 +51,13 @@ class MultiFilesPickerItem extends StatelessWidget { ), ), ); + } else if (_isLocalUrl(file.path)) { + OpenFile.open(file.path); + } else { + if (!await launchUrl(Uri.parse(file.path), mode: LaunchMode.externalApplication)) { + Fluttertoast.showToast(msg: "UnExpected Error with file."); + throw Exception('Could not launch '); + } } }, child: Align( diff --git a/pubspec.lock b/pubspec.lock index 98397238..87291639 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -701,6 +701,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" + open_file: + dependency: "direct main" + description: + name: open_file + sha256: a5a32d44acb7c899987d0999e1e3cbb0a0f1adebbf41ac813ec6d2d8faa0af20 + url: "https://pub.dev" + source: hosted + version: "3.3.2" package_info: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 4616c3d2..677ef09c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,6 +64,7 @@ dependencies: file_picker: ^5.2.5 record_mp3: ^2.1.0 path_provider: ^2.1.0 + open_file: ^3.3.2 dev_dependencies: flutter_test: