Merge branch 'deprecation-and-library-upgrade-fixes' into 'main'

Deprecation and library upgrade fixes

See merge request mysocialportal/relatica!59
This commit is contained in:
HankG 2024-07-26 14:27:35 +00:00
commit a5aa0b71ce
50 changed files with 702 additions and 658 deletions

View file

@ -1,35 +1,35 @@
PODS: PODS:
- device_info_plus (0.0.1): - device_info_plus (0.0.1):
- Flutter - Flutter
- DKImagePickerController/Core (4.3.4): - DKImagePickerController/Core (4.3.9):
- DKImagePickerController/ImageDataManager - DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource - DKImagePickerController/Resource
- DKImagePickerController/ImageDataManager (4.3.4) - DKImagePickerController/ImageDataManager (4.3.9)
- DKImagePickerController/PhotoGallery (4.3.4): - DKImagePickerController/PhotoGallery (4.3.9):
- DKImagePickerController/Core - DKImagePickerController/Core
- DKPhotoGallery - DKPhotoGallery
- DKImagePickerController/Resource (4.3.4) - DKImagePickerController/Resource (4.3.9)
- DKPhotoGallery (0.0.17): - DKPhotoGallery (0.0.19):
- DKPhotoGallery/Core (= 0.0.17) - DKPhotoGallery/Core (= 0.0.19)
- DKPhotoGallery/Model (= 0.0.17) - DKPhotoGallery/Model (= 0.0.19)
- DKPhotoGallery/Preview (= 0.0.17) - DKPhotoGallery/Preview (= 0.0.19)
- DKPhotoGallery/Resource (= 0.0.17) - DKPhotoGallery/Resource (= 0.0.19)
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- DKPhotoGallery/Core (0.0.17): - DKPhotoGallery/Core (0.0.19):
- DKPhotoGallery/Model - DKPhotoGallery/Model
- DKPhotoGallery/Preview - DKPhotoGallery/Preview
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- DKPhotoGallery/Model (0.0.17): - DKPhotoGallery/Model (0.0.19):
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- DKPhotoGallery/Preview (0.0.17): - DKPhotoGallery/Preview (0.0.19):
- DKPhotoGallery/Model - DKPhotoGallery/Model
- DKPhotoGallery/Resource - DKPhotoGallery/Resource
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- DKPhotoGallery/Resource (0.0.17): - DKPhotoGallery/Resource (0.0.19):
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- file_picker (0.0.1): - file_picker (0.0.1):
@ -42,9 +42,6 @@ PODS:
- Flutter - Flutter
- flutter_web_auth_2 (3.0.0): - flutter_web_auth_2 (3.0.0):
- Flutter - Flutter
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- image_gallery_saver (2.0.2): - image_gallery_saver (2.0.2):
- Flutter - Flutter
- image_picker_ios (0.0.1): - image_picker_ios (0.0.1):
@ -55,10 +52,10 @@ PODS:
- Flutter - Flutter
- media_kit_video (0.0.1): - media_kit_video (0.0.1):
- Flutter - Flutter
- ObjectBox (1.9.0) - ObjectBox (2.0.0)
- objectbox_flutter_libs (0.0.1): - objectbox_flutter_libs (0.0.1):
- Flutter - Flutter
- ObjectBox (= 1.9.0) - ObjectBox (= 2.0.0)
- package_info_plus (0.4.5): - package_info_plus (0.4.5):
- Flutter - Flutter
- path_provider_foundation (0.0.1): - path_provider_foundation (0.0.1):
@ -66,20 +63,21 @@ PODS:
- FlutterMacOS - FlutterMacOS
- screen_brightness_ios (0.1.0): - screen_brightness_ios (0.1.0):
- Flutter - Flutter
- SDWebImage (5.18.3): - SDWebImage (5.19.4):
- SDWebImage/Core (= 5.18.3) - SDWebImage/Core (= 5.19.4)
- SDWebImage/Core (5.18.3) - SDWebImage/Core (5.19.4)
- shared_preferences_foundation (0.0.1): - shared_preferences_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- sqflite (0.0.3): - sqflite (0.0.3):
- Flutter - Flutter
- FMDB (>= 2.7.5) - FlutterMacOS
- SwiftyGif (5.4.4) - SwiftyGif (5.4.5)
- url_launcher_ios (0.0.1): - url_launcher_ios (0.0.1):
- Flutter - Flutter
- video_player_avfoundation (0.0.1): - video_player_avfoundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS
- volume_controller (0.0.1): - volume_controller (0.0.1):
- Flutter - Flutter
- wakelock_plus (0.0.1): - wakelock_plus (0.0.1):
@ -102,9 +100,9 @@ DEPENDENCIES:
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`) - screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/ios`) - sqflite (from `.symlinks/plugins/sqflite/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`) - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
- volume_controller (from `.symlinks/plugins/volume_controller/ios`) - volume_controller (from `.symlinks/plugins/volume_controller/ios`)
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
@ -112,7 +110,6 @@ SPEC REPOS:
trunk: trunk:
- DKImagePickerController - DKImagePickerController
- DKPhotoGallery - DKPhotoGallery
- FMDB
- ObjectBox - ObjectBox
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
@ -151,44 +148,43 @@ EXTERNAL SOURCES:
shared_preferences_foundation: shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin" :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite: sqflite:
:path: ".symlinks/plugins/sqflite/ios" :path: ".symlinks/plugins/sqflite/darwin"
url_launcher_ios: url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios" :path: ".symlinks/plugins/url_launcher_ios/ios"
video_player_avfoundation: video_player_avfoundation:
:path: ".symlinks/plugins/video_player_avfoundation/ios" :path: ".symlinks/plugins/video_player_avfoundation/darwin"
volume_controller: volume_controller:
:path: ".symlinks/plugins/volume_controller/ios" :path: ".symlinks/plugins/volume_controller/ios"
wakelock_plus: wakelock_plus:
:path: ".symlinks/plugins/wakelock_plus/ios" :path: ".symlinks/plugins/wakelock_plus/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
file_picker: 15fd9539e4eb735dc54bae8c0534a7a9511a03de file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_file_dialog: 4c014a45b105709a27391e266c277d7e588e9299 flutter_file_dialog: 4c014a45b105709a27391e266c277d7e588e9299
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
flutter_web_auth_2: 051cf9f5dc366f31b5dcc4e2952c2b954767be8a flutter_web_auth_2: 051cf9f5dc366f31b5dcc4e2952c2b954767be8a
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5 image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
media_kit_libs_ios_video: a5fe24bc7875ccd6378a0978c13185e1344651c1 media_kit_libs_ios_video: a5fe24bc7875ccd6378a0978c13185e1344651c1
media_kit_native_event_loop: e6b2ab20cf0746eb1c33be961fcf79667304fa2a media_kit_native_event_loop: e6b2ab20cf0746eb1c33be961fcf79667304fa2a
media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e
ObjectBox: e7ff611291a0663380e0736b46786bcd077294ff ObjectBox: f5319bd9ad2ea960796eff7227e86471867e9ef0
objectbox_flutter_libs: 0948d6feb7de4f7edaebc7a898b9e85b7fc2bc89 objectbox_flutter_libs: c7748f6c6fda47d22f15c8062fb8208063fd948a
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85 package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
screen_brightness_ios: 715ca807df953bf676d339f11464e438143ee625 screen_brightness_ios: 715ca807df953bf676d339f11464e438143ee625
SDWebImage: 96e0c18ef14010b7485210e92fac888587ebb958 SDWebImage: 066c47b573f408f18caa467d71deace7c0f8280d
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
url_launcher_ios: 68d46cc9766d0c41dbdc884310529557e3cd7a86 url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126 video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
volume_controller: 531ddf792994285c9b17f9d8a7e4dcdd29b3eae9 volume_controller: 531ddf792994285c9b17f9d8a7e4dcdd29b3eae9
wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47 wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
PODFILE CHECKSUM: 1df1bb3ed89ef4be6115286519e24a9fad12e640 PODFILE CHECKSUM: 1df1bb3ed89ef4be6115286519e24a9fad12e640

View file

@ -1,5 +1,4 @@
import 'package:color_blindness/color_blindness.dart'; import 'package:color_blindness/color_blindness.dart';
import 'package:color_blindness/color_blindness_color_scheme.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View file

@ -63,10 +63,10 @@ class _MediaKitAvControlState extends State<MediaKitAvControl> {
width: widget.width, width: widget.width,
height: widget.height, height: widget.height,
color: Colors.black12, color: Colors.black12,
child: Column( child: const Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: const [ children: [
CircularProgressIndicator(), CircularProgressIndicator(),
], ],
), ),

View file

@ -27,7 +27,8 @@ class _VideoPlayerLibAvControlState extends State<VideoPlayerLibAvControl> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
videoPlayerController = VideoPlayerController.network(widget.videoUrl); videoPlayerController =
VideoPlayerController.networkUrl(Uri.parse(widget.videoUrl));
} }
@override @override
@ -70,7 +71,7 @@ class _VideoPlayerLibAvControlState extends State<VideoPlayerLibAvControl> {
videoWidth = scaling * size.width; videoWidth = scaling * size.width;
videoHeight = scaling * size.height; videoHeight = scaling * size.height;
} }
print('Video Width: $videoWidth, Video Height: $videoHeight');
return GestureDetector( return GestureDetector(
onTap: toggleVideoPlay, onTap: toggleVideoPlay,
child: Column( child: Column(

View file

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../models/connection.dart'; import '../../models/connection.dart';
@ -9,8 +8,6 @@ import '../../utils/active_profile_selector.dart';
import '../image_control.dart'; import '../image_control.dart';
class MentionAutocompleteOptions extends StatelessWidget { class MentionAutocompleteOptions extends StatelessWidget {
static final _logger = Logger('$MentionAutocompleteOptions');
const MentionAutocompleteOptions({ const MentionAutocompleteOptions({
super.key, super.key,
required this.id, required this.id,

View file

@ -46,7 +46,7 @@ class _MediaUploadEditorControlState extends State<MediaUploadEditorControl> {
alignLabelWithHint: true, alignLabelWithHint: true,
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
), ),
@ -74,7 +74,7 @@ class _MediaUploadEditorControlState extends State<MediaUploadEditorControl> {
alignLabelWithHint: true, alignLabelWithHint: true,
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
), ),

View file

@ -112,7 +112,7 @@ class _MediaUploadsControlState extends State<MediaUploadsControl> {
alignLabelWithHint: true, alignLabelWithHint: true,
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
), ),

View file

@ -38,11 +38,15 @@ class NotificationControl extends StatelessWidget {
} }
final loadedPost = await manager.refreshStatusChain(notification.iid); final loadedPost = await manager.refreshStatusChain(notification.iid);
if (loadedPost.isSuccess) { if (loadedPost.isSuccess) {
context.push('/post/view/${loadedPost.value.id}/${notification.iid}'); if (context.mounted) {
context.push('/post/view/${loadedPost.value.id}/${notification.iid}');
}
return; return;
} }
buildSnackbar( if (context.mounted) {
context, 'Error getting data for notification: ${loadedPost.error}'); buildSnackbar(
context, 'Error getting data for notification: ${loadedPost.error}');
}
} }
@override @override
@ -171,7 +175,7 @@ class NotificationControl extends StatelessWidget {
void _tapProcessingStarted() { void _tapProcessingStarted() {
_processingTap = true; _processingTap = true;
Future.delayed(Duration(seconds: 10), () => _processingTap = false); Future.delayed(const Duration(seconds: 10), () => _processingTap = false);
} }
void _tapProcessingStop() { void _tapProcessingStop() {

View file

@ -5,7 +5,7 @@ import 'package:relatica/controls/padding.dart';
import 'package:relatica/globals.dart'; import 'package:relatica/globals.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import '../../models/TimelineIdentifiers.dart'; import '../../models/timeline_identifiers.dart';
import '../../services/network_status_service.dart'; import '../../services/network_status_service.dart';
import '../../services/setting_service.dart'; import '../../services/setting_service.dart';
import '../../services/timeline_manager.dart'; import '../../services/timeline_manager.dart';

View file

@ -8,7 +8,6 @@ import 'package:result_monad/result_monad.dart';
import '../friendica_client/paged_response.dart'; import '../friendica_client/paged_response.dart';
import '../globals.dart'; import '../globals.dart';
import '../models/TimelineIdentifiers.dart';
import '../models/auth/profile.dart'; import '../models/auth/profile.dart';
import '../models/circle_data.dart'; import '../models/circle_data.dart';
import '../models/connection.dart'; import '../models/connection.dart';
@ -22,6 +21,7 @@ import '../models/media_attachment_uploads/image_types_enum.dart';
import '../models/search_results.dart'; import '../models/search_results.dart';
import '../models/search_types.dart'; import '../models/search_types.dart';
import '../models/timeline_entry.dart'; import '../models/timeline_entry.dart';
import '../models/timeline_identifiers.dart';
import '../models/user_notification.dart'; import '../models/user_notification.dart';
import '../models/visibility.dart'; import '../models/visibility.dart';
import '../serializers/friendica/direct_message_friendica_extensions.dart'; import '../serializers/friendica/direct_message_friendica_extensions.dart';

View file

@ -1,5 +1,3 @@
import 'package:device_preview/device_preview.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:media_kit/media_kit.dart'; import 'package:media_kit/media_kit.dart';
@ -38,7 +36,6 @@ void main() async {
getIt.registerSingleton<LogService>(logService); getIt.registerSingleton<LogService>(logService);
// await dotenv.load(fileName: '.env'); // await dotenv.load(fileName: '.env');
const enablePreview = false;
Logger.root.level = Level.OFF; Logger.root.level = Level.OFF;
Logger.root.onRecord.listen((event) { Logger.root.onRecord.listen((event) {
logService.add(event); logService.add(event);
@ -48,10 +45,12 @@ void main() async {
await dependencyInjectionInitialization(); await dependencyInjectionInitialization();
await setupPackageInfoAndUserAgent(); await setupPackageInfoAndUserAgent();
runApp(DevicePreview( // TODO Add back Device Preview once supported in Flutter 3.22+
enabled: !kReleaseMode && enablePreview, // runApp(DevicePreview(
builder: (context) => const App(), // enabled: !kReleaseMode && enablePreview,
)); // builder: (context) => const App(),
// ));
runApp(const App());
} }
Future<void> setupPackageInfoAndUserAgent() async { Future<void> setupPackageInfoAndUserAgent() async {
@ -70,7 +69,6 @@ class App extends StatelessWidget {
return AnimatedBuilder( return AnimatedBuilder(
builder: (context, child) { builder: (context, child) {
Logger.root.level = settingsService.logLevel; Logger.root.level = settingsService.logLevel;
print('Log level: ${settingsService.logLevel}');
return Portal( return Portal(
child: MultiProvider( child: MultiProvider(
providers: [ providers: [
@ -142,8 +140,9 @@ class App extends StatelessWidget {
), ),
], ],
child: MaterialApp.router( child: MaterialApp.router(
locale: DevicePreview.locale(context), // TODO Add back Device Preview once supported in Flutter 3.22+
builder: DevicePreview.appBuilder, // locale: DevicePreview.locale(context),
// builder: DevicePreview.appBuilder,
theme: buildTheme( theme: buildTheme(
brightness: Brightness.light, brightness: Brightness.light,
blindnessType: settingsService.colorBlindnessType, blindnessType: settingsService.colorBlindnessType,

View file

@ -1,6 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:result_monad/src/result_monad_base.dart'; import 'package:result_monad/result_monad.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
import '../exec_error.dart'; import '../exec_error.dart';

View file

@ -149,9 +149,11 @@ class OAuthCredentials implements ICredentials {
.setStatus('Attempting getting authorization to $serverName'); .setStatus('Attempting getting authorization to $serverName');
final result = await FlutterWebAuth2.authenticate( final result = await FlutterWebAuth2.authenticate(
url: url.toString(), url: url.toString(),
callbackUrlScheme: redirectScheme, callbackUrlScheme: redirectScheme,
); options: const FlutterWebAuth2Options(
preferEphemeral: true,
));
final code = Uri.parse(result).queryParameters['code']; final code = Uri.parse(result).queryParameters['code'];
if (code == null) { if (code == null) {
_logger.severe( _logger.severe(

View file

@ -5,6 +5,7 @@ class Connection {
@Id() @Id()
int obId; int obId;
@Transient()
ConnectionStatus status; ConnectionStatus status;
int get dbStatus => status.code; int get dbStatus => status.code;

View file

@ -1,5 +1,5 @@
import 'TimelineIdentifiers.dart';
import 'entry_tree_item.dart'; import 'entry_tree_item.dart';
import 'timeline_identifiers.dart';
const defaultLowestId = 9223372036854775807; const defaultLowestId = 9223372036854775807;
const defaultHighestId = 0; const defaultHighestId = 0;

View file

@ -1,17 +1,17 @@
// GENERATED CODE - DO NOT MODIFY BY HAND // GENERATED CODE - DO NOT MODIFY BY HAND
// This code was generated by ObjectBox. To update it run the generator again: // This code was generated by ObjectBox. To update it run the generator again
// With a Flutter package, run `flutter pub run build_runner build`. // with `dart run build_runner build`.
// With a Dart package, run `dart run build_runner build`.
// See also https://docs.objectbox.io/getting-started#generate-objectbox-code // See also https://docs.objectbox.io/getting-started#generate-objectbox-code
// ignore_for_file: camel_case_types // ignore_for_file: camel_case_types, depend_on_referenced_packages
// coverage:ignore-file // coverage:ignore-file
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flat_buffers/flat_buffers.dart' as fb; import 'package:flat_buffers/flat_buffers.dart' as fb;
import 'package:objectbox/internal.dart'; // generated code can access "internal" functionality import 'package:objectbox/internal.dart'
import 'package:objectbox/objectbox.dart'; as obx_int; // generated code can access "internal" functionality
import 'package:objectbox/objectbox.dart' as obx;
import 'package:objectbox_flutter_libs/objectbox_flutter_libs.dart'; import 'package:objectbox_flutter_libs/objectbox_flutter_libs.dart';
import 'models/connection.dart'; import 'models/connection.dart';
@ -19,143 +19,158 @@ import 'models/hashtag.dart';
export 'package:objectbox/objectbox.dart'; // so that callers only have to import this file export 'package:objectbox/objectbox.dart'; // so that callers only have to import this file
final _entities = <ModelEntity>[ final _entities = <obx_int.ModelEntity>[
ModelEntity( obx_int.ModelEntity(
id: const IdUid(1, 1213035855270739890), id: const obx_int.IdUid(1, 1213035855270739890),
name: 'Connection', name: 'Connection',
lastPropertyId: const IdUid(14, 7495390888349913259), lastPropertyId: const obx_int.IdUid(14, 7495390888349913259),
flags: 0, flags: 0,
properties: <ModelProperty>[ properties: <obx_int.ModelProperty>[
ModelProperty( obx_int.ModelProperty(
id: const IdUid(1, 4133343279264917280), id: const obx_int.IdUid(1, 4133343279264917280),
name: 'obId', name: 'obId',
type: 6, type: 6,
flags: 1), flags: 1),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(2, 3393770296096844708), id: const obx_int.IdUid(2, 3393770296096844708),
name: 'name', name: 'name',
type: 9, type: 9,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(3, 5864801995210079539), id: const obx_int.IdUid(3, 5864801995210079539),
name: 'handle', name: 'handle',
type: 9, type: 9,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(4, 2926904168461994523), id: const obx_int.IdUid(4, 2926904168461994523),
name: 'id', name: 'id',
type: 9, type: 9,
flags: 34848, flags: 34848,
indexId: const IdUid(1, 8342366639839511243)), indexId: const obx_int.IdUid(1, 8342366639839511243)),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(5, 3621370552742492695), id: const obx_int.IdUid(5, 3621370552742492695),
name: 'network', name: 'network',
type: 9, type: 9,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(6, 3054748457893853359), id: const obx_int.IdUid(6, 3054748457893853359),
name: 'profileUrl', name: 'profileUrl',
type: 9, type: 9,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(7, 3716471511430220806), id: const obx_int.IdUid(7, 3716471511430220806),
name: 'avatarUrl', name: 'avatarUrl',
type: 9, type: 9,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(8, 3334077197732145885), id: const obx_int.IdUid(8, 3334077197732145885),
name: 'dbStatus', name: 'dbStatus',
type: 6, type: 6,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(9, 7727190023732579468), id: const obx_int.IdUid(9, 7727190023732579468),
name: 'lastUpdateTime', name: 'lastUpdateTime',
type: 10, type: 10,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(10, 7236128628019094924), id: const obx_int.IdUid(10, 7236128628019094924),
name: 'note', name: 'note',
type: 9, type: 9,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(11, 714760695336940281), id: const obx_int.IdUid(11, 714760695336940281),
name: 'followerCount', name: 'followerCount',
type: 6, type: 6,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(12, 4204087390924684186), id: const obx_int.IdUid(12, 4204087390924684186),
name: 'followingCount', name: 'followingCount',
type: 6, type: 6,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(13, 6842754750534163483), id: const obx_int.IdUid(13, 6842754750534163483),
name: 'statusesCount', name: 'statusesCount',
type: 6, type: 6,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(14, 7495390888349913259), id: const obx_int.IdUid(14, 7495390888349913259),
name: 'lastStatus', name: 'lastStatus',
type: 10, type: 10,
flags: 0) flags: 0)
], ],
relations: <ModelRelation>[], relations: <obx_int.ModelRelation>[],
backlinks: <ModelBacklink>[]), backlinks: <obx_int.ModelBacklink>[]),
ModelEntity( obx_int.ModelEntity(
id: const IdUid(2, 8060242331335522964), id: const obx_int.IdUid(2, 8060242331335522964),
name: 'Hashtag', name: 'Hashtag',
lastPropertyId: const IdUid(4, 985152873657204249), lastPropertyId: const obx_int.IdUid(4, 985152873657204249),
flags: 0, flags: 0,
properties: <ModelProperty>[ properties: <obx_int.ModelProperty>[
ModelProperty( obx_int.ModelProperty(
id: const IdUid(1, 3633001791521338712), id: const obx_int.IdUid(1, 3633001791521338712),
name: 'id', name: 'id',
type: 6, type: 6,
flags: 1), flags: 1),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(2, 3468373950035339457), id: const obx_int.IdUid(2, 3468373950035339457),
name: 'tag', name: 'tag',
type: 9, type: 9,
flags: 34848, flags: 34848,
indexId: const IdUid(2, 6156017341759176249)), indexId: const obx_int.IdUid(2, 6156017341759176249)),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(3, 5102584273729210526), id: const obx_int.IdUid(3, 5102584273729210526),
name: 'url', name: 'url',
type: 9, type: 9,
flags: 0), flags: 0),
ModelProperty( obx_int.ModelProperty(
id: const IdUid(4, 985152873657204249), id: const obx_int.IdUid(4, 985152873657204249),
name: 'lastUpdateTime', name: 'lastUpdateTime',
type: 10, type: 10,
flags: 0) flags: 0)
], ],
relations: <ModelRelation>[], relations: <obx_int.ModelRelation>[],
backlinks: <ModelBacklink>[]) backlinks: <obx_int.ModelBacklink>[])
]; ];
/// Open an ObjectBox store with the model declared in this file. /// Shortcut for [obx.Store.new] that passes [getObjectBoxModel] and for Flutter
Future<Store> openStore( /// apps by default a [directory] using `defaultStoreDirectory()` from the
{String? directory, /// ObjectBox Flutter library.
int? maxDBSizeInKB, ///
int? fileMode, /// Note: for desktop apps it is recommended to specify a unique [directory].
int? maxReaders, ///
bool queriesCaseSensitiveDefault = true, /// See [obx.Store.new] for an explanation of all parameters.
String? macosApplicationGroup}) async => ///
Store(getObjectBoxModel(), /// For Flutter apps, also calls `loadObjectBoxLibraryAndroidCompat()` from
directory: directory ?? (await defaultStoreDirectory()).path, /// the ObjectBox Flutter library to fix loading the native ObjectBox library
maxDBSizeInKB: maxDBSizeInKB, /// on Android 6 and older.
fileMode: fileMode, Future<obx.Store> openStore(
maxReaders: maxReaders, {String? directory,
queriesCaseSensitiveDefault: queriesCaseSensitiveDefault, int? maxDBSizeInKB,
macosApplicationGroup: macosApplicationGroup); int? maxDataSizeInKB,
int? fileMode,
int? maxReaders,
bool queriesCaseSensitiveDefault = true,
String? macosApplicationGroup}) async {
await loadObjectBoxLibraryAndroidCompat();
return obx.Store(getObjectBoxModel(),
directory: directory ?? (await defaultStoreDirectory()).path,
maxDBSizeInKB: maxDBSizeInKB,
maxDataSizeInKB: maxDataSizeInKB,
fileMode: fileMode,
maxReaders: maxReaders,
queriesCaseSensitiveDefault: queriesCaseSensitiveDefault,
macosApplicationGroup: macosApplicationGroup);
}
/// ObjectBox model definition, pass it to [Store] - Store(getObjectBoxModel()) /// Returns the ObjectBox model definition for this project for use with
ModelDefinition getObjectBoxModel() { /// [obx.Store.new].
final model = ModelInfo( obx_int.ModelDefinition getObjectBoxModel() {
final model = obx_int.ModelInfo(
entities: _entities, entities: _entities,
lastEntityId: const IdUid(2, 8060242331335522964), lastEntityId: const obx_int.IdUid(2, 8060242331335522964),
lastIndexId: const IdUid(2, 6156017341759176249), lastIndexId: const obx_int.IdUid(2, 6156017341759176249),
lastRelationId: const IdUid(0, 0), lastRelationId: const obx_int.IdUid(0, 0),
lastSequenceId: const IdUid(0, 0), lastSequenceId: const obx_int.IdUid(0, 0),
retiredEntityUids: const [], retiredEntityUids: const [],
retiredIndexUids: const [], retiredIndexUids: const [],
retiredPropertyUids: const [], retiredPropertyUids: const [],
@ -164,8 +179,8 @@ ModelDefinition getObjectBoxModel() {
modelVersionParserMinimum: 5, modelVersionParserMinimum: 5,
version: 1); version: 1);
final bindings = <Type, EntityDefinition>{ final bindings = <Type, obx_int.EntityDefinition>{
Connection: EntityDefinition<Connection>( Connection: obx_int.EntityDefinition<Connection>(
model: _entities[0], model: _entities[0],
toOneRelations: (Connection object) => [], toOneRelations: (Connection object) => [],
toManyRelations: (Connection object) => {}, toManyRelations: (Connection object) => {},
@ -199,37 +214,58 @@ ModelDefinition getObjectBoxModel() {
fbb.finish(fbb.endTable()); fbb.finish(fbb.endTable());
return object.obId; return object.obId;
}, },
objectFromFB: (Store store, ByteData fbData) { objectFromFB: (obx.Store store, ByteData fbData) {
final buffer = fb.BufferContext(fbData); final buffer = fb.BufferContext(fbData);
final rootOffset = buffer.derefObject(0); final rootOffset = buffer.derefObject(0);
final lastStatusValue = final lastStatusValue =
const fb.Int64Reader().vTableGetNullable(buffer, rootOffset, 30); const fb.Int64Reader().vTableGetNullable(buffer, rootOffset, 30);
final obIdParam =
const fb.Int64Reader().vTableGet(buffer, rootOffset, 4, 0);
final nameParam = const fb.StringReader(asciiOptimization: true)
.vTableGet(buffer, rootOffset, 6, '');
final handleParam = const fb.StringReader(asciiOptimization: true)
.vTableGet(buffer, rootOffset, 8, '');
final idParam = const fb.StringReader(asciiOptimization: true)
.vTableGet(buffer, rootOffset, 10, '');
final profileUrlParam = const fb.StringReader(asciiOptimization: true)
.vTableGet(buffer, rootOffset, 14, '');
final networkParam = const fb.StringReader(asciiOptimization: true)
.vTableGet(buffer, rootOffset, 12, '');
final avatarUrlParam = const fb.StringReader(asciiOptimization: true)
.vTableGet(buffer, rootOffset, 16, '');
final lastUpdateTimeParam = DateTime.fromMillisecondsSinceEpoch(
const fb.Int64Reader().vTableGet(buffer, rootOffset, 20, 0));
final noteParam = const fb.StringReader(asciiOptimization: true)
.vTableGet(buffer, rootOffset, 22, '');
final followerCountParam =
const fb.Int64Reader().vTableGetNullable(buffer, rootOffset, 24);
final followingCountParam =
const fb.Int64Reader().vTableGetNullable(buffer, rootOffset, 26);
final statusesCountParam =
const fb.Int64Reader().vTableGetNullable(buffer, rootOffset, 28);
final lastStatusParam = lastStatusValue == null
? null
: DateTime.fromMillisecondsSinceEpoch(lastStatusValue);
final object = Connection( final object = Connection(
obId: const fb.Int64Reader().vTableGet(buffer, rootOffset, 4, 0), obId: obIdParam,
name: const fb.StringReader(asciiOptimization: true) name: nameParam,
.vTableGet(buffer, rootOffset, 6, ''), handle: handleParam,
handle: const fb.StringReader(asciiOptimization: true) id: idParam,
.vTableGet(buffer, rootOffset, 8, ''), profileUrl: profileUrlParam,
id: const fb.StringReader(asciiOptimization: true) network: networkParam,
.vTableGet(buffer, rootOffset, 10, ''), avatarUrl: avatarUrlParam,
profileUrl: const fb.StringReader(asciiOptimization: true) lastUpdateTime: lastUpdateTimeParam,
.vTableGet(buffer, rootOffset, 14, ''), note: noteParam,
network: const fb.StringReader(asciiOptimization: true) followerCount: followerCountParam,
.vTableGet(buffer, rootOffset, 12, ''), followingCount: followingCountParam,
avatarUrl: const fb.StringReader(asciiOptimization: true) statusesCount: statusesCountParam,
.vTableGet(buffer, rootOffset, 16, ''), lastStatus: lastStatusParam)
lastUpdateTime: DateTime.fromMillisecondsSinceEpoch( ..dbStatus =
const fb.Int64Reader().vTableGet(buffer, rootOffset, 20, 0)), const fb.Int64Reader().vTableGet(buffer, rootOffset, 18, 0);
note: const fb.StringReader(asciiOptimization: true).vTableGet(buffer, rootOffset, 22, ''),
followerCount: const fb.Int64Reader().vTableGetNullable(buffer, rootOffset, 24),
followingCount: const fb.Int64Reader().vTableGetNullable(buffer, rootOffset, 26),
statusesCount: const fb.Int64Reader().vTableGetNullable(buffer, rootOffset, 28),
lastStatus: lastStatusValue == null ? null : DateTime.fromMillisecondsSinceEpoch(lastStatusValue))
..dbStatus = const fb.Int64Reader().vTableGet(buffer, rootOffset, 18, 0);
return object; return object;
}), }),
Hashtag: EntityDefinition<Hashtag>( Hashtag: obx_int.EntityDefinition<Hashtag>(
model: _entities[1], model: _entities[1],
toOneRelations: (Hashtag object) => [], toOneRelations: (Hashtag object) => [],
toManyRelations: (Hashtag object) => {}, toManyRelations: (Hashtag object) => {},
@ -248,16 +284,16 @@ ModelDefinition getObjectBoxModel() {
fbb.finish(fbb.endTable()); fbb.finish(fbb.endTable());
return object.id; return object.id;
}, },
objectFromFB: (Store store, ByteData fbData) { objectFromFB: (obx.Store store, ByteData fbData) {
final buffer = fb.BufferContext(fbData); final buffer = fb.BufferContext(fbData);
final rootOffset = buffer.derefObject(0); final rootOffset = buffer.derefObject(0);
final idParam =
final object = Hashtag( const fb.Int64Reader().vTableGet(buffer, rootOffset, 4, 0);
id: const fb.Int64Reader().vTableGet(buffer, rootOffset, 4, 0), final tagParam = const fb.StringReader(asciiOptimization: true)
tag: const fb.StringReader(asciiOptimization: true) .vTableGet(buffer, rootOffset, 6, '');
.vTableGet(buffer, rootOffset, 6, ''), final urlParam = const fb.StringReader(asciiOptimization: true)
url: const fb.StringReader(asciiOptimization: true) .vTableGet(buffer, rootOffset, 8, '');
.vTableGet(buffer, rootOffset, 8, '')) final object = Hashtag(id: idParam, tag: tagParam, url: urlParam)
..lastUpdateTime = DateTime.fromMillisecondsSinceEpoch( ..lastUpdateTime = DateTime.fromMillisecondsSinceEpoch(
const fb.Int64Reader().vTableGet(buffer, rootOffset, 10, 0)); const fb.Int64Reader().vTableGet(buffer, rootOffset, 10, 0));
@ -265,79 +301,83 @@ ModelDefinition getObjectBoxModel() {
}) })
}; };
return ModelDefinition(model, bindings); return obx_int.ModelDefinition(model, bindings);
} }
/// [Connection] entity fields to define ObjectBox queries. /// [Connection] entity fields to define ObjectBox queries.
class Connection_ { class Connection_ {
/// see [Connection.obId] /// See [Connection.obId].
static final obId = static final obId =
QueryIntegerProperty<Connection>(_entities[0].properties[0]); obx.QueryIntegerProperty<Connection>(_entities[0].properties[0]);
/// see [Connection.name] /// See [Connection.name].
static final name = static final name =
QueryStringProperty<Connection>(_entities[0].properties[1]); obx.QueryStringProperty<Connection>(_entities[0].properties[1]);
/// see [Connection.handle] /// See [Connection.handle].
static final handle = static final handle =
QueryStringProperty<Connection>(_entities[0].properties[2]); obx.QueryStringProperty<Connection>(_entities[0].properties[2]);
/// see [Connection.id] /// See [Connection.id].
static final id = QueryStringProperty<Connection>(_entities[0].properties[3]); static final id =
obx.QueryStringProperty<Connection>(_entities[0].properties[3]);
/// see [Connection.network] /// See [Connection.network].
static final network = static final network =
QueryStringProperty<Connection>(_entities[0].properties[4]); obx.QueryStringProperty<Connection>(_entities[0].properties[4]);
/// see [Connection.profileUrl] /// See [Connection.profileUrl].
static final profileUrl = static final profileUrl =
QueryStringProperty<Connection>(_entities[0].properties[5]); obx.QueryStringProperty<Connection>(_entities[0].properties[5]);
/// see [Connection.avatarUrl] /// See [Connection.avatarUrl].
static final avatarUrl = static final avatarUrl =
QueryStringProperty<Connection>(_entities[0].properties[6]); obx.QueryStringProperty<Connection>(_entities[0].properties[6]);
/// see [Connection.dbStatus] /// See [Connection.dbStatus].
static final dbStatus = static final dbStatus =
QueryIntegerProperty<Connection>(_entities[0].properties[7]); obx.QueryIntegerProperty<Connection>(_entities[0].properties[7]);
/// see [Connection.lastUpdateTime] /// See [Connection.lastUpdateTime].
static final lastUpdateTime = static final lastUpdateTime =
QueryIntegerProperty<Connection>(_entities[0].properties[8]); obx.QueryDateProperty<Connection>(_entities[0].properties[8]);
/// see [Connection.note] /// See [Connection.note].
static final note = static final note =
QueryStringProperty<Connection>(_entities[0].properties[9]); obx.QueryStringProperty<Connection>(_entities[0].properties[9]);
/// see [Connection.followerCount] /// See [Connection.followerCount].
static final followerCount = static final followerCount =
QueryIntegerProperty<Connection>(_entities[0].properties[10]); obx.QueryIntegerProperty<Connection>(_entities[0].properties[10]);
/// see [Connection.followingCount] /// See [Connection.followingCount].
static final followingCount = static final followingCount =
QueryIntegerProperty<Connection>(_entities[0].properties[11]); obx.QueryIntegerProperty<Connection>(_entities[0].properties[11]);
/// see [Connection.statusesCount] /// See [Connection.statusesCount].
static final statusesCount = static final statusesCount =
QueryIntegerProperty<Connection>(_entities[0].properties[12]); obx.QueryIntegerProperty<Connection>(_entities[0].properties[12]);
/// see [Connection.lastStatus] /// See [Connection.lastStatus].
static final lastStatus = static final lastStatus =
QueryIntegerProperty<Connection>(_entities[0].properties[13]); obx.QueryDateProperty<Connection>(_entities[0].properties[13]);
} }
/// [Hashtag] entity fields to define ObjectBox queries. /// [Hashtag] entity fields to define ObjectBox queries.
class Hashtag_ { class Hashtag_ {
/// see [Hashtag.id] /// See [Hashtag.id].
static final id = QueryIntegerProperty<Hashtag>(_entities[1].properties[0]); static final id =
obx.QueryIntegerProperty<Hashtag>(_entities[1].properties[0]);
/// see [Hashtag.tag] /// See [Hashtag.tag].
static final tag = QueryStringProperty<Hashtag>(_entities[1].properties[1]); static final tag =
obx.QueryStringProperty<Hashtag>(_entities[1].properties[1]);
/// see [Hashtag.url] /// See [Hashtag.url].
static final url = QueryStringProperty<Hashtag>(_entities[1].properties[2]); static final url =
obx.QueryStringProperty<Hashtag>(_entities[1].properties[2]);
/// see [Hashtag.lastUpdateTime] /// See [Hashtag.lastUpdateTime].
static final lastUpdateTime = static final lastUpdateTime =
QueryIntegerProperty<Hashtag>(_entities[1].properties[3]); obx.QueryDateProperty<Hashtag>(_entities[1].properties[3]);
} }

View file

@ -54,7 +54,9 @@ class _CircleAddUsersScreenState extends State<CircleAddUsersScreen> {
onSuccess: (_) => 'Added $messageBase', onSuccess: (_) => 'Added $messageBase',
onError: (error) => 'Error adding $messageBase: $error', onError: (error) => 'Error adding $messageBase: $error',
); );
buildSnackbar(context, message); if (mounted) {
buildSnackbar(context, message);
}
} }
} }

View file

@ -81,7 +81,9 @@ class _CircleEditorScreenState extends State<CircleEditorScreen> {
onSuccess: (_) => 'Removed $messageBase', onSuccess: (_) => 'Removed $messageBase',
onError: (error) => 'Error removing $messageBase: $error', onError: (error) => 'Error removing $messageBase: $error',
); );
buildSnackbar(context, message); if (mounted) {
buildSnackbar(context, message);
}
} }
} }

View file

@ -178,7 +178,7 @@ class _EditorScreenState extends State<EditorScreen> {
return; return;
} }
if (mounted && context.canPop()) { if (context.mounted && context.canPop()) {
context.pop(); context.pop();
} }
} }
@ -220,7 +220,7 @@ class _EditorScreenState extends State<EditorScreen> {
return; return;
} }
if (mounted && context.canPop()) { if (context.mounted && context.canPop()) {
context.pop(); context.pop();
} }
} }
@ -254,51 +254,49 @@ class _EditorScreenState extends State<EditorScreen> {
} else { } else {
final mainBody = Padding( final mainBody = Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Container( child: SingleChildScrollView(
child: SingleChildScrollView( child: Column(
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, children: [
children: [ if (isComment && parentEntry != null)
if (isComment && parentEntry != null) buildCommentPreview(context, parentEntry!),
buildCommentPreview(context, parentEntry!), TextFormField(
TextFormField( readOnly: isSubmitting,
readOnly: isSubmitting, enabled: !isSubmitting && canSpoilerText,
enabled: !isSubmitting && canSpoilerText, controller: spoilerController,
controller: spoilerController, textCapitalization: TextCapitalization.sentences,
textCapitalization: TextCapitalization.sentences, decoration: InputDecoration(
decoration: InputDecoration( labelText: canSpoilerText
labelText: canSpoilerText ? '$statusType Spoiler Text (optional)'
? '$statusType Spoiler Text (optional)' : 'Your server doesnt support $statusType Spoiler Text',
: 'Your server doesnt support $statusType Spoiler Text', border: OutlineInputBorder(
border: OutlineInputBorder( borderSide: const BorderSide(),
borderSide: const BorderSide(), borderRadius: BorderRadius.circular(5.0),
borderRadius: BorderRadius.circular(5.0),
),
), ),
), ),
const VerticalPadding(), ),
buildVisibilitySelector(context), const VerticalPadding(),
const VerticalPadding(), buildVisibilitySelector(context),
buildContentField(context), const VerticalPadding(),
CharacterCountWidget( buildContentField(context),
contentController: contentController, CharacterCountWidget(
linkPreviewController: linkPreviewController, contentController: contentController,
), linkPreviewController: linkPreviewController,
const VerticalPadding(), ),
buildLinkWithPreview(context), const VerticalPadding(),
const VerticalPadding(), buildLinkWithPreview(context),
GallerySelectorControl( const VerticalPadding(),
entries: existingMediaItems, GallerySelectorControl(
visibilityFilter: visibility, entries: existingMediaItems,
), visibilityFilter: visibility,
const VerticalPadding(), ),
MediaUploadsControl( const VerticalPadding(),
entryMediaItems: newMediaItems, MediaUploadsControl(
), entryMediaItems: newMediaItems,
buildButtonBar(context, manager), ),
], buildButtonBar(context, manager),
), ],
), ),
), ),
); );
@ -610,7 +608,7 @@ class _EditorScreenState extends State<EditorScreen> {
value: CircleData.followersPseudoCircle, value: CircleData.followersPseudoCircle,
child: Text(CircleData.followersPseudoCircle.name))); child: Text(CircleData.followersPseudoCircle.name)));
circleMenuItems.add(DropdownMenuItem( circleMenuItems.add(DropdownMenuItem(
value: CircleData('', ''), child: const Divider(), enabled: false)); value: CircleData('', ''), enabled: false, child: const Divider()));
circleMenuItems.addAll(circles.map((g) => DropdownMenuItem( circleMenuItems.addAll(circles.map((g) => DropdownMenuItem(
value: g, value: g,
child: Text(g.name), child: Text(g.name),

View file

@ -133,10 +133,12 @@ class _FilterEditorScreenState extends State<FilterEditorScreen> {
} }
if (filteredAuthors.contains(newConnection)) { if (filteredAuthors.contains(newConnection)) {
buildSnackbar( if (context.mounted) {
context, buildSnackbar(
'Already filtering on ${newConnection.handle}', context,
); 'Already filtering on ${newConnection.handle}',
);
}
} }
setState(() { setState(() {
filteredAuthors.add(newConnection); filteredAuthors.add(newConnection);

View file

@ -95,7 +95,7 @@ class GalleryBrowsersScreen extends StatelessWidget {
StatusAndRefreshButton( StatusAndRefreshButton(
valueListenable: nss.imageGalleryLoadingStatus, valueListenable: nss.imageGalleryLoadingStatus,
refreshFunction: () async => await service.updateGalleries(), refreshFunction: () async => await service.updateGalleries(),
busyColor: Theme.of(context).colorScheme.background, busyColor: Theme.of(context).colorScheme.surface,
), ),
]), ]),
body: RefreshIndicator( body: RefreshIndicator(

View file

@ -10,7 +10,7 @@ import '../controls/responsive_max_width.dart';
import '../controls/standard_app_drawer.dart'; import '../controls/standard_app_drawer.dart';
import '../controls/timeline/timeline_panel.dart'; import '../controls/timeline/timeline_panel.dart';
import '../globals.dart'; import '../globals.dart';
import '../models/TimelineIdentifiers.dart'; import '../models/timeline_identifiers.dart';
import '../services/auth_service.dart'; import '../services/auth_service.dart';
import '../services/network_status_service.dart'; import '../services/network_status_service.dart';
import '../services/timeline_manager.dart'; import '../services/timeline_manager.dart';

View file

@ -106,7 +106,7 @@ class _ImageEditorScreenState extends State<ImageEditorScreen> {
context, context,
'Cancel changes?', 'Cancel changes?',
); );
if (ok == true && mounted) { if (ok == true && context.mounted) {
context.pop(); context.pop();
} }
}, },

View file

@ -59,7 +59,7 @@ class InteractionsViewerScreen extends StatelessWidget {
StatusAndRefreshButton( StatusAndRefreshButton(
valueListenable: nss.interactionsLoadingStatus, valueListenable: nss.interactionsLoadingStatus,
refreshFunction: () async => await refreshInteractors(manager), refreshFunction: () async => await refreshInteractors(manager),
busyColor: Theme.of(context).colorScheme.background, busyColor: Theme.of(context).colorScheme.surface,
) )
]), ]),
body: Center( body: Center(

View file

@ -67,7 +67,7 @@ class _MediaViewerScreenState extends State<MediaViewerScreen> {
final bytesResult = final bytesResult =
await RemoteFileClient(getIt<AccountsService>().currentProfile) await RemoteFileClient(getIt<AccountsService>().currentProfile)
.getFileBytes(attachment.uri); .getFileBytes(attachment.uri);
if (bytesResult.isFailure && mounted) { if (bytesResult.isFailure && context.mounted) {
buildSnackbar(context, buildSnackbar(context,
'Error getting full size version of file: ${bytesResult.error}'); 'Error getting full size version of file: ${bytesResult.error}');
return; return;
@ -75,10 +75,13 @@ class _MediaViewerScreenState extends State<MediaViewerScreen> {
if (Platform.isAndroid || Platform.isIOS) { if (Platform.isAndroid || Platform.isIOS) {
final saveResult = await ImageGallerySaver.saveImage(bytesResult.value); final saveResult = await ImageGallerySaver.saveImage(bytesResult.value);
if (saveResult['isSuccess']) { if (context.mounted) {
buildSnackbar(context, 'Image saved to gallery'); if (saveResult['isSuccess']) {
} else { buildSnackbar(context, 'Image saved to gallery');
buildSnackbar(context, 'Unable to save to gallery, check permissions'); } else {
buildSnackbar(
context, 'Unable to save to gallery, check permissions');
}
} }
} else { } else {
final location = await FilePicker.platform.saveFile( final location = await FilePicker.platform.saveFile(

View file

@ -113,7 +113,7 @@ class _MessageThreadScreenState extends State<MessageThreadScreen> {
labelText: 'Reply Text', labelText: 'Reply Text',
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
), ),

View file

@ -28,7 +28,7 @@ class MessagesScreen extends StatelessWidget {
StatusAndRefreshButton( StatusAndRefreshButton(
valueListenable: nss.directMessageUpdateStatus, valueListenable: nss.directMessageUpdateStatus,
refreshFunction: () async => await service.updateThreads(), refreshFunction: () async => await service.updateThreads(),
busyColor: Theme.of(context).colorScheme.background, busyColor: Theme.of(context).colorScheme.surface,
), ),
IconButton( IconButton(
onPressed: () { onPressed: () {

View file

@ -29,7 +29,7 @@ class MessagesNewThread extends StatelessWidget {
Widget buildBody(BuildContext context) { Widget buildBody(BuildContext context) {
final border = OutlineInputBorder( final border = OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
); );

View file

@ -168,7 +168,9 @@ class NotificationsScreen extends StatelessWidget {
final message = (await manager.markAllAsRead()).fold( final message = (await manager.markAllAsRead()).fold(
onSuccess: (_) => 'Marked all notifications as read', onSuccess: (_) => 'Marked all notifications as read',
onError: (error) => 'Error marking notifications: $error'); onError: (error) => 'Error marking notifications: $error');
buildSnackbar(context, message); if (context.mounted) {
buildSnackbar(context, message);
}
} }
} }
} }

View file

@ -30,6 +30,7 @@ class _PostScreenState extends State<PostScreen> {
@override @override
void initState() { void initState() {
super.initState();
Future.delayed(const Duration(milliseconds: 500), () async { Future.delayed(const Duration(milliseconds: 500), () async {
getIt<ActiveProfileSelector<TimelineManager>>() getIt<ActiveProfileSelector<TimelineManager>>()
.activeEntry .activeEntry

View file

@ -62,13 +62,11 @@ class _SearchScreenState extends State<SearchScreen> {
} }
Future<void> updateSearchResults(Profile profile, {bool reset = true}) async { Future<void> updateSearchResults(Profile profile, {bool reset = true}) async {
print('Starting update');
if (reset) { if (reset) {
nextPage = PagingData(limit: limit); nextPage = PagingData(limit: limit);
searchResult = SearchResults.empty(); searchResult = SearchResults.empty();
} }
print('Search $searchType on ${searchTextController.text}');
final result = await SearchClient(profile) final result = await SearchClient(profile)
.search(searchType, searchTextController.text, nextPage); .search(searchType, searchTextController.text, nextPage);
result.match( result.match(
@ -80,12 +78,9 @@ class _SearchScreenState extends State<SearchScreen> {
onError: (error) => onError: (error) =>
buildSnackbar(context, 'Error getting search result: $error'), buildSnackbar(context, 'Error getting search result: $error'),
); );
print('Ending update');
} }
clearSearchResults() { clearSearchResults() {
print('Clearing results');
setState(() { setState(() {
searchResult = SearchResults.empty(); searchResult = SearchResults.empty();
searchTextController.text = ''; searchTextController.text = '';
@ -159,7 +154,7 @@ class _SearchScreenState extends State<SearchScreen> {
alignLabelWithHint: true, alignLabelWithHint: true,
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
), ),
@ -329,7 +324,7 @@ class _SearchScreenState extends State<SearchScreen> {
await cm.fullRefresh(connection); await cm.fullRefresh(connection);
} }
}); });
if (context.mounted) { if (mounted) {
context.pushNamed(ScreenPaths.userProfile, context.pushNamed(ScreenPaths.userProfile,
pathParameters: {'id': connection.id}); pathParameters: {'id': connection.id});
} }

View file

@ -219,7 +219,7 @@ class NetworkCapabilitiesWidget extends StatelessWidget {
} }
return ListTile( return ListTile(
title: Row( title: const Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text('Network Capabilities'), Text('Network Capabilities'),
@ -230,7 +230,7 @@ class NetworkCapabilitiesWidget extends StatelessWidget {
], ],
), ),
subtitle: DataTable( subtitle: DataTable(
columns: [ columns: const [
DataColumn(label: Text('Network')), DataColumn(label: Text('Network')),
DataColumn(label: Text('React')), DataColumn(label: Text('React')),
DataColumn(label: Text('Reshare')), DataColumn(label: Text('Reshare')),

View file

@ -174,7 +174,7 @@ class _SignInScreenState extends State<SignInScreen> {
hintText: 'Server Name (friendica.example.com)', hintText: 'Server Name (friendica.example.com)',
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
), ),
@ -225,7 +225,7 @@ class _SignInScreenState extends State<SignInScreen> {
'Your username on the server (not email address)', 'Your username on the server (not email address)',
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
), ),
@ -260,7 +260,7 @@ class _SignInScreenState extends State<SignInScreen> {
hintText: 'Password', hintText: 'Password',
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.surface,
), ),
borderRadius: BorderRadius.circular(5.0), borderRadius: BorderRadius.circular(5.0),
), ),
@ -274,7 +274,7 @@ class _SignInScreenState extends State<SignInScreen> {
onPressed: () async => await _signIn(context), onPressed: () async => await _signIn(context),
child: const Text('Signin'), child: const Text('Signin'),
) )
: SizedBox(), : const SizedBox(),
const VerticalPadding(), const VerticalPadding(),
Text( Text(
'Logged out:', 'Logged out:',
@ -383,14 +383,13 @@ class _SignInScreenState extends State<SignInScreen> {
final confirm = await showYesNoDialog(context, final confirm = await showYesNoDialog(context,
'Are you sure you want to logout and delete *all* accounts? This cannot be undone.') ?? 'Are you sure you want to logout and delete *all* accounts? This cannot be undone.') ??
false; false;
print(confirm);
if (!confirm) { if (!confirm) {
return; return;
} }
await getIt<AccountsService>().clearAllProfiles(); await getIt<AccountsService>().clearAllProfiles();
}, },
child: Text('Clear All')), child: const Text('Clear All')),
], ],
), ),
), ),
@ -438,16 +437,16 @@ class _SignInScreenState extends State<SignInScreen> {
creds, creds,
withNotification: false, withNotification: false,
); );
if (mounted && result.isFailure) { if (context.mounted && result.isFailure) {
buildSnackbar(context, 'Error signing in: ${result.error}'); buildSnackbar(context, 'Error signing in: ${result.error}');
return; return;
} }
if (mounted) { if (context.mounted) {
buildSnackbar(context, 'Account signed in...'); buildSnackbar(context, 'Account signed in...');
} }
await getIt<AccountsService>().setActiveProfile(result.value); await getIt<AccountsService>().setActiveProfile(result.value);
if (mounted) { if (context.mounted) {
context.goNamed(ScreenPaths.timelines); context.goNamed(ScreenPaths.timelines);
} }
} }

View file

@ -4,7 +4,7 @@ import '../controls/linear_status_indicator.dart';
import '../controls/standard_appbar.dart'; import '../controls/standard_appbar.dart';
import '../controls/timeline/timeline_panel.dart'; import '../controls/timeline/timeline_panel.dart';
import '../globals.dart'; import '../globals.dart';
import '../models/TimelineIdentifiers.dart'; import '../models/timeline_identifiers.dart';
import '../services/network_status_service.dart'; import '../services/network_status_service.dart';
import '../services/timeline_manager.dart'; import '../services/timeline_manager.dart';
import '../utils/active_profile_selector.dart'; import '../utils/active_profile_selector.dart';

View file

@ -189,7 +189,7 @@ class _UserProfileScreenState extends State<UserProfileScreen> {
} else { } else {
await manager.removeUserFromCircle(g, profile); await manager.removeUserFromCircle(g, profile);
} }
if (mounted) { if (context.mounted) {
buildSnackbar(context, "User's Circles Updated"); buildSnackbar(context, "User's Circles Updated");
} }

View file

@ -322,7 +322,7 @@ class ConnectionsManager extends ChangeNotifier {
Result<List<CircleData>, ExecError> getCirclesForUser(String id) { Result<List<CircleData>, ExecError> getCirclesForUser(String id) {
final result = circlesRepo.getCirclesForUser(id); final result = circlesRepo.getCirclesForUser(id);
if (result.isSuccess) { if (result.isSuccess) {
print("Circles for user $id: $result"); _logger.finer("Circles for user $id: $result");
return result; return result;
} }

View file

@ -6,13 +6,13 @@ import 'package:result_monad/result_monad.dart';
import '../friendica_client/friendica_client.dart'; import '../friendica_client/friendica_client.dart';
import '../friendica_client/paging_data.dart'; import '../friendica_client/paging_data.dart';
import '../globals.dart'; import '../globals.dart';
import '../models/TimelineIdentifiers.dart';
import '../models/auth/profile.dart'; import '../models/auth/profile.dart';
import '../models/entry_tree_item.dart'; import '../models/entry_tree_item.dart';
import '../models/exec_error.dart'; import '../models/exec_error.dart';
import '../models/image_entry.dart'; import '../models/image_entry.dart';
import '../models/media_attachment_uploads/new_entry_media_items.dart'; import '../models/media_attachment_uploads/new_entry_media_items.dart';
import '../models/timeline_entry.dart'; import '../models/timeline_entry.dart';
import '../models/timeline_identifiers.dart';
import '../models/visibility.dart'; import '../models/visibility.dart';
import '../utils/active_profile_selector.dart'; import '../utils/active_profile_selector.dart';
import 'media_upload_attachment_helper.dart'; import 'media_upload_attachment_helper.dart';

View file

@ -80,8 +80,9 @@ class NotificationsManager extends ChangeNotifier {
first = false; first = false;
result.match( result.match(
onSuccess: (nd) => print('Got ${nd.data.length} notifications'), onSuccess: (nd) =>
onError: (e) => debugPrint('Error getting notification: $e')); _logger.fine('Got ${nd.data.length} notifications'),
onError: (e) => _logger.severe('Error getting notification: $e'));
final response = result.getValueOrElse(() => PagedResponse([])); final response = result.getValueOrElse(() => PagedResponse([]));
response.data response.data
.where((n) => .where((n) =>

View file

@ -4,7 +4,6 @@ import 'package:result_monad/result_monad.dart';
import '../data/interfaces/circles_repo_intf.dart'; import '../data/interfaces/circles_repo_intf.dart';
import '../friendica_client/friendica_client.dart'; import '../friendica_client/friendica_client.dart';
import '../models/TimelineIdentifiers.dart';
import '../models/auth/profile.dart'; import '../models/auth/profile.dart';
import '../models/circle_data.dart'; import '../models/circle_data.dart';
import '../models/entry_tree_item.dart'; import '../models/entry_tree_item.dart';
@ -13,6 +12,7 @@ import '../models/image_entry.dart';
import '../models/media_attachment_uploads/new_entry_media_items.dart'; import '../models/media_attachment_uploads/new_entry_media_items.dart';
import '../models/timeline.dart'; import '../models/timeline.dart';
import '../models/timeline_entry.dart'; import '../models/timeline_entry.dart';
import '../models/timeline_identifiers.dart';
import '../models/visibility.dart'; import '../models/visibility.dart';
import 'entry_manager_service.dart'; import 'entry_manager_service.dart';

View file

@ -2,10 +2,10 @@ import '../models/entry_tree_item.dart';
import '../models/flattened_tree_item.dart'; import '../models/flattened_tree_item.dart';
extension FlatteningExtensions on EntryTreeItem { extension FlatteningExtensions on EntryTreeItem {
static const BaseLevel = 0; static const baseLevel = 0;
List<FlattenedTreeItem> flatten( List<FlattenedTreeItem> flatten(
{int level = BaseLevel, bool topLevelOnly = false}) { {int level = baseLevel, bool topLevelOnly = false}) {
final items = <FlattenedTreeItem>[]; final items = <FlattenedTreeItem>[];
final myEntry = FlattenedTreeItem( final myEntry = FlattenedTreeItem(
timelineEntry: entry, timelineEntry: entry,
@ -23,7 +23,7 @@ extension FlatteningExtensions on EntryTreeItem {
c1.entry.creationTimestamp.compareTo(c2.entry.creationTimestamp)); c1.entry.creationTimestamp.compareTo(c2.entry.creationTimestamp));
for (final child in sortedChildren) { for (final child in sortedChildren) {
int childLevel = level + 1; int childLevel = level + 1;
if (child.entry.authorId == entry.authorId && level != BaseLevel) { if (child.entry.authorId == entry.authorId && level != baseLevel) {
childLevel = level; childLevel = level;
} }

View file

@ -38,19 +38,21 @@ void _updateSwapTagLinks(Node node, List<String> tags) {
if (hasExpectedTag) { if (hasExpectedTag) {
final profile = getIt<AccountsService>().currentProfile; final profile = getIt<AccountsService>().currentProfile;
final newTagUrl = generateTagUrlFromProfile(profile, tag); final newTagUrl = generateTagUrlFromProfile(profile, tag);
print(node.attributes['href']);
node.attributes['href'] = newTagUrl.toString(); node.attributes['href'] = newTagUrl.toString();
print(node.attributes['href']);
} }
} }
node.nodes.forEach((n) => _updateSwapTagLinks(n, tags)); for (var n in node.nodes) {
_updateSwapTagLinks(n, tags);
}
} }
} }
String htmlWithTagLinkSwap(String htmlContentFragment, List<String> tags) { String htmlWithTagLinkSwap(String htmlContentFragment, List<String> tags) {
try { try {
final dom = parseFragment(htmlContentFragment); final dom = parseFragment(htmlContentFragment);
dom.nodes.forEach((n) => _updateSwapTagLinks(n, tags)); for (var n in dom.nodes) {
_updateSwapTagLinks(n, tags);
}
final result = dom.outerHtml; final result = dom.outerHtml;
return result; return result;

View file

@ -1,6 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart' show MapEquality;
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:result_monad/result_monad.dart'; import 'package:result_monad/result_monad.dart';
@ -149,7 +149,6 @@ class _ExpiringRequestCache {
response, response,
); );
print('Adding cached response for $type => $url');
_responses[cacheEntry] = cacheEntry; _responses[cacheEntry] = cacheEntry;
} }

View file

@ -19,6 +19,7 @@ import screen_brightness_macos
import shared_preferences_foundation import shared_preferences_foundation
import sqflite import sqflite
import url_launcher_macos import url_launcher_macos
import video_player_avfoundation
import wakelock_plus import wakelock_plus
import window_to_front import window_to_front
@ -37,6 +38,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin"))
WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
WindowToFrontPlugin.register(with: registry.registrar(forPlugin: "WindowToFrontPlugin")) WindowToFrontPlugin.register(with: registry.registrar(forPlugin: "WindowToFrontPlugin"))
} }

View file

@ -10,19 +10,16 @@ PODS:
- flutter_web_auth_2 (3.0.0): - flutter_web_auth_2 (3.0.0):
- FlutterMacOS - FlutterMacOS
- FlutterMacOS (1.0.0) - FlutterMacOS (1.0.0)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- media_kit_libs_macos_video (1.0.4): - media_kit_libs_macos_video (1.0.4):
- FlutterMacOS - FlutterMacOS
- media_kit_native_event_loop (1.0.0): - media_kit_native_event_loop (1.0.0):
- FlutterMacOS - FlutterMacOS
- media_kit_video (0.0.1): - media_kit_video (0.0.1):
- FlutterMacOS - FlutterMacOS
- ObjectBox (1.9.0) - ObjectBox (2.0.0)
- objectbox_flutter_libs (0.0.1): - objectbox_flutter_libs (0.0.1):
- FlutterMacOS - FlutterMacOS
- ObjectBox (= 1.9.0) - ObjectBox (= 2.0.0)
- package_info_plus (0.0.1): - package_info_plus (0.0.1):
- FlutterMacOS - FlutterMacOS
- path_provider_foundation (0.0.1): - path_provider_foundation (0.0.1):
@ -33,11 +30,14 @@ PODS:
- shared_preferences_foundation (0.0.1): - shared_preferences_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- sqflite (0.0.2): - sqflite (0.0.3):
- Flutter
- FlutterMacOS - FlutterMacOS
- FMDB (>= 2.7.5)
- url_launcher_macos (0.0.1): - url_launcher_macos (0.0.1):
- FlutterMacOS - FlutterMacOS
- video_player_avfoundation (0.0.1):
- Flutter
- FlutterMacOS
- wakelock_plus (0.0.1): - wakelock_plus (0.0.1):
- FlutterMacOS - FlutterMacOS
- window_to_front (0.0.1): - window_to_front (0.0.1):
@ -58,14 +58,14 @@ DEPENDENCIES:
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- screen_brightness_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_brightness_macos/macos`) - screen_brightness_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_brightness_macos/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- video_player_avfoundation (from `Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin`)
- wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`) - wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`)
- window_to_front (from `Flutter/ephemeral/.symlinks/plugins/window_to_front/macos`) - window_to_front (from `Flutter/ephemeral/.symlinks/plugins/window_to_front/macos`)
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- FMDB
- ObjectBox - ObjectBox
EXTERNAL SOURCES: EXTERNAL SOURCES:
@ -98,9 +98,11 @@ EXTERNAL SOURCES:
shared_preferences_foundation: shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
sqflite: sqflite:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos :path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin
url_launcher_macos: url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
video_player_avfoundation:
:path: Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin
wakelock_plus: wakelock_plus:
:path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos :path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos
window_to_front: window_to_front:
@ -108,23 +110,23 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
desktop_window: fb7c4f12c1129f947ac482296b6f14059d57a3c3 desktop_window: fb7c4f12c1129f947ac482296b6f14059d57a3c3
device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9 file_selector_macos: 54fdab7caa3ac3fc43c9fac4d7d8d231277f8cf2
flutter_secure_storage_macos: d56e2d218c1130b262bef8b4a7d64f88d7f9c9ea flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9
flutter_web_auth_2: 2e1dc2d2139973e4723c5286ce247dd590390d70 flutter_web_auth_2: 2e1dc2d2139973e4723c5286ce247dd590390d70
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
media_kit_libs_macos_video: b3e2bbec2eef97c285f2b1baa7963c67c753fb82 media_kit_libs_macos_video: b3e2bbec2eef97c285f2b1baa7963c67c753fb82
media_kit_native_event_loop: 81fd5b45192b72f8b5b69eaf5b540f45777eb8d5 media_kit_native_event_loop: 81fd5b45192b72f8b5b69eaf5b540f45777eb8d5
media_kit_video: c75b07f14d59706c775778e4dd47dd027de8d1e5 media_kit_video: c75b07f14d59706c775778e4dd47dd027de8d1e5
ObjectBox: e7ff611291a0663380e0736b46786bcd077294ff ObjectBox: f5319bd9ad2ea960796eff7227e86471867e9ef0
objectbox_flutter_libs: 32997857c213cbcc6f9b25ffc73e1e3c34ea3c8e objectbox_flutter_libs: 8ce2ac829cfbbc62ad4764a0d219786d098b1afa
package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
screen_brightness_macos: 2d6d3af2165592d9a55ffcd95b7550970e41ebda screen_brightness_macos: 2d6d3af2165592d9a55ffcd95b7550970e41ebda
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95 url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269 wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269
window_to_front: 4cdc24ddd8461ad1a55fa06286d6a79d8b29e8d8 window_to_front: 4cdc24ddd8461ad1a55fa06286d6a79d8b29e8d8

View file

@ -14,7 +14,7 @@
<true/> <true/>
<key>keychain-access-groups</key> <key>keychain-access-groups</key>
<array> <array>
<string>$(AppIdentifierPrefix)T69YZGT58U.relatica</string> <string>T69YZGT58U.relatica</string>
</array> </array>
</dict> </dict>
</plist> </plist>

View file

@ -14,7 +14,7 @@
<true/> <true/>
<key>keychain-access-groups</key> <key>keychain-access-groups</key>
<array> <array>
<string>$(AppIdentifierPrefix)T69YZGT58U.relatica</string> <string>T69YZGT58U.relatica</string>
</array> </array>
</dict> </dict>
</plist> </plist>

View file

@ -18,7 +18,7 @@
<true/> <true/>
<key>keychain-access-groups</key> <key>keychain-access-groups</key>
<array> <array>
<string>$(AppIdentifierPrefix)T69YZGT58U.relatica</string> <string>T69YZGT58U.relatica</string>
</array> </array>
</dict> </dict>
</plist> </plist>

File diff suppressed because it is too large Load diff

View file

@ -5,64 +5,65 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.12.0+7 version: 0.12.0+7
environment: environment:
sdk: '>=3.0.0 <4.0.0' sdk: '>=3.2.0 <4.0.0'
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
cached_network_image: ^3.2.2 cached_network_image: ^3.3.1
color_blindness: ^0.1.2 color_blindness: ^0.2.0
cupertino_icons: ^1.0.2 cupertino_icons: ^1.0.8
carousel_slider: ^4.2.1 carousel_slider: ^4.2.1
desktop_window: ^0.4.0 desktop_window: ^0.4.0
device_info_plus: ^9.1.0 device_info_plus: ^10.1.0
device_preview: ^1.1.0 # device_preview: ^1.1.0
file_picker: ^6.0.0 file_picker: ^8.0.6
flutter_dotenv: ^5.0.2 flutter_dotenv: ^5.1.0
flutter_file_dialog: ^3.0.0 flutter_file_dialog: ^3.0.2
flutter_secure_storage: ^9.0.0 flutter_secure_storage: ^9.2.2
flutter_web_auth_2: ^3.0.3 flutter_web_auth_2: ^3.1.2
flutter_widget_from_html_core: ^0.14.6 flutter_widget_from_html_core: ^0.15.1
get_it: ^7.2.0 get_it: ^7.7.0
get_it_mixin: ^4.1.1 get_it_mixin: ^4.2.2
go_router: ^12.0.1 go_router: ^14.1.2
html: ^0.15.2 html: ^0.15.4
image: ^4.0.15 image: ^4.2.0
image_picker: ^1.0.4 image_picker: ^1.1.2
logging: ^1.1.0 logging: ^1.2.0
markdown: ^7.0.1 markdown: ^7.2.2
## TODO Media Kit Update
media_kit: ^1.1.10 # Primary package. media_kit: ^1.1.10 # Primary package.
media_kit_libs_video: ^1.0.4 # Native video dependencies. media_kit_libs_video: ^1.0.4 # Native video dependencies.
media_kit_video: ^1.2.4 # For video rendering. media_kit_video: ^1.2.4 # For video rendering.
multi_trigger_autocomplete: ^1.0.0 multi_trigger_autocomplete: ^1.0.0
network_to_file_image: ^4.0.1 network_to_file_image: ^6.0.1
objectbox: ^2.3.1 objectbox: ^4.0.1
objectbox_flutter_libs: ^2.3.1 objectbox_flutter_libs: ^4.0.1
path: ^1.8.2 path: ^1.9.0
path_provider: ^2.0.11 path_provider: ^2.1.3
provider: ^6.0.4 provider: ^6.1.2
result_monad: result_monad: ^2.3.2
git: scrollable_positioned_list: ^0.3.8
url: https://gitlab.com/HankG/dart-result-monad.git shared_preferences: ^2.2.3
scrollable_positioned_list: ^0.3.5 sqlite3: ^2.4.3
shared_preferences: ^2.0.15 stack_trace: ^1.11.1
sqlite3: ^2.1.0 string_validator: ^1.1.0
stack_trace: ^1.11.0
string_validator: ^1.0.2
time_machine: ^0.9.17 time_machine: ^0.9.17
url_launcher: ^6.1.6 url_launcher: ^6.3.0
uuid: ^4.1.0 uuid: ^4.4.2
video_player: ^2.4.10 video_player: ^2.9.1
flutter_svg: ^2.0.5 flutter_svg: ^2.0.10+1
image_gallery_saver: ^2.0.3 image_gallery_saver: ^2.0.3
http: any
http_parser: any
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
flutter_lints: ^3.0.0 flutter_lints: ^4.0.0
build_runner: ^2.3.3 build_runner: ^2.4.10
objectbox_generator: ^2.0.0 objectbox_generator: ^4.0.1
flutter: flutter:
uses-material-design: true uses-material-design: true