parent
fcd34d4fb1
commit
fca7ffda93
7 changed files with 61 additions and 11 deletions
|
@ -218,8 +218,12 @@ class Record {
|
||||||
|
|
||||||
bool get isRoot => this == _rootRecord;
|
bool get isRoot => this == _rootRecord;
|
||||||
|
|
||||||
|
bool get isLink => assetUri.startsWith("resrec");
|
||||||
|
|
||||||
|
bool get isItem => assetUri.startsWith("resdb");
|
||||||
|
|
||||||
String get linkRecordId {
|
String get linkRecordId {
|
||||||
if (!assetUri.startsWith("resrec")) {
|
if (!isLink) {
|
||||||
throw "Record is not a link.";
|
throw "Record is not a link.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,9 @@ import 'dart:async';
|
||||||
|
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:photo_view/photo_view.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:recon/auxiliary.dart';
|
import 'package:recon/auxiliary.dart';
|
||||||
import 'package:recon/clients/inventory_client.dart';
|
import 'package:recon/clients/inventory_client.dart';
|
||||||
import 'package:recon/models/inventory/resonite_directory.dart';
|
import 'package:recon/models/inventory/resonite_directory.dart';
|
||||||
|
@ -9,9 +12,6 @@ import 'package:recon/models/records/record.dart';
|
||||||
import 'package:recon/widgets/default_error_widget.dart';
|
import 'package:recon/widgets/default_error_widget.dart';
|
||||||
import 'package:recon/widgets/inventory/object_inventory_tile.dart';
|
import 'package:recon/widgets/inventory/object_inventory_tile.dart';
|
||||||
import 'package:recon/widgets/inventory/path_inventory_tile.dart';
|
import 'package:recon/widgets/inventory/path_inventory_tile.dart';
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:photo_view/photo_view.dart';
|
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
|
|
||||||
class InventoryBrowser extends StatefulWidget {
|
class InventoryBrowser extends StatefulWidget {
|
||||||
const InventoryBrowser({super.key});
|
const InventoryBrowser({super.key});
|
||||||
|
@ -127,16 +127,23 @@ class _InventoryBrowserState extends State<InventoryBrowser> with AutomaticKeepA
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
itemCount: paths.length,
|
itemCount: paths.length,
|
||||||
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
|
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
|
||||||
maxCrossAxisExtent: 256,
|
maxCrossAxisExtent: 256,
|
||||||
childAspectRatio: 3.5,
|
childAspectRatio: 3.5,
|
||||||
crossAxisSpacing: 0,
|
crossAxisSpacing: 0,
|
||||||
mainAxisSpacing: 0),
|
mainAxisSpacing: 0,
|
||||||
|
),
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final record = paths[index];
|
final record = paths[index];
|
||||||
return PathInventoryTile(
|
return PathInventoryTile(
|
||||||
record: record,
|
record: record,
|
||||||
|
selected: iClient.isRecordSelected(record),
|
||||||
|
onLongPress: () async {
|
||||||
|
iClient.toggleRecordSelected(record);
|
||||||
|
},
|
||||||
onTap: iClient.isAnyRecordSelected
|
onTap: iClient.isAnyRecordSelected
|
||||||
? () {}
|
? () {
|
||||||
|
iClient.toggleRecordSelected(record);
|
||||||
|
}
|
||||||
: () async {
|
: () async {
|
||||||
try {
|
try {
|
||||||
await iClient.navigateTo(record);
|
await iClient.navigateTo(record);
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
import 'dart:isolate';
|
import 'dart:isolate';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:recon/auxiliary.dart';
|
|
||||||
import 'package:recon/clients/inventory_client.dart';
|
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_downloader/flutter_downloader.dart';
|
import 'package:flutter_downloader/flutter_downloader.dart';
|
||||||
import 'package:path/path.dart';
|
import 'package:path/path.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:recon/auxiliary.dart';
|
||||||
|
import 'package:recon/clients/inventory_client.dart';
|
||||||
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
|
||||||
class InventoryBrowserAppBar extends StatefulWidget {
|
class InventoryBrowserAppBar extends StatefulWidget {
|
||||||
const InventoryBrowserAppBar({super.key});
|
const InventoryBrowserAppBar({super.key});
|
||||||
|
@ -71,6 +72,15 @@ class _InventoryBrowserAppBarState extends State<InventoryBrowserAppBar> {
|
||||||
icon: const Icon(Icons.close),
|
icon: const Icon(Icons.close),
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
|
if (iClient.selectedRecordCount == 1 &&
|
||||||
|
(iClient.selectedRecords.firstOrNull?.isLink == true ||
|
||||||
|
iClient.selectedRecords.firstOrNull?.isItem == true))
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
Share.share(iClient.selectedRecords.first.assetUri);
|
||||||
|
},
|
||||||
|
icon: const Icon(Icons.share),
|
||||||
|
),
|
||||||
if (iClient.onlyFilesSelected)
|
if (iClient.onlyFilesSelected)
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
|
|
24
pubspec.lock
24
pubspec.lock
|
@ -504,6 +504,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.1"
|
version: "1.9.1"
|
||||||
|
mime:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: mime
|
||||||
|
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.4"
|
||||||
nested:
|
nested:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -752,6 +760,22 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.27.7"
|
version: "0.27.7"
|
||||||
|
share_plus:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: share_plus
|
||||||
|
sha256: "6cec740fa0943a826951223e76218df002804adb588235a8910dc3d6b0654e11"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.1.0"
|
||||||
|
share_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: share_plus_platform_interface
|
||||||
|
sha256: "357412af4178d8e11d14f41723f80f12caea54cf0d5cd29af9dcdab85d58aea7"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.3.0"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
|
|
|
@ -63,6 +63,7 @@ dependencies:
|
||||||
permission_handler: ^10.2.0
|
permission_handler: ^10.2.0
|
||||||
flutter_downloader: ^1.10.4
|
flutter_downloader: ^1.10.4
|
||||||
flutter_cube: ^0.1.1
|
flutter_cube: ^0.1.1
|
||||||
|
share_plus: ^7.1.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
|
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
|
||||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||||
#include <record_windows/record_windows_plugin_c_api.h>
|
#include <record_windows/record_windows_plugin_c_api.h>
|
||||||
|
#include <share_plus/share_plus_windows_plugin_c_api.h>
|
||||||
#include <url_launcher_windows/url_launcher_windows.h>
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
|
@ -21,6 +22,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
|
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
|
||||||
RecordWindowsPluginCApiRegisterWithRegistrar(
|
RecordWindowsPluginCApiRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("RecordWindowsPluginCApi"));
|
registry->GetRegistrarForPlugin("RecordWindowsPluginCApi"));
|
||||||
|
SharePlusWindowsPluginCApiRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
|
||||||
UrlLauncherWindowsRegisterWithRegistrar(
|
UrlLauncherWindowsRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
flutter_secure_storage_windows
|
flutter_secure_storage_windows
|
||||||
permission_handler_windows
|
permission_handler_windows
|
||||||
record_windows
|
record_windows
|
||||||
|
share_plus
|
||||||
url_launcher_windows
|
url_launcher_windows
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue