12 Commits
Author SHA1 Message Date
julian 125346668a upgrade everything, devenv, flutter, gradle
Build and deploy the latest docker container / deploy (push) Successful in 29m5s
Build and release the latest android apk / rolling-release-apk (push) Successful in 6m1s
2026-07-03 22:35:01 +02:00
julian 38eb1cccc5 pubspec: update
Build and deploy the latest docker container / deploy (push) Successful in 59s
Build and release the latest android apk / rolling-release-apk (push) Successful in 4m50s
2026-07-03 18:41:03 +02:00
julian 46c88df707 use wasm for web compilation, fixing pdfrx 2026-07-03 18:40:47 +02:00
julian c8f941a7e0 Only check for cached pdf files if not web
Build and deploy the latest docker container / deploy (push) Successful in 57s
Build and release the latest android apk / rolling-release-apk (push) Successful in 5m2s
2026-07-03 18:20:33 +02:00
julian 4d1dda0263 Save refresh token only if not null
Build and deploy the latest docker container / deploy (push) Successful in 57s
Build and release the latest android apk / rolling-release-apk (push) Successful in 4m55s
Build and release a versioned android apk / release-apk (push) Successful in 5m2s
2026-07-03 18:15:22 +02:00
julian 1c5df097c4 Make this version 0.2.1
Build and deploy the latest docker container / deploy (push) Successful in 1m6s
Build and release the latest android apk / rolling-release-apk (push) Successful in 5m31s
Build and release a versioned android apk / release-apk (push) Successful in 5m9s
2026-07-03 17:51:03 +02:00
julian 73336ce3fa Show offline symbol at first start if offline 2026-07-03 17:49:06 +02:00
julian baf20e1ca8 Add symbol for offline available sheets 2026-07-03 17:46:50 +02:00
julian e3ee24e06b Remove unnecessary log lines
Build and deploy the latest docker container / deploy (push) Successful in 2m6s
Build and release the latest android apk / rolling-release-apk (push) Failing after 18m49s
2026-07-02 22:46:52 +02:00
julian 2039080a92 auth: use sessions 2026-07-02 22:42:46 +02:00
julian a3069f0864 pubspec: update 2026-07-02 19:16:25 +02:00
julian c468321637 fix documents path not found on linux 2026-07-02 19:16:13 +02:00
20 changed files with 344 additions and 198 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ subprojects {
val android = project.extensions.findByName("android") val android = project.extensions.findByName("android")
if (android is com.android.build.gradle.BaseExtension) { if (android is com.android.build.gradle.BaseExtension) {
// Force the same sdk version everywhere // Force the same sdk version everywhere
android.ndkVersion = "27.2.12479018" android.ndkVersion = "29.0.14206865"
} }
} }
} }
File diff suppressed because one or more lines are too long
+4
View File
@@ -1,3 +1,7 @@
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
# This builtInKotlin flag was added automatically by Flutter migrator
android.builtInKotlin=false
# This newDsl flag was added automatically by Flutter migrator
android.newDsl=false
+1 -1
View File
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-all.zip
+2 -2
View File
@@ -18,8 +18,8 @@ pluginManagement {
plugins { plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.9.1" apply false id("com.android.application") version "8.12.0" apply false
id("org.jetbrains.kotlin.android") version "2.1.0" apply false id("org.jetbrains.kotlin.android") version "2.2.20" apply false
} }
include(":app") include(":app")
+6 -4
View File
@@ -3,10 +3,11 @@
"devenv": { "devenv": {
"locked": { "locked": {
"dir": "src/modules", "dir": "src/modules",
"lastModified": 1770167382, "lastModified": 1783049965,
"narHash": "sha256-z2QvrvE+gzLnpqfLpQA4aq2gAB4xn6C5q2o1l7GBMXU=",
"owner": "cachix", "owner": "cachix",
"repo": "devenv", "repo": "devenv",
"rev": "195375e3f0a3c3ac4f12b21d3f59a7ddb209bd1f", "rev": "afed7bf3240c70d2827569568d2c46c25a64db51",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -18,10 +19,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1770115704, "lastModified": 1782723713,
"narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e6eae2ee2110f3d31110d5c222cd395303343b08", "rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
"type": "github" "type": "github"
}, },
"original": { "original": {
+16 -11
View File
@@ -1,4 +1,4 @@
{pkgs, ...}: { { pkgs, ... }: {
android = { android = {
enable = true; enable = true;
emulator.enable = false; emulator.enable = false;
@@ -6,23 +6,25 @@
flutter.package = pkgs.flutter; flutter.package = pkgs.flutter;
buildTools.version = [ buildTools.version = [
# Put version to compile with first! # Put the latest version to compile with first!
"36.0.0" # Android 16/17 target
"35.0.0" "35.0.0"
"33.0.1"
"34.0.0" "34.0.0"
]; ];
platforms.version = [ platforms.version = [
"36" "37" # Android 17
"35" "36" # Android 16
"34" "35" # Android 15
]; ];
ndk.enable = true; ndk.enable = true;
ndk.version = [ ndk.version = [
"27.2.12479018" "29.0.14206865" # NDK r29 (Latest Stable)
"27.0.12077973" "27.3.13750724" # NDK r27d (Latest LTS)
"26.3.11579264" "27.2.12479018" # Kept for backward compatibility
"25.1.8937393"
]; ];
extraLicenses = [ extraLicenses = [
"android-googlexr-license" "android-googlexr-license"
"android-sdk-preview-license" "android-sdk-preview-license"
@@ -38,6 +40,9 @@
packages = with pkgs; [ packages = with pkgs; [
# Needed by flutter_secure_storage # Needed by flutter_secure_storage
libsecret.dev libsecret.dev
# Needed by path_provider on linux
xdg-user-dirs
]; ];
processes.web-server = { processes.web-server = {
@@ -48,7 +53,7 @@
build-docker.exec = '' build-docker.exec = ''
dart run pdfrx:remove_wasm_modules --revert // Make sure WASM is put in output dart run pdfrx:remove_wasm_modules --revert // Make sure WASM is put in output
flutter build web --release flutter build web --release --wasm
docker build -t gitlab.julian-mutter.de/julian/sheetless-frontend:latest . docker build -t gitlab.julian-mutter.de/julian/sheetless-frontend:latest .
''; '';
+2
View File
@@ -7,12 +7,14 @@ class Sheet {
String name; String name;
String composer; String composer;
DateTime updatedAt; DateTime updatedAt;
bool availableOffline;
Sheet({ Sheet({
required this.uuid, required this.uuid,
required this.name, required this.name,
required this.composer, required this.composer,
required this.updatedAt, required this.updatedAt,
this.availableOffline = false,
}); });
/// Creates a [Sheet] from a JSON map returned by the API. /// Creates a [Sheet] from a JSON map returned by the API.
+110 -35
View File
@@ -10,39 +10,30 @@ import '../models/change.dart';
import '../models/sheet.dart'; import '../models/sheet.dart';
/// HTTP client for communicating with the Sheetless API server. /// HTTP client for communicating with the Sheetless API server.
///
/// Handles authentication, sheet listing, and PDF downloads.
/// Provides caching for PDF files on native platforms.
class ApiClient { class ApiClient {
final _log = Logger('ApiClient'); final _log = Logger('ApiClient');
final String baseUrl; final String baseUrl;
String? token; String? accessToken; // Short-lived jwt
String? refreshToken; // Long lived binary token
ApiClient({required this.baseUrl, this.token}); ApiClient({required this.baseUrl, this.refreshToken});
/// Whether the client has an authentication token set.
bool get isAuthenticated => token != null;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Authentication // Authentication
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/// Authenticates with the server and stores the JWT token.
///
/// Throws an [Exception] if login fails.
Future<void> login(String username, String password) async { Future<void> login(String username, String password) async {
_log.info('Logging in...'); _log.info('Logging in...');
final url = Uri.parse('$baseUrl/auth/login');
final response = await http.post( final response = await post("/auth/login", {
url, 'username': username,
headers: {'Content-Type': 'application/json'}, 'password': password,
body: jsonEncode({'username': username, 'password': password}), }, authenticateWithAccessToken: false);
);
if (response.statusCode == 200) { if (response.statusCode == 200) {
final responseData = jsonDecode(response.body); final responseData = jsonDecode(response.body);
token = responseData['token']; accessToken = responseData['access_token'];
refreshToken = responseData['refresh_token'];
_log.info('Login successful'); _log.info('Login successful');
} else { } else {
throw ApiException( throw ApiException(
@@ -53,9 +44,36 @@ class ApiClient {
} }
} }
/// Clears the authentication token. Future<void> refreshAccessToken() async {
void logout() { _log.info('Refreshing access token...');
token = null; final response = await post("/auth/refresh", {
"refresh_token": refreshToken,
}, authenticateWithAccessToken: false);
if (response.statusCode == 200) {
final responseData = jsonDecode(response.body);
accessToken = responseData['access_token'];
_log.info('Token refresh successful');
} else {
throw ApiException(
'Token refresh failed',
statusCode: response.statusCode,
body: response.body,
);
}
}
Future<void> logout() async {
try {
await post(
"/auth/logout",
{},
authenticateWithAccessToken: true,
); // Ignoring response, logging out in any case
} catch (e) {
_log.fine('Logout failed: $e');
}
accessToken = null;
refreshToken = null;
_log.info('Logged out successfully'); _log.info('Logged out successfully');
} }
@@ -63,21 +81,44 @@ class ApiClient {
// HTTP Helpers // HTTP Helpers
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
Map<String, String> _buildHeaders({bool isBinary = false}) { Map<String, String> _buildHeaders({
return { bool authenticateWithAccessToken = false,
'Authorization': 'Bearer $token', bool isBinary = false,
}) {
final headers = {
if (authenticateWithAccessToken) 'Authorization': 'Bearer $accessToken',
if (!isBinary) 'Content-Type': 'application/json', if (!isBinary) 'Content-Type': 'application/json',
}; };
return headers;
} }
/// Performs a GET request to the given endpoint. /// Performs a GET request to the given endpoint.
Future<http.Response> get(String endpoint, {bool isBinary = false}) async { Future<http.Response> get(
String endpoint, {
bool isBinary = false,
bool authenticateWithAccessToken = true,
bool isRetry = false,
}) async {
final url = Uri.parse('$baseUrl$endpoint'); final url = Uri.parse('$baseUrl$endpoint');
final response = await http.get( final response = await http.get(
url, url,
headers: _buildHeaders(isBinary: isBinary), headers: _buildHeaders(
isBinary: isBinary,
authenticateWithAccessToken: authenticateWithAccessToken,
),
); );
// Unauthorized, refresh access token
if (authenticateWithAccessToken && response.statusCode == 401 && !isRetry) {
await refreshAccessToken();
return get(
endpoint,
isBinary: isBinary,
authenticateWithAccessToken: authenticateWithAccessToken,
isRetry: true,
);
}
if (response.statusCode != 200) { if (response.statusCode != 200) {
_log.warning( _log.warning(
"GET '$endpoint' failed: ${response.statusCode}\n${response.body}", "GET '$endpoint' failed: ${response.statusCode}\n${response.body}",
@@ -93,15 +134,33 @@ class ApiClient {
} }
/// Performs a POST request with JSON body. /// Performs a POST request with JSON body.
Future<http.Response> post(String endpoint, Map<String, dynamic> body) async { Future<http.Response> post(
String endpoint,
Map<String, dynamic> body, {
bool authenticateWithAccessToken = true,
bool isRetry = false,
}) async {
final url = Uri.parse('$baseUrl$endpoint'); final url = Uri.parse('$baseUrl$endpoint');
final response = await http.post( final response = await http.post(
url, url,
headers: _buildHeaders(), headers: _buildHeaders(
authenticateWithAccessToken: authenticateWithAccessToken,
),
body: jsonEncode(body), body: jsonEncode(body),
); );
// Unauthorized, refresh access token
if (authenticateWithAccessToken && response.statusCode == 401 && !isRetry) {
await refreshAccessToken();
return post(
endpoint,
body,
authenticateWithAccessToken: authenticateWithAccessToken,
isRetry: true,
);
}
if (response.statusCode != 200 && response.statusCode != 201) { if (response.statusCode != 200 && response.statusCode != 201) {
_log.warning( _log.warning(
"POST '$endpoint' failed: ${response.statusCode}\n${response.body}", "POST '$endpoint' failed: ${response.statusCode}\n${response.body}",
@@ -117,18 +176,28 @@ class ApiClient {
} }
/// Performs a POST request with form-encoded body. /// Performs a POST request with form-encoded body.
Future<http.Response> postFormData(String endpoint, String body) async { Future<http.Response> postFormData(
String endpoint,
String body, {
bool isRetry = false,
}) async {
final url = Uri.parse('$baseUrl$endpoint'); final url = Uri.parse('$baseUrl$endpoint');
final response = await http.post( final response = await http.post(
url, url,
headers: { headers: {
'Authorization': 'Bearer $token', 'Authorization': 'Bearer $accessToken',
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
}, },
body: body, body: body,
); );
// Unauthorized, refresh access token
if (response.statusCode == 401 && !isRetry) {
await refreshAccessToken();
return postFormData(endpoint, body, isRetry: true);
}
if (response.statusCode != 200 && response.statusCode != 201) { if (response.statusCode != 200 && response.statusCode != 201) {
_log.warning( _log.warning(
"POST Form '$endpoint' failed: ${response.statusCode}\n${response.body}", "POST Form '$endpoint' failed: ${response.statusCode}\n${response.body}",
@@ -185,6 +254,13 @@ class ApiClient {
return cachedFile; return cachedFile;
} }
Future<bool> isPdfFileCached(String sheetUuid) async {
final cacheDir = await getTemporaryDirectory();
final cachedFile = File('${cacheDir.path}/$sheetUuid.pdf');
return await cachedFile.exists();
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Annotation Operations // Annotation Operations
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@@ -248,10 +324,9 @@ class ApiClient {
/// Returns true if the server responds, false otherwise. /// Returns true if the server responds, false otherwise.
Future<bool> checkConnection() async { Future<bool> checkConnection() async {
try { try {
final url = Uri.parse('$baseUrl/api/health'); final response = await get(
final response = await http "/api/health",
.get(url, headers: _buildHeaders()) ).timeout(const Duration(seconds: 5));
.timeout(const Duration(seconds: 5));
return response.statusCode == 200; return response.statusCode == 200;
} catch (e) { } catch (e) {
_log.fine('Connection check failed: $e'); _log.fine('Connection check failed: $e');
+4 -3
View File
@@ -7,7 +7,7 @@ import 'package:sheetless/core/models/config.dart';
import 'package:sheetless/core/models/sheet.dart'; import 'package:sheetless/core/models/sheet.dart';
/// Keys for secure storage (credentials and tokens). /// Keys for secure storage (credentials and tokens).
enum SecureStorageKey { url, jwt, email } enum SecureStorageKey { url, refreshToken, username }
/// Data class for storing annotations with metadata. /// Data class for storing annotations with metadata.
class StoredAnnotation { class StoredAnnotation {
@@ -110,7 +110,7 @@ class StorageService {
/// while preserving server URL and email for convenience. /// while preserving server URL and email for convenience.
Future<void> clearAllUserData() async { Future<void> clearAllUserData() async {
// Clear JWT token // Clear JWT token
await writeSecure(SecureStorageKey.jwt, null); await writeSecure(SecureStorageKey.refreshToken, null);
// Clear all Hive boxes // Clear all Hive boxes
final sheetAccessTimesBox = await Hive.openBox(_sheetAccessTimesBox); final sheetAccessTimesBox = await Hive.openBox(_sheetAccessTimesBox);
@@ -123,7 +123,8 @@ class StorageService {
await changeQueueBox.clear(); await changeQueueBox.clear();
final annotationsBox = await Hive.openBox(_annotationsBox); final annotationsBox = await Hive.openBox(_annotationsBox);
await annotationsBox.clear(); await annotationsBox
.clear(); // TODO: this can lead to a loss of important data. Make sure the user is warned
final sheetsBox = await Hive.openBox(_sheetsBox); final sheetsBox = await Hive.openBox(_sheetsBox);
await sheetsBox.clear(); await sheetsBox.clear();
+23 -8
View File
@@ -48,9 +48,12 @@ class _LoginPageState extends State<LoginPage> {
/// Attempts to auto-login using a stored JWT token. /// Attempts to auto-login using a stored JWT token.
Future<void> _tryAutoLogin() async { Future<void> _tryAutoLogin() async {
final jwt = await _storageService.readSecure(SecureStorageKey.jwt); final refreshToken = await _storageService.readSecure(
SecureStorageKey.refreshToken,
);
if (jwt != null && _isTokenValid(jwt)) { if (refreshToken != null) {
// TODO: this assumes the refresh token is always valid
await _navigateToHome(); await _navigateToHome();
return; return;
} }
@@ -71,7 +74,9 @@ class _LoginPageState extends State<LoginPage> {
/// Restores previously saved URL and username for convenience. /// Restores previously saved URL and username for convenience.
Future<void> _restoreCredentials() async { Future<void> _restoreCredentials() async {
final url = await _storageService.readSecure(SecureStorageKey.url); final url = await _storageService.readSecure(SecureStorageKey.url);
final username = await _storageService.readSecure(SecureStorageKey.email); final username = await _storageService.readSecure(
SecureStorageKey.username,
);
if (url != null) _urlController.text = url; if (url != null) _urlController.text = url;
if (username != null) _usernameController.text = username; if (username != null) _usernameController.text = username;
@@ -96,8 +101,15 @@ class _LoginPageState extends State<LoginPage> {
await apiClient.login(_usernameController.text, _passwordController.text); await apiClient.login(_usernameController.text, _passwordController.text);
// Save credentials for next time // Save credentials for next time
await _saveCredentials(apiClient.token!); if (apiClient.refreshToken == null) {
await _navigateToHome(); _log.warning('Login failed, refreshToken is null');
setState(() {
_errorMessage = 'Login failed.\nRefresh token is null';
});
} else {
await _saveCredentials(apiClient.refreshToken!);
await _navigateToHome();
}
} catch (e) { } catch (e) {
_log.warning('Login failed', e); _log.warning('Login failed', e);
setState(() { setState(() {
@@ -111,14 +123,17 @@ class _LoginPageState extends State<LoginPage> {
} }
/// Saves credentials after successful login. /// Saves credentials after successful login.
Future<void> _saveCredentials(String token) async { Future<void> _saveCredentials(String refreshToken) async {
await _storageService.writeSecure( await _storageService.writeSecure(
SecureStorageKey.url, SecureStorageKey.url,
_urlController.text, _urlController.text,
); );
await _storageService.writeSecure(SecureStorageKey.jwt, token);
await _storageService.writeSecure( await _storageService.writeSecure(
SecureStorageKey.email, SecureStorageKey.refreshToken,
refreshToken,
);
await _storageService.writeSecure(
SecureStorageKey.username,
_usernameController.text, _usernameController.text,
); );
} }
+15 -3
View File
@@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_fullscreen/flutter_fullscreen.dart'; import 'package:flutter_fullscreen/flutter_fullscreen.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
@@ -103,9 +104,11 @@ class _HomePageState extends State<HomePage> with RouteAware {
Future<SyncResult> _loadSheets() async { Future<SyncResult> _loadSheets() async {
final url = await _storageService.readSecure(SecureStorageKey.url); final url = await _storageService.readSecure(SecureStorageKey.url);
final jwt = await _storageService.readSecure(SecureStorageKey.jwt); final refreshToken = await _storageService.readSecure(
SecureStorageKey.refreshToken,
);
_apiClient = ApiClient(baseUrl: url!, token: jwt); _apiClient = ApiClient(baseUrl: url!, refreshToken: refreshToken);
_syncService = SyncService( _syncService = SyncService(
apiClient: _apiClient!, apiClient: _apiClient!,
storageService: _storageService, storageService: _storageService,
@@ -121,7 +124,15 @@ class _HomePageState extends State<HomePage> with RouteAware {
// Sort and store sheets // Sort and store sheets
_sheets = await _sortSheetsByRecency(result.sheets); _sheets = await _sortSheetsByRecency(result.sheets);
_isOnline = result.isOnline; setState(() {
_isOnline = result.isOnline;
});
if (!kIsWeb) {
for (var sheet in _sheets) {
sheet.availableOffline = await _apiClient!.isPdfFileCached(sheet.uuid);
}
}
return result; return result;
} }
@@ -169,6 +180,7 @@ class _HomePageState extends State<HomePage> with RouteAware {
Future<void> _handleLogout() async { Future<void> _handleLogout() async {
await _storageService.clearAllUserData(); await _storageService.clearAllUserData();
await _apiClient!.logout();
if (!mounted) return; if (!mounted) return;
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import '../../../core/models/sheet.dart'; import '../../../core/models/sheet.dart';
/// A list tile displaying a single sheet's information. /// A list tile displaying a single sheet's information.
@@ -24,6 +25,10 @@ class SheetListItem extends StatelessWidget {
subtitle: Text(sheet.composer), subtitle: Text(sheet.composer),
onTap: onTap, onTap: onTap,
onLongPress: onLongPress, onLongPress: onLongPress,
trailing: Visibility(
visible: !kIsWeb && sheet.availableOffline,
child: Icon(Icons.download_done, color: Colors.green),
),
); );
} }
} }
@@ -98,6 +98,7 @@ class _SheetViewerPageState extends State<SheetViewerPage>
// Native: use file cache // Native: use file cache
final file = await widget.apiClient.getPdfFileCached(widget.sheet.uuid); final file = await widget.apiClient.getPdfFileCached(widget.sheet.uuid);
_document = await PdfDocument.openFile(file.path); _document = await PdfDocument.openFile(file.path);
widget.sheet.availableOffline = true;
} }
setState(() { setState(() {
+1 -1
View File
@@ -39,7 +39,7 @@ Future<void> _initializePlugins() async {
// PDF rendering (especially needed for web) // PDF rendering (especially needed for web)
pdfrxFlutterInitialize(); pdfrxFlutterInitialize();
// Local storage (not supported on web) // Local storage (not supported or necessary on web)
if (!kIsWeb) { if (!kIsWeb) {
final dir = await getApplicationDocumentsDirectory(); final dir = await getApplicationDocumentsDirectory();
Hive.init(dir.path); Hive.init(dir.path);
+1 -1
View File
@@ -10,7 +10,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST
pdfium_flutter jni
) )
set(PLUGIN_BUNDLED_LIBRARIES) set(PLUGIN_BUNDLED_LIBRARIES)
+2 -2
View File
@@ -1,3 +1,3 @@
# This file was automatically generated by nix-shell. # This file was automatically generated by nix-shell.
sdk.dir=/nix/store/ri84qrj5wk61x6cja29cfcv5x0iarhs5-androidsdk/libexec/android-sdk sdk.dir=/nix/store/xxvb6m6dqjgdxk9xvwk8vlwapm8pgsdk-androidsdk/libexec/android-sdk
ndk.dir=/nix/store/ri84qrj5wk61x6cja29cfcv5x0iarhs5-androidsdk/libexec/android-sdk/ndk-bundle ndk.dir=/nix/store/xxvb6m6dqjgdxk9xvwk8vlwapm8pgsdk-androidsdk/libexec/android-sdk/ndk-bundle
+144 -120
View File
@@ -5,10 +5,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: archive name: archive
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.7" version: "4.0.9"
args: args:
dependency: transitive dependency: transitive
description: description:
@@ -21,10 +21,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: async name: async
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.13.0" version: "2.13.1"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
@@ -37,10 +37,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.1"
checked_yaml: checked_yaml:
dependency: transitive dependency: transitive
description: description:
@@ -69,10 +69,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: code_assets name: code_assets
sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687" sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0" version: "1.2.1"
collection: collection:
dependency: transitive dependency: transitive
description: description:
@@ -93,10 +93,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: cupertino_icons name: cupertino_icons
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.8" version: "1.0.9"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
@@ -109,10 +109,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
sha256: d07d37192dbf97461359c1518788f203b0c9102cfd2c35a716b823741219542c sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "2.2.0"
ffi_leak_tracker:
dependency: transitive
description:
name: ffi_leak_tracker
sha256: "4093d4ef9ca06ffe2786e73bfb25e22aa92112b9bb4ec941f11e3e6b61489a97"
url: "https://pub.dev"
source: hosted
version: "0.1.2"
file: file:
dependency: transitive dependency: transitive
description: description:
@@ -170,26 +178,26 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_secure_storage name: flutter_secure_storage
sha256: da922f2aab2d733db7e011a6bcc4a825b844892d4edd6df83ff156b09a9b2e40 sha256: "7686b1d6a29985dcbb808c59518226e603e3bfa7c0ddfd1a0d00e4cda77c868e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.0" version: "10.3.1"
flutter_secure_storage_darwin: flutter_secure_storage_darwin:
dependency: transitive dependency: transitive
description: description:
name: flutter_secure_storage_darwin name: flutter_secure_storage_darwin
sha256: "8878c25136a79def1668c75985e8e193d9d7d095453ec28730da0315dc69aee3" sha256: "82329fa5cdf343773b1b6897dea959105a29f092454259edff92f9f6637e8149"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.3.2"
flutter_secure_storage_linux: flutter_secure_storage_linux:
dependency: transitive dependency: transitive
description: description:
name: flutter_secure_storage_linux name: flutter_secure_storage_linux
sha256: "2b5c76dce569ab752d55a1cee6a2242bcc11fdba927078fb88c503f150767cda" sha256: a5f35ddab43cf5c8215d2feb4ce1957851f28c5c37e6f04335066a0602087bf5
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.0" version: "3.0.1"
flutter_secure_storage_platform_interface: flutter_secure_storage_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -202,18 +210,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_secure_storage_web name: flutter_secure_storage_web
sha256: "6a1137df62b84b54261dca582c1c09ea72f4f9a4b2fcee21b025964132d5d0c3" sha256: "073a62b3aeb866ab4ce795f960413948e51e5a42a9b0c8333b6daf5bb3208a1c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.1"
flutter_secure_storage_windows: flutter_secure_storage_windows:
dependency: transitive dependency: transitive
description: description:
name: flutter_secure_storage_windows name: flutter_secure_storage_windows
sha256: "3b7c8e068875dfd46719ff57c90d8c459c87f2302ed6b00ff006b3c9fcad1613" sha256: "471951813a97006d899db4948acc654a4f28c440083ea08178935ce20b173ec1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.1.0" version: "4.2.2"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@@ -224,14 +232,6 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
glob:
dependency: transitive
description:
name: glob
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.dev"
source: hosted
version: "2.1.3"
hive: hive:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -244,10 +244,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: hooks name: hooks
sha256: "7a08a0d684cb3b8fb604b78455d5d352f502b68079f7b80b831c62220ab0a4f6" sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.1" version: "2.0.2"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -268,18 +268,34 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: image name: image
sha256: "492bd52f6c4fbb6ee41f781ff27765ce5f627910e1e0cbecfa3d9add5562604c" sha256: "6300175e00616bbc832e2fc91bfa4d776af5402c81c7151bee6905bb08473c52"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.7.2" version: "4.9.1"
jni:
dependency: transitive
description:
name: jni
sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f
url: "https://pub.dev"
source: hosted
version: "1.0.0"
jni_flutter:
dependency: transitive
description:
name: jni_flutter
sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
json_annotation: json_annotation:
dependency: transitive dependency: transitive
description: description:
name: json_annotation name: json_annotation
sha256: "805fa86df56383000f640384b282ce0cb8431f1a7a2396de92fb66186d8c57df" sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.10.0" version: "4.12.0"
jwt_decoder: jwt_decoder:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -332,58 +348,58 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.17" version: "0.12.19"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.1" version: "0.13.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.0" version: "1.18.0"
native_toolchain_c:
dependency: transitive
description:
name: native_toolchain_c
sha256: "89e83885ba09da5fdf2cdacc8002a712ca238c28b7f717910b34bcd27b0d03ac"
url: "https://pub.dev"
source: hosted
version: "0.17.4"
objective_c: objective_c:
dependency: transitive dependency: transitive
description: description:
name: objective_c name: objective_c
sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52" sha256: "6cb691c686fa2838c6deb34980d426145c2a5d537491cb83d463c33cdbc726ed"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.3.0" version: "9.4.1"
package_config:
dependency: transitive
description:
name: package_config
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
url: "https://pub.dev"
source: hosted
version: "2.2.0"
package_info_plus: package_info_plus:
dependency: "direct main" dependency: "direct main"
description: description:
name: package_info_plus name: package_info_plus
sha256: f69da0d3189a4b4ceaeb1a3defb0f329b3b352517f52bed4290f83d4f06bc08d sha256: f5c435dc0e0d461e5b32471a870f769b6a1cc46930637efe24fbc535314e78ad
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.0.0" version: "10.2.0"
package_info_plus_platform_interface: package_info_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: package_info_plus_platform_interface name: package_info_plus_platform_interface
sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" sha256: db762cb2f4f25ee60fb6359773861b0f199e00b90d237bd85a76a1e806b46ef4
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.2.1" version: "4.1.0"
path: path:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -396,18 +412,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: path_provider name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "2.1.6"
path_provider_android: path_provider_android:
dependency: transitive dependency: transitive
description: description:
name: path_provider_android name: path_provider_android
sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.22" version: "2.3.1"
path_provider_foundation: path_provider_foundation:
dependency: transitive dependency: transitive
description: description:
@@ -420,18 +436,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider_linux name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.1" version: "2.2.2"
path_provider_platform_interface: path_provider_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.1.3"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
@@ -444,42 +460,42 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: pdfium_dart name: pdfium_dart
sha256: f1683b9070ddc5c9189c6ee008c285791da66328ce1b882c7162d3393f3a4a74 sha256: "86e95c66b09f3245b95c4924f2edce8d4f7c9786876e5c5ee8e36b104a94bbb0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.3" version: "0.2.5"
pdfium_flutter: pdfium_flutter:
dependency: transitive dependency: transitive
description: description:
name: pdfium_flutter name: pdfium_flutter
sha256: "0c8b7d5d11d20a1486eade599648e907067568955bd14a1b06de076a968b60a1" sha256: "420ba8e7673b54da387ceeeb18a72c8bc6e4452128dbb391dca900c748f9e9ba"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.9" version: "0.2.2"
pdfrx: pdfrx:
dependency: "direct main" dependency: "direct main"
description: description:
name: pdfrx name: pdfrx
sha256: e32e0c786528eec2b3c56b43f59ef1debce3a27c7accd862b95413f949afcfa9 sha256: e0ca318004c3f32144db8e74fa612abb80ebe79004677293af74ed9af119f47f
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.24" version: "2.4.4"
pdfrx_engine: pdfrx_engine:
dependency: transitive dependency: transitive
description: description:
name: pdfrx_engine name: pdfrx_engine
sha256: a8914433d1f6188b903c53d36b9d7dc908bfa89131591a9db22f1a22470d3a48 sha256: "89865e158ced818690ab207a13a34a65803cd67ee1bec9f5f87838eb5a79600b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.9" version: "0.4.3"
permission_handler: permission_handler:
dependency: "direct main" dependency: "direct main"
description: description:
name: permission_handler name: permission_handler
sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1 sha256: fe54465bcc62a4564c6e4db337bbaded6c0c0fa6e10487414436d163114784f6
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "12.0.1" version: "12.0.3"
permission_handler_android: permission_handler_android:
dependency: transitive dependency: transitive
description: description:
@@ -492,10 +508,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_apple name: permission_handler_apple
sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023 sha256: "79dfa1df734798aa3cfdad166d3a3698c206d8813de13516ea1071b5d7e2f420"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.4.7" version: "9.4.10"
permission_handler_html: permission_handler_html:
dependency: transitive dependency: transitive
description: description:
@@ -524,10 +540,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: petitparser name: petitparser
sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.1" version: "7.0.2"
platform: platform:
dependency: transitive dependency: transitive
description: description:
@@ -548,10 +564,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: posix name: posix
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.0.3" version: "6.5.0"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
@@ -560,6 +576,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.2.0"
record_use:
dependency: transitive
description:
name: record_use
sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed"
url: "https://pub.dev"
source: hosted
version: "0.6.0"
rxdart: rxdart:
dependency: transitive dependency: transitive
description: description:
@@ -572,42 +596,42 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: screen_retriever name: screen_retriever
sha256: "570dbc8e4f70bac451e0efc9c9bb19fa2d6799a11e6ef04f946d7886d2e23d0c" sha256: "42cc3b402a0f67d2455a0d067553d0f13453f6a008d98eababf8b63958d506bd"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.2.1"
screen_retriever_linux: screen_retriever_linux:
dependency: transitive dependency: transitive
description: description:
name: screen_retriever_linux name: screen_retriever_linux
sha256: f7f8120c92ef0784e58491ab664d01efda79a922b025ff286e29aa123ea3dd18 sha256: "2a476f1a5538065bc5badf376cfdc83d6ecf07d77eb2391b9c2bff5a76970048"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.2.1"
screen_retriever_macos: screen_retriever_macos:
dependency: transitive dependency: transitive
description: description:
name: screen_retriever_macos name: screen_retriever_macos
sha256: "71f956e65c97315dd661d71f828708bd97b6d358e776f1a30d5aa7d22d78a149" sha256: b5abb900fcb86614ff10b738b34e37b9e1d03b0447280668e2bc8a98bdc7bd59
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.2.1"
screen_retriever_platform_interface: screen_retriever_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: screen_retriever_platform_interface name: screen_retriever_platform_interface
sha256: ee197f4581ff0d5608587819af40490748e1e39e648d7680ecf95c05197240c0 sha256: "3af22d926bedf20c2caa308eea376776451a3af125919ce072e56525fded8901"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.2.1"
screen_retriever_windows: screen_retriever_windows:
dependency: transitive dependency: transitive
description: description:
name: screen_retriever_windows name: screen_retriever_windows
sha256: "449ee257f03ca98a57288ee526a301a430a344a161f9202b4fcc38576716fe13" sha256: c44b38a4c4bab34af259180a70a4eee1e29384e7b82e627c9faa68afcdab2e73
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.2.1"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -625,42 +649,42 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: sqflite name: sqflite
sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03 sha256: "58a799e6ac17dd32fbab93813d39ed835a75ccc0f8f85b8955fe318c6712b082"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2" version: "2.4.3"
sqflite_android: sqflite_android:
dependency: transitive dependency: transitive
description: description:
name: sqflite_android name: sqflite_android
sha256: ecd684501ebc2ae9a83536e8b15731642b9570dc8623e0073d227d0ee2bfea88 sha256: d0548f9d7422a2dae99ec6f8b0a3074463b132d216fa5ba0d230eeefc901983b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2+2" version: "2.4.3"
sqflite_common: sqflite_common:
dependency: transitive dependency: transitive
description: description:
name: sqflite_common name: sqflite_common
sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6" sha256: "5bf6a55c166e73bf651ba7ec3ed486e577620e3dc8f3a9c6a258a8031b624590"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.6" version: "2.5.11"
sqflite_darwin: sqflite_darwin:
dependency: transitive dependency: transitive
description: description:
name: sqflite_darwin name: sqflite_darwin
sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" sha256: c86ca18b8f666bbf903924687fe21cc16fc385d086005067e26619ca530bef9f
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2" version: "2.4.3+1"
sqflite_platform_interface: sqflite_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: sqflite_platform_interface name: sqflite_platform_interface
sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" sha256: f84939f84350d92d04416f8bc4dc52d3896aec7716cc9e80cf0146342139dc50
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.0" version: "2.4.1"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
@@ -689,10 +713,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: synchronized name: synchronized
sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 sha256: "93b153dcb6a26dcddee6ca087dd634b53e38c10b5aa163e8e49501a776456153"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.4.0" version: "3.4.1"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
@@ -705,10 +729,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.7" version: "0.7.11"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
@@ -729,18 +753,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_android name: url_launcher_android
sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611" sha256: b413d49b73867ac08dd2f9890efd3cc11f2a0e577618d50843440a1fb3776c32
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.28" version: "6.3.32"
url_launcher_ios: url_launcher_ios:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_ios name: url_launcher_ios
sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.6" version: "6.4.1"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
@@ -769,10 +793,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_web name: url_launcher_web
sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2" version: "2.4.3"
url_launcher_windows: url_launcher_windows:
dependency: transitive dependency: transitive
description: description:
@@ -785,10 +809,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: uuid name: uuid
sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8 sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.5.2" version: "4.5.3"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
@@ -801,10 +825,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "15.0.2" version: "15.2.0"
web: web:
dependency: transitive dependency: transitive
description: description:
@@ -817,10 +841,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e sha256: ba6f4bba816c8d7e3c1580e170f3786d216951cc6b94babc3b814c08d2cb2738
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.15.0" version: "6.3.0"
window_manager: window_manager:
dependency: transitive dependency: transitive
description: description:
@@ -841,10 +865,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: xml name: xml
sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" sha256: "67f0aff7be013d107995e9b75bf4e7f2c3ef2dfdb2c8e68024bba0a7fd5756a4"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.6.1" version: "7.0.1"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:
@@ -854,5 +878,5 @@ packages:
source: hosted source: hosted
version: "3.1.3" version: "3.1.3"
sdks: sdks:
dart: ">=3.10.3 <4.0.0" dart: ">=3.12.0 <4.0.0"
flutter: ">=3.38.4" flutter: ">=3.44.0"
+3 -3
View File
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 0.2.0 version: 0.2.1
environment: environment:
sdk: ^3.0.0 sdk: ^3.0.0
@@ -43,12 +43,12 @@ dependencies:
flutter_cache_manager: ^3.4.1 flutter_cache_manager: ^3.4.1
flutter_secure_storage: ^10.0.0 flutter_secure_storage: ^10.0.0
jwt_decoder: ^2.0.1 jwt_decoder: ^2.0.1
pdfrx: ^2.0.4 pdfrx: ^2.4.4
logging: ^1.3.0 logging: ^1.3.0
flutter_launcher_icons: ^0.14.4 flutter_launcher_icons: ^0.14.4
hive: ^2.2.3 hive: ^2.2.3
flutter_fullscreen: ^1.2.0 flutter_fullscreen: ^1.2.0
package_info_plus: ^9.0.0 package_info_plus: ^10.2.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
+1 -1
View File
@@ -11,7 +11,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST
pdfium_flutter jni
) )
set(PLUGIN_BUNDLED_LIBRARIES) set(PLUGIN_BUNDLED_LIBRARIES)