Flutter upgrade

This commit is contained in:
Hillel Coren 2023-10-10 12:00:37 +03:00
parent d05e98d15f
commit 12855222d0
37 changed files with 358 additions and 246 deletions

View File

@ -1,11 +1,11 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled.
# This file should be version controlled and should not be manually edited.
version:
revision: c07f7888888435fd9df505aa2efc38d3cf65681b
channel: stable
revision: "ead455963c12b453cdb2358cad34969c76daf180"
channel: "stable"
project_type: app
@ -13,11 +13,11 @@ project_type: app
migration:
platforms:
- platform: root
create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b
base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b
- platform: linux
create_revision: c07f7888888435fd9df505aa2efc38d3cf65681b
base_revision: c07f7888888435fd9df505aa2efc38d3cf65681b
create_revision: ead455963c12b453cdb2358cad34969c76daf180
base_revision: ead455963c12b453cdb2358cad34969c76daf180
- platform: windows
create_revision: ead455963c12b453cdb2358cad34969c76daf180
base_revision: ead455963c12b453cdb2358cad34969c76daf180
# User provided section

View File

@ -22,8 +22,6 @@
# in sync with this file.
analyzer:
strong-mode:
implicit-dynamic: false
errors:
# https://github.com/flutter/flutter/issues/41563#issuecomment-686481533
undefined_prefixed_name: ignore
@ -51,7 +49,7 @@ linter:
- always_declare_return_types
- always_put_control_body_on_new_line
# - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219
- always_require_non_null_named_parameters
# - always_require_non_null_named_parameters # deprecated
# - always_specify_types # not support by built_value
- annotate_overrides
# - avoid_annotating_with_dynamic # conflicts with always_specify_types
@ -92,11 +90,11 @@ linter:
# hash_and_equals # For built_value memoized hash
- implementation_imports
# - invariant_booleans # https://github.com/flutter/flutter/issues/5790
- iterable_contains_unrelated_type
# - iterable_contains_unrelated_type # deprecated
# - join_return_with_assignment # not yet tested
- library_names
- library_prefixes
- list_remove_unrelated_type
# - list_remove_unrelated_type # deprecated
# - literal_only_boolean_expressions # https://github.com/flutter/flutter/issues/5791
- no_adjacent_strings_in_list
- no_duplicate_case_values

View File

@ -315,7 +315,7 @@ class UserPermission extends EnumClass {
static UserPermission valueOf(String name) => _$permissionValueOf(name);
}
abstract class EntityStatus {
abstract mixin class EntityStatus {
String get id;
String get name;
@ -352,7 +352,7 @@ class EntityStats {
}
}
abstract class SelectableEntity {
abstract mixin class SelectableEntity {
String get id;
bool matchesFilter(String? filter) => true;
@ -376,7 +376,7 @@ class EntityFields {
static const String isDeleted = 'is_deleted';
}
abstract class BaseEntity implements SelectableEntity {
abstract mixin class BaseEntity implements SelectableEntity {
static int counter = 0;
static String get nextId => '${--counter}';
@ -534,7 +534,7 @@ abstract class BaseEntity implements SelectableEntity {
}
}
abstract class HasActivities {
abstract mixin class HasActivities {
BuiltList<ActivityEntity> get activities;
Iterable<ActivityEntity> getActivities({String? invoiceId, String? typeId}) {
@ -550,11 +550,11 @@ abstract class HasActivities {
}
}
abstract class BelongsToClient {
abstract mixin class BelongsToClient {
String? get clientId;
}
abstract class BelongsToVendor {
abstract mixin class BelongsToVendor {
String get vendorId;
}

View File

@ -7,7 +7,7 @@ import 'package:built_collection/built_collection.dart';
import 'package:invoiceninja_flutter/data/models/invoice_model.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
abstract class CalculateInvoiceTotal {
abstract mixin class CalculateInvoiceTotal {
bool get isAmountDiscount;
String get taxName1;

View File

@ -520,13 +520,13 @@ abstract class TaskEntity extends Object
if (taskItem[0] == false || taskItem[0] == null) {
startDate = 0;
} else {
startDate = (taskItem[0]).round();
startDate = taskItem[0].round();
}
if (taskItem[1] == false || taskItem[1] == null) {
endDate = 0;
} else {
endDate = (taskItem[1]).round();
endDate = taskItem[1].round();
}
final taskTime = TaskTime(

View File

@ -193,10 +193,12 @@ void main({bool isTesting = false}) async {
event = event.copyWith(
environment: '${store.state.environment}'.split('.').last,
/*
extra: <String, dynamic>{
'server_version': account.currentVersion,
'route': state.uiState.currentRoute,
},
*/
);
return event;

View File

@ -172,14 +172,6 @@ class InvoiceNinjaAppState extends State<InvoiceNinjaApp> {
void initState() {
super.initState();
final window = WidgetsBinding.instance.window;
window.onPlatformBrightnessChanged = () {
WidgetsBinding.instance.handlePlatformBrightnessChanged();
widget.store!.dispatch(UpdateUserPreferences(
enableDarkModeSystem: window.platformBrightness == Brightness.dark));
setState(() {});
};
if (kIsWeb) {
WebUtils.warnChanges(widget.store);
}
@ -235,6 +227,11 @@ class InvoiceNinjaAppState extends State<InvoiceNinjaApp> {
if (state.prefState.requireAuthentication && !_authenticated) {
_authenticate();
}
final brightness = MediaQuery.of(context).platformBrightness;
widget.store!.dispatch(UpdateUserPreferences(
enableDarkModeSystem: brightness == Brightness.dark));
super.didChangeDependencies();
}

View File

@ -262,7 +262,7 @@ Middleware<AppState> _createRefreshRequest(AuthRepository repository) {
String token;
bool hasToken = false;
if ((state.userCompany.token.token).isNotEmpty) {
if (state.userCompany.token.token.isNotEmpty) {
token = state.userCompany.token.token;
hasToken = true;
} else {

View File

@ -199,7 +199,7 @@ List<String?> taskList(
final list = taskMap.keys.where((taskId) {
final task = taskMap[taskId];
if ((clientId ?? '').isNotEmpty &&
(task!.clientId).isNotEmpty &&
task!.clientId.isNotEmpty &&
task.clientId != clientId) {
return false;
}

View File

@ -8,7 +8,7 @@ import 'package:built_value/built_value.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
abstract class EntityUIState {
abstract mixin class EntityUIState {
bool get isCreatingNew;
String get editingId;

View File

@ -1,5 +1,4 @@
// Dart imports:
import 'dart:convert';
// Flutter imports:
import 'package:flutter/foundation.dart';
@ -59,12 +58,17 @@ class _MobileWebViewState extends State<_MobileWebView>
super.didUpdateWidget(oldWidget);
if (widget.html != oldWidget.html) {
_webViewController.loadHtmlString(widget.html!);
/*
_webViewController.loadUrl(Uri.dataFromString(widget.html!,
mimeType: 'text/html', encoding: Encoding.getByName('utf-8'))
.toString());
*/
}
}
/*
@override
Widget build(BuildContext context) {
super.build(context);
@ -79,4 +83,5 @@ class _MobileWebViewState extends State<_MobileWebView>
javascriptMode: JavascriptMode.disabled,
);
}
*/
}

View File

@ -33,21 +33,23 @@ class CopyToClipboard extends StatelessWidget {
)
: child;
final localization = AppLocalization.of(context);
final onTap = () {
Clipboard.setData(ClipboardData(text: value));
final onTap = value == null
? null
: () {
Clipboard.setData(ClipboardData(text: value!));
var valueStr = value!.replaceAll('\n', ' ');
if (value!.length > 20) {
valueStr = value!.substring(0, 20) + '...';
}
var valueStr = value!.replaceAll('\n', ' ');
if (value!.length > 20) {
valueStr = value!.substring(0, 20) + '...';
}
showToast(
localization!.copiedToClipboard.replaceFirst(
':value',
'"$valueStr"',
),
);
};
showToast(
localization!.copiedToClipboard.replaceFirst(
':value',
'"$valueStr"',
),
);
};
if (showBorder) {
return ConstrainedBox(

View File

@ -440,7 +440,7 @@ class _InvoiceEmailViewState extends State<InvoiceEmailView>
return EditScaffold(
entity: invoice,
title: localization!.sendEmail,
onCancelPressed: (context) => viewEntity(entity: invoice!),
onCancelPressed: (context) => viewEntity(entity: invoice),
saveLabel: localization.send,
onSavePressed: (context) {
if (state!.account.accountSmsVerified || state.isSelfHosted) {
@ -522,7 +522,7 @@ class _InvoiceEmailViewState extends State<InvoiceEmailView>
child: EditScaffold(
entity: invoice,
title: localization!.sendEmail,
onCancelPressed: (context) => viewEntity(entity: invoice!),
onCancelPressed: (context) => viewEntity(entity: invoice),
appBarBottom: TabBar(
controller: _controller,
isScrollable: true,

View File

@ -34,7 +34,7 @@ class AppListTile extends StatelessWidget {
return;
}
Clipboard.setData(ClipboardData(text: copyValue ?? title));
Clipboard.setData(ClipboardData(text: copyValue ?? title ?? ''));
showToast(AppLocalization.of(context)!
.copiedToClipboard
.replaceFirst(':value', copyValue ?? title!));

View File

@ -280,7 +280,7 @@ class _MenuDrawerState extends State<MenuDrawer> {
items: [
...state.companies
.map((CompanyEntity company) => DropdownMenuItem<String>(
value: (state.companies.indexOf(company)).toString(),
value: state.companies.indexOf(company).toString(),
child: _companyListItem(company)))
.toList(),
if (state.canAddCompany)

View File

@ -1,3 +1,4 @@
/*
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@ -1003,3 +1004,5 @@ class _NullWidget extends Widget {
@override
Element createElement() => throw UnimplementedError();
}
*/

View File

@ -1,3 +1,4 @@
/*
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@ -63,3 +64,4 @@ abstract class AppDataTableSource extends ChangeNotifier {
/// If the selected row count changes, call [notifyListeners].
int get selectedRowCount;
}
*/

View File

@ -1,3 +1,4 @@
/*
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@ -518,3 +519,4 @@ class AppPaginatedDataTableState extends State<AppPaginatedDataTable> {
);
}
}
*/

View File

@ -1,8 +1,8 @@
// Flutter imports:
import 'package:flutter/material.dart' hide DataRow, DataCell, DataColumn;
// Package imports:
import 'package:built_collection/built_collection.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
@ -14,13 +14,11 @@ import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/ui/pref_state.dart';
import 'package:invoiceninja_flutter/ui/app/actions_menu_button.dart';
import 'package:invoiceninja_flutter/ui/app/presenters/entity_presenter.dart';
import 'package:invoiceninja_flutter/ui/app/tables/app_data_table.dart';
import 'package:invoiceninja_flutter/ui/app/tables/app_data_table_source.dart';
import 'package:invoiceninja_flutter/utils/colors.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
class EntityDataTableSource extends AppDataTableSource {
class EntityDataTableSource extends DataTableSource {
EntityDataTableSource(
{required this.context,
required this.editingId,
@ -129,7 +127,7 @@ class EntityDataTableSource extends AppDataTableSource {
],
),
onTap: () => onTap(entity),
backgroundColor: backgroundColor,
//backgroundColor: backgroundColor,
),
...tableColumns!.map(
(field) => DataCell(
@ -146,7 +144,7 @@ class EntityDataTableSource extends AppDataTableSource {
),
onTap: () => onTap(entity),
//onLongPress: () => selectEntity(entity: entity, context: context, longPress: true),
backgroundColor: backgroundColor,
//backgroundColor: backgroundColor,
),
)
],

View File

@ -5,7 +5,7 @@ import 'dart:math';
// Flutter imports:
import 'package:built_collection/built_collection.dart';
import 'package:collection/collection.dart' show IterableNullableExtension;
import 'package:flutter/material.dart' hide DataRow, DataCell, DataColumn;
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_redux/flutter_redux.dart';
@ -26,8 +26,6 @@ import 'package:invoiceninja_flutter/ui/app/lists/list_filter.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/app/presenters/entity_presenter.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/tables/app_data_table.dart';
import 'package:invoiceninja_flutter/ui/app/tables/app_paginated_data_table.dart';
import 'package:invoiceninja_flutter/ui/app/tables/entity_datatable.dart';
import 'package:invoiceninja_flutter/utils/icons.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -247,8 +245,8 @@ class _EntityListState extends State<EntityList> {
primary: true,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 16),
child: AppPaginatedDataTable(
hasActionsColumn: true,
child: PaginatedDataTable(
//hasActionsColumn: true,
onSelectAll: (value) {
final startIndex =
min(_firstRowIndex, entityList.length - 1);
@ -294,12 +292,10 @@ class _EntityListState extends State<EntityList> {
sortAscending: listUIState.sortAscending,
rowsPerPage: state.prefState.rowsPerPage,
onPageChanged: (row) {
if (row != null) {
_firstRowIndex = row;
store.dispatch(UpdateLastHistory(
(row / state.prefState.rowsPerPage).floor()));
}
},
_firstRowIndex = row;
store.dispatch(UpdateLastHistory(
(row / state.prefState.rowsPerPage).floor()));
},
initialFirstRowIndex: _firstRowIndex,
availableRowsPerPage: [
10,
@ -469,7 +465,7 @@ class _EntityListState extends State<EntityList> {
multiselect: true,
completer: Completer<Null>()
..future.then<Null>(
((_) => widget.onClearMultiselect())),
(_) => widget.onClearMultiselect()),
);
},
onCancelPressed: (_) => widget.onClearMultiselect(),

View File

@ -73,8 +73,8 @@ class CompanyGatewayScreen extends StatelessWidget {
entities: companyGateways,
multiselect: true,
completer: Completer<Null>()
..future.then<Null>(((_) =>
store.dispatch(ClearCompanyGatewayMultiselect()))),
..future.then<Null>((_) =>
store.dispatch(ClearCompanyGatewayMultiselect())),
);
},
onCancelPressed: (context) =>

View File

@ -1,8 +1,8 @@
// Flutter imports:
import 'package:collection/collection.dart' show IterableNullableExtension;
import 'package:flutter/material.dart' hide DataRow, DataCell, DataColumn;
import 'package:flutter/material.dart' as mt;
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_redux/flutter_redux.dart';
@ -33,9 +33,6 @@ import 'package:invoiceninja_flutter/ui/app/history_drawer_vm.dart';
import 'package:invoiceninja_flutter/ui/app/menu_drawer_vm.dart';
import 'package:invoiceninja_flutter/ui/app/presenters/entity_presenter.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/tables/app_data_table.dart';
import 'package:invoiceninja_flutter/ui/app/tables/app_data_table_source.dart';
import 'package:invoiceninja_flutter/ui/app/tables/app_paginated_data_table.dart';
import 'package:invoiceninja_flutter/ui/app/upgrade_dialog.dart';
import 'package:invoiceninja_flutter/ui/reports/report_charts.dart';
import 'package:invoiceninja_flutter/ui/reports/reports_screen_vm.dart';
@ -160,7 +157,8 @@ class ReportsScreen extends StatelessWidget {
final columnTitle = state.company.getCustomFieldLabel(column);
return DropdownMenuItem(
child: Text(columnTitle.isEmpty
? localization.lookup(column): columnTitle),
? localization.lookup(column)
: columnTitle),
value: column,
);
}).toList(),
@ -395,7 +393,7 @@ class ReportsScreen extends StatelessWidget {
: reportResult.entities!;
confirmCallback(
context: context,
message: localization.lookup(action.toString())+
message: localization.lookup(action.toString()) +
'' +
(entities.length == 1
? '1 ${localization.lookup(firstEntity!.entityType.toString())}'
@ -590,7 +588,7 @@ class _ReportDataTableState extends State<ReportDataTable> {
*/
// ignore: invalid_use_of_visible_for_testing_member, invalid_use_of_protected_member
dataTableSource.notifyListeners();
//dataTableSource.notifyListeners();
}
@override
@ -685,9 +683,9 @@ class _ReportDataTableState extends State<ReportDataTable> {
),
SingleChildScrollView(
padding: const EdgeInsets.all(12),
child: AppPaginatedDataTable(
child: PaginatedDataTable(
//showFirstLastButtons: true,
subtractOneFromCount: true,
//subtractOneFromCount: true,
header: SizedBox(),
sortColumnIndex: sortedColumns.contains(reportSettings.sortColumn)
? sortedColumns.indexOf(reportSettings.sortColumn)
@ -794,7 +792,7 @@ ReportColumnType getReportColumnType(String? column, BuildContext context) {
}
}
class ReportDataTableSource extends AppDataTableSource {
class ReportDataTableSource extends DataTableSource {
ReportDataTableSource({
required this.context,
required this.textEditingControllers,
@ -1053,7 +1051,7 @@ class ReportResult {
Text(
(company.getCustomFieldLabel(column!).isNotEmpty
? company.getCustomFieldLabel(column)
: localization!.lookup(column))+
: localization!.lookup(column)) +
' ',
maxLines: 1,
overflow: TextOverflow.ellipsis,
@ -1124,7 +1122,7 @@ class ReportResult {
))
else if (getReportColumnType(column, context) == ReportColumnType.age)
DataCell(AppDropdownButton<String>(
value: (textEditingControllers[column]!.text).isNotEmpty &&
value: textEditingControllers[column]!.text.isNotEmpty &&
textEditingControllers[column]!.text != 'null'
? textEditingControllers[column]!.text
: null,
@ -1369,7 +1367,7 @@ class ReportResult {
} else {
value = group == 'null' ? localization!.blank : group;
}
value = value+ ' (' + values!['count']!.floor().toString() + ')';
value = value + ' (' + values!['count']!.floor().toString() + ')';
} else if (columnType == ReportColumnType.number) {
final currencyId = values!['${column}_currency_id'];
value = formatNumber(values[column], context,
@ -1464,7 +1462,8 @@ class ReportResult {
mt.DataColumn(
label: Text(
company.getCustomFieldLabel(column!).isEmpty
? localization.lookup(column): company.getCustomFieldLabel(column),
? localization.lookup(column)
: company.getCustomFieldLabel(column),
overflow: TextOverflow.ellipsis,
),
numeric: true,

View File

@ -6,9 +6,7 @@ import 'package:flutter/services.dart';
// Package imports:
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/company/company_selectors.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:timeago/timeago.dart' as timeago;
// Project imports:
import 'package:invoiceninja_flutter/constants.dart';
@ -22,11 +20,9 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/color_picker.dart';
import 'package:invoiceninja_flutter/ui/app/live_text.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/device_settings_vm.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
@ -320,12 +316,13 @@ class _DeviceSettingsState extends State<DeviceSettings>
return ListTile(
leading: Icon(Icons.refresh),
title: Text(localization.refreshData),
/*
subtitle: LiveText(() {
if (state.userCompanyState.lastUpdated == 0) {
return '';
}
return localization.lastUpdated+
return localization.lastUpdated +
': ' +
timeago.format(
convertTimestampToDate(
@ -336,6 +333,7 @@ class _DeviceSettingsState extends State<DeviceSettings>
onTap: () {
viewModel.onRefreshTap(context);
},
*/
);
}),
ListTile(

View File

@ -79,7 +79,7 @@ class TaskStatusScreen extends StatelessWidget {
multiselect: true,
completer: Completer<Null>()
..future.then<Null>(
((_) => store.dispatch(ClearTaskStatusMultiselect()))),
(_) => store.dispatch(ClearTaskStatusMultiselect())),
);
},
label: localization!.actions,

View File

@ -7,6 +7,7 @@
#include "generated_plugin_registrant.h"
#include <desktop_drop/desktop_drop_plugin.h>
#include <file_selector_linux/file_selector_plugin.h>
#include <printing/printing_plugin.h>
#include <screen_retriever/screen_retriever_plugin.h>
#include <sentry_flutter/sentry_flutter_plugin.h>
@ -18,6 +19,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) desktop_drop_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "DesktopDropPlugin");
desktop_drop_plugin_register_with_registrar(desktop_drop_registrar);
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
g_autoptr(FlPluginRegistrar) printing_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "PrintingPlugin");
printing_plugin_register_with_registrar(printing_registrar);

View File

@ -4,6 +4,7 @@
list(APPEND FLUTTER_PLUGIN_LIST
desktop_drop
file_selector_linux
printing
screen_retriever
sentry_flutter

View File

@ -6,6 +6,7 @@ import FlutterMacOS
import Foundation
import desktop_drop
import file_selector_macos
import in_app_purchase_storekit
import in_app_review
import package_info
@ -25,6 +26,7 @@ import window_manager
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
DesktopDropPlugin.register(with: registry.registrar(forPlugin: "DesktopDropPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
InAppPurchasePlugin.register(with: registry.registrar(forPlugin: "InAppPurchasePlugin"))
InAppReviewPlugin.register(with: registry.registrar(forPlugin: "InAppReviewPlugin"))
FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin"))

View File

@ -37,10 +37,10 @@ packages:
dependency: transitive
description:
name: async
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.10.0"
version: "2.11.0"
attributed_text:
dependency: transitive
description:
@ -68,11 +68,12 @@ packages:
boardview:
dependency: "direct main"
description:
name: boardview
sha256: a3319f868baf036b6c217dc4f35c152c4432207552433d94841aa8d3059c6170
url: "https://pub.dev"
source: hosted
version: "0.2.2"
path: "."
ref: HEAD
resolved-ref: "80cd60f55db250ea2c86ed5762e4c55337422efe"
url: "https://github.com/BenPoell/FlutterBoardView.git"
source: git
version: "0.2.3"
boolean_selector:
dependency: transitive
description:
@ -165,10 +166,10 @@ packages:
dependency: transitive
description:
name: characters
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.3.0"
charcode:
dependency: transitive
description:
@ -229,10 +230,10 @@ packages:
dependency: "direct main"
description:
name: collection
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
url: "https://pub.dev"
source: hosted
version: "1.17.0"
version: "1.17.2"
console:
dependency: transitive
description:
@ -349,10 +350,42 @@ packages:
dependency: "direct main"
description:
name: file_picker
sha256: d090ae03df98b0247b82e5928f44d1b959867049d18d73635e2e0bc3f49542b9
sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf"
url: "https://pub.dev"
source: hosted
version: "5.2.5"
version: "5.3.1"
file_selector_linux:
dependency: transitive
description:
name: file_selector_linux
sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492"
url: "https://pub.dev"
source: hosted
version: "0.9.2+1"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6
url: "https://pub.dev"
source: hosted
version: "0.9.3+3"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262"
url: "https://pub.dev"
source: hosted
version: "2.6.1"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0
url: "https://pub.dev"
source: hosted
version: "0.9.3+1"
fixnum:
dependency: transitive
description:
@ -378,10 +411,10 @@ packages:
dependency: transitive
description:
name: flutter_cache_manager
sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3"
sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba"
url: "https://pub.dev"
source: hosted
version: "3.3.0"
version: "3.3.1"
flutter_colorpicker:
dependency: "direct main"
description:
@ -412,10 +445,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "4bef634684b2c7f3468c77c766c831229af829a0cd2d4ee6c1b99558bd14e5d2"
sha256: f185ac890306b5779ecbd611f52502d8d4d63d27703ef73161ca0407e815f02c
url: "https://pub.dev"
source: hosted
version: "2.0.8"
version: "2.0.16"
flutter_redux:
dependency: "direct main"
description:
@ -428,18 +461,18 @@ packages:
dependency: "direct main"
description:
name: flutter_slidable
sha256: "6c68e1fad129b4b807b2218ef4cf7f7f6f61c5ec8861c990dc2278d9d03cb09f"
sha256: cc4231579e3eae41ae166660df717f4bad1359c87f4a4322ad8ba1befeb3d2be
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "3.0.0"
flutter_staggered_grid_view:
dependency: "direct main"
description:
name: flutter_staggered_grid_view
sha256: "1312314293acceb65b92754298754801b0e1f26a1845833b740b30415bbbcf07"
sha256: "19e7abb550c96fbfeb546b23f3ff356ee7c59a019a651f8f102a4ba9b7349395"
url: "https://pub.dev"
source: hosted
version: "0.6.2"
version: "0.7.0"
flutter_styled_toast:
dependency: "direct main"
description:
@ -503,14 +536,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.1"
google_identity_services_web:
dependency: transitive
description:
name: google_identity_services_web
sha256: "554748f2478619076128152c58905620d10f9c7fc270ff1d3a9675f9f53838ed"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
google_sign_in:
dependency: "direct main"
description:
name: google_sign_in
sha256: "821f354c053d51a2d417b02d42532a19a6ea8057d2f9ebb8863c07d81c98aaf9"
sha256: f45038d27bcad37498f282295ae97eece23c9349fc16649154067b87b9f1fd03
url: "https://pub.dev"
source: hosted
version: "5.4.4"
version: "6.1.5"
google_sign_in_android:
dependency: transitive
description:
@ -531,18 +572,18 @@ packages:
dependency: transitive
description:
name: google_sign_in_platform_interface
sha256: fece762f0d2dd762ebde43ad70662a209ff6ee034111976549c392f7763d9264
sha256: "35ceee5f0eadc1c07b0b4af7553246e315c901facbb7d3dadf734ba2693ceec4"
url: "https://pub.dev"
source: hosted
version: "2.3.1"
version: "2.4.2"
google_sign_in_web:
dependency: transitive
description:
name: google_sign_in_web
sha256: "75cc41ebc53b1756320ee14d9c3018ad3e6cea298147dbcd86e9d0c8d6720b40"
sha256: "939e9172a378ec4eaeb7f71eeddac9b55ebd0e8546d336daec476a68e5279766"
url: "https://pub.dev"
source: hosted
version: "0.10.2+1"
version: "0.12.0+5"
graphs:
dependency: transitive
description:
@ -603,66 +644,90 @@ packages:
dependency: "direct main"
description:
name: image_cropper
sha256: "85324928ee8a8be35a529446435ca53067865b9353c8681983472eeec66d780f"
sha256: "542c3453109d16bcc388e43ae2276044d2cd6a6d20c68bdcff2c94ab9363ea15"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "4.0.1"
image_cropper_for_web:
dependency: transitive
description:
name: image_cropper_for_web
sha256: "09e93a8ec0435adcaa23622ac090442872f18145d70b9ff605ffedcf97d56255"
sha256: "89c936aa772a35b69ca67b78049ae9fa163a4fb8da2f6dee3893db8883fb49d2"
url: "https://pub.dev"
source: hosted
version: "1.0.3"
version: "2.0.0"
image_cropper_platform_interface:
dependency: transitive
description:
name: image_cropper_platform_interface
sha256: "62349e3aab63873ea9b9ab9f69d036ab8a0d74b3004beec4303981386cb9273f"
sha256: b232175c132b2f7ede3e1f101652bcd635cb4079a77c6dded8e6d32e6578d685
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "4.0.0"
image_picker:
dependency: "direct main"
description:
name: image_picker
sha256: "22207768556b82d55ec70166824350fee32298732d5efa4d6e756f848f51f66a"
sha256: "7d7f2768df2a8b0a3cefa5ef4f84636121987d403130e70b17ef7e2cf650ba84"
url: "https://pub.dev"
source: hosted
version: "0.8.6+3"
version: "1.0.4"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "68d067baf7f6e401b1124ee83dd6967e67847314250fd68012aab34a69beb344"
sha256: "0c7b83bbe2980c8a8e36e974f055e11e51675784e13a4762889feed0f3937ff2"
url: "https://pub.dev"
source: hosted
version: "0.8.5+7"
version: "0.8.8+1"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
sha256: "66fc6e3877bbde82c33d122f3588777c3784ac5bd7d1cdd79213ef7aecb85b34"
sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7"
url: "https://pub.dev"
source: hosted
version: "2.1.11"
version: "3.0.1"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
sha256: "39aa70b5f1e5e7c94585b9738632d5fdb764a5655e40cd9e7b95fbd2fc50c519"
sha256: c5538cacefacac733c724be7484377923b476216ad1ead35a0d2eadcdc0fc497
url: "https://pub.dev"
source: hosted
version: "0.8.6+9"
version: "0.8.8+2"
image_picker_linux:
dependency: transitive
description:
name: image_picker_linux
sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
image_picker_macos:
dependency: transitive
description:
name: image_picker_macos
sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8"
sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514
url: "https://pub.dev"
source: hosted
version: "2.6.3"
version: "2.9.1"
image_picker_windows:
dependency: transitive
description:
name: image_picker_windows
sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb"
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
import_sorter:
dependency: "direct dev"
description:
@ -827,26 +892,26 @@ packages:
dependency: transitive
description:
name: matcher
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev"
source: hosted
version: "0.12.13"
version: "0.12.16"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
version: "0.5.0"
material_design_icons_flutter:
dependency: "direct main"
description:
name: material_design_icons_flutter
sha256: "8ef8562d16e747b2d93e5da5c2508931588939c5c00ebc8e2768e803db7dfd3c"
sha256: "6f986b7a51f3ad4c00e33c5c84e8de1bdd140489bbcdc8b66fc1283dad4dea5a"
url: "https://pub.dev"
source: hosted
version: "6.0.7096"
version: "7.0.7296"
memoize:
dependency: "direct main"
description:
@ -859,10 +924,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
url: "https://pub.dev"
source: hosted
version: "1.8.0"
version: "1.9.1"
mime:
dependency: transitive
description:
@ -888,13 +953,13 @@ packages:
source: hosted
version: "3.8.2"
navigation_builder:
dependency: transitive
dependency: "direct overridden"
description:
name: navigation_builder
sha256: cbf966253e1f5b1798f3fbcae571fb6d452e5c7a606a5c451e2b9a3d343920f0
sha256: "95e25150191d9cd4e4b86504f33cd9e786d1e6732edb2e3e635bbedc5ef0dea7"
url: "https://pub.dev"
source: hosted
version: "0.0.2+4"
version: "0.0.3"
node_preamble:
dependency: transitive
description:
@ -963,10 +1028,10 @@ packages:
dependency: transitive
description:
name: path
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev"
source: hosted
version: "1.8.2"
version: "1.8.3"
path_parsing:
dependency: transitive
description:
@ -979,10 +1044,10 @@ packages:
dependency: "direct main"
description:
name: path_provider
sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9"
sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2"
url: "https://pub.dev"
source: hosted
version: "2.0.13"
version: "2.0.15"
path_provider_android:
dependency: transitive
description:
@ -1019,58 +1084,58 @@ packages:
dependency: transitive
description:
name: path_provider_windows
sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d"
sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.1.7"
pdf:
dependency: transitive
description:
name: pdf
sha256: "6cd57e8e6d052bd1078f18e0dc7cd6701fad6288231c1ce99d66ef5034d14e61"
sha256: "586d3debf5432e5377044754032cfa53ab45e9abf371d4865e9ad5019570e246"
url: "https://pub.dev"
source: hosted
version: "3.9.0"
pedantic:
dependency: transitive
description:
name: pedantic
sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602"
url: "https://pub.dev"
source: hosted
version: "1.11.1"
version: "3.10.1"
permission_handler:
dependency: "direct main"
description:
name: permission_handler
sha256: e474a8b0de5a3ce6f0960599c0b24ab3441a200a8705f4131e7bb926027100db
sha256: "284a66179cabdf942f838543e10413246f06424d960c92ba95c84439154fcac8"
url: "https://pub.dev"
source: hosted
version: "9.1.0"
version: "11.0.1"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
sha256: a512e0fa8abcb0659d938ec2df93a70eb1df1fdea5fdc6d79a866bfd858a28fc
sha256: ace7d15a3d1a4a0b91c041d01e5405df221edb9de9116525efc773c74e6fc790
url: "https://pub.dev"
source: hosted
version: "9.0.2+1"
version: "11.0.5"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
sha256: "9c370ef6a18b1c4b2f7f35944d644a56aa23576f23abee654cf73968de93f163"
sha256: "99e220bce3f8877c78e4ace901082fb29fa1b4ebde529ad0932d8d664b34f3f5"
url: "https://pub.dev"
source: hosted
version: "9.0.7"
version: "9.1.4"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84"
sha256: f2343e9fa9c22ae4fd92d4732755bfe452214e7189afcc097380950cf567b4b2
url: "https://pub.dev"
source: hosted
version: "3.9.0"
version: "3.11.5"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098
url: "https://pub.dev"
source: hosted
version: "0.1.3"
petitparser:
dependency: transitive
description:
@ -1091,10 +1156,10 @@ packages:
dependency: "direct main"
description:
name: pinput
sha256: "1773743c188cdd2f8d0398ea708ec72645bb41ac9311755c4f7bb03a4184bdcf"
sha256: a92b55ecf9c25d1b9e100af45905385d5bc34fc9b6b04177a9e82cb88fe4d805
url: "https://pub.dev"
source: hosted
version: "2.2.31"
version: "3.0.1"
platform:
dependency: transitive
description:
@ -1131,10 +1196,10 @@ packages:
dependency: "direct main"
description:
name: printing
sha256: fe654363cd0114b50a0815b24e96957c7e9a60eb4e3b7ccfe71cf3f2b7114cb2
sha256: e7c383dca95ee7b88c02dc1c66638628d3dcdc2fb2cc47e7a595facd47e46b56
url: "https://pub.dev"
source: hosted
version: "5.10.1"
version: "5.11.0"
process:
dependency: transitive
description:
@ -1228,34 +1293,34 @@ packages:
dependency: transitive
description:
name: sentry
sha256: "81c1f32496ff04476d6ddfe5894215b1034d185301d2e3dffd272853392c5ea7"
sha256: "830667eadc0398fea3a3424ed1b74568e2db603a42758d0922e2f2974ce55a60"
url: "https://pub.dev"
source: hosted
version: "6.20.1"
version: "7.10.1"
sentry_flutter:
dependency: "direct main"
description:
name: sentry_flutter
sha256: "5ca2c8d86c220f7ad3109bedceb2c51b0e90bac5218e732be98ea2cba8006461"
sha256: "6730f41b304c6fb0fa590dacccaf73ba11082fc64b274cfe8a79776f2b95309c"
url: "https://pub.dev"
source: hosted
version: "6.20.1"
version: "7.10.1"
share_plus:
dependency: "direct main"
description:
name: share_plus
sha256: "8c6892037b1824e2d7e8f59d54b3105932899008642e6372e5079c6939b4b625"
sha256: "6cec740fa0943a826951223e76218df002804adb588235a8910dc3d6b0654e11"
url: "https://pub.dev"
source: hosted
version: "6.3.1"
version: "7.1.0"
share_plus_platform_interface:
dependency: transitive
description:
name: share_plus_platform_interface
sha256: "82ddd4ab9260c295e6e39612d4ff00390b9a7a21f1bb1da771e2f232d80ab8a1"
sha256: "357412af4178d8e11d14f41723f80f12caea54cf0d5cd29af9dcdab85d58aea7"
url: "https://pub.dev"
source: hosted
version: "3.2.0"
version: "3.3.0"
shared_preferences:
dependency: "direct main"
description:
@ -1348,10 +1413,10 @@ packages:
dependency: "direct main"
description:
name: sign_in_with_apple
sha256: ac3b113767dfdd765078c507dad9d4d9fe96b669cc7bd88fc36fc15376fb3400
sha256: "0975c23b9f8b30a80e27d5659a75993a093d4cb5f4eb7d23a9ccc586fea634e0"
url: "https://pub.dev"
source: hosted
version: "4.3.0"
version: "5.0.0"
sign_in_with_apple_platform_interface:
dependency: transitive
description:
@ -1377,10 +1442,10 @@ packages:
dependency: transitive
description:
name: smart_auth
sha256: "8cfaec55b77d5930ed1666bb7ae70db5bade099bb1422401386853b400962113"
sha256: a25229b38c02f733d0a4e98d941b42bed91a976cb589e934895e60ccfa674cf6
url: "https://pub.dev"
source: hosted
version: "1.0.8"
version: "1.1.1"
source_gen:
dependency: transitive
description:
@ -1409,10 +1474,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.10.0"
sqflite:
dependency: transitive
description:
@ -1441,10 +1506,10 @@ packages:
dependency: "direct main"
description:
name: states_rebuilder
sha256: e8612993e97a5caeb9d983f6081304ef10868ba436ae49a723ee089ab51e2d12
sha256: bf1a5ab5c543acdefce35e60f482eb7ab592339484fe3266d147ee597f18dc92
url: "https://pub.dev"
source: hosted
version: "6.2.0"
version: "6.3.0"
stream_channel:
dependency: transitive
description:
@ -1521,26 +1586,26 @@ packages:
dependency: "direct dev"
description:
name: test
sha256: a5fcd2d25eeadbb6589e80198a47d6a464ba3e2049da473943b8af9797900c2d
sha256: "13b41f318e2a5751c3169137103b60c584297353d4b1761b66029bae6411fe46"
url: "https://pub.dev"
source: hosted
version: "1.22.0"
version: "1.24.3"
test_api:
dependency: transitive
description:
name: test_api
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
url: "https://pub.dev"
source: hosted
version: "0.4.16"
version: "0.6.0"
test_core:
dependency: transitive
description:
name: test_core
sha256: "0ef9755ec6d746951ba0aabe62f874b707690b5ede0fecc818b138fcc9b14888"
sha256: "99806e9e6d95c7b059b7a0fc08f07fc53fabe54a829497f0d9676299f1e8637e"
url: "https://pub.dev"
source: hosted
version: "0.4.20"
version: "0.5.3"
timeago:
dependency: "direct main"
description:
@ -1609,10 +1674,10 @@ packages:
dependency: transitive
description:
name: url_launcher_linux
sha256: e29039160ab3730e42f3d811dc2a6d5f2864b90a70fb765ea60144b03307f682
sha256: b651aad005e0cb06a01dbd84b428a301916dc75f0e7ea6165f80057fee2d8e8e
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "3.0.6"
url_launcher_macos:
dependency: transitive
description:
@ -1633,18 +1698,18 @@ packages:
dependency: transitive
description:
name: url_launcher_web
sha256: "574cfbe2390666003c3a1d129bdc4574aaa6728f0c00a4829a81c316de69dd9b"
sha256: "2942294a500b4fa0b918685aff406773ba0a4cd34b7f42198742a94083020ce5"
url: "https://pub.dev"
source: hosted
version: "2.0.15"
version: "2.0.20"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "97c9067950a0d09cbd93e2e3f0383d1403989362b97102fbf446473a48079a4b"
sha256: "95fef3129dc7cfaba2bc3d5ba2e16063bb561fc6d78e63eee16162bc70029069"
url: "https://pub.dev"
source: hosted
version: "3.0.4"
version: "3.0.8"
uuid:
dependency: transitive
description:
@ -1681,10 +1746,18 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7
sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f
url: "https://pub.dev"
source: hosted
version: "9.4.0"
version: "11.7.1"
vs_scrollbar:
dependency: transitive
description:
name: vs_scrollbar
sha256: "6a2df5e2597064e8dbb8fc3679065d8e748d711fa979f045328c98b7100b1665"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
watcher:
dependency: transitive
description:
@ -1693,6 +1766,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.2"
web:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
web_socket_channel:
dependency: transitive
description:
@ -1705,10 +1786,10 @@ packages:
dependency: transitive
description:
name: webdriver
sha256: ef67178f0cc7e32c1494645b11639dd1335f1d18814aa8435113a92e9ef9d841
sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
webkit_inspection_protocol:
dependency: transitive
description:
@ -1721,34 +1802,34 @@ packages:
dependency: "direct main"
description:
name: webview_flutter
sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88"
sha256: c1ab9b81090705c6069197d9fdc1625e587b52b8d70cdde2339d177ad0dbb98e
url: "https://pub.dev"
source: hosted
version: "3.0.4"
version: "4.4.1"
webview_flutter_android:
dependency: transitive
description:
name: webview_flutter_android
sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd"
sha256: b0cd33dd7d3dd8e5f664e11a19e17ba12c352647269921a3b568406b001f1dff
url: "https://pub.dev"
source: hosted
version: "2.10.4"
version: "3.12.0"
webview_flutter_platform_interface:
dependency: transitive
description:
name: webview_flutter_platform_interface
sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf"
sha256: "6d9213c65f1060116757a7c473247c60f3f7f332cac33dc417c9e362a9a13e4f"
url: "https://pub.dev"
source: hosted
version: "1.9.5"
version: "2.6.0"
webview_flutter_wkwebview:
dependency: transitive
description:
name: webview_flutter_wkwebview
sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0
sha256: "30b9af6bdd457b44c08748b9190d23208b5165357cc2eb57914fee1366c42974"
url: "https://pub.dev"
source: hosted
version: "2.9.5"
version: "3.9.1"
widget_kit_plugin:
dependency: "direct main"
description:
@ -1761,10 +1842,10 @@ packages:
dependency: transitive
description:
name: win32
sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46
sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
version: "4.1.4"
window_manager:
dependency: "direct main"
description:
@ -1798,5 +1879,5 @@ packages:
source: hosted
version: "3.1.1"
sdks:
dart: ">=2.19.0 <3.0.0"
flutter: ">=3.7.0"
dart: ">=3.1.0 <4.0.0"
flutter: ">=3.13.0"

View File

@ -6,7 +6,7 @@ documentation: https://invoiceninja.github.io
publish_to: none
environment:
sdk: '>=2.12.0 <3.0.0'
sdk: '>=3.1.0 <4.0.0'
flutter_icons:
android: true
@ -21,10 +21,10 @@ dependencies:
flutter_localizations:
sdk: flutter
#google_sign_in: ^6.0.1
google_sign_in: 5.4.4
google_sign_in: ^6.1.5
in_app_review: ^2.0.4
in_app_purchase: ^3.1.1
pinput: ^2.2.11
pinput: ^3.0.1
#pinput: ^2.2.23
#pinput:
# git:
@ -35,26 +35,26 @@ dependencies:
http: ^0.13.3
path_provider: ^2.0.2
shared_preferences: ^2.0.6
material_design_icons_flutter: ^6.0.7096
material_design_icons_flutter: ^7.0.7296
built_value: ^8.1.2
built_collection: ^5.1.0
memoize: ^3.0.0
cached_network_image: 3.0.0 # imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet,
url_launcher: ^6.0.20
share_plus: ^6.3.1
intl: ^0.17.0
flutter_slidable: ^2.0.0
share_plus: ^7.1.0
intl: 0.17.0
flutter_slidable: ^3.0.0
charts_flutter: ^0.12.0
#qr_flutter: ^4.0.0
qr_flutter: # https://github.com/theyakka/qr.flutter/issues/174#issuecomment-1084235757
git:
url: https://github.com/theyakka/qr.flutter.git
local_auth: ^2.1.5
sentry_flutter: ^6.20.1
image_picker: ^0.8.6+3
sentry_flutter: ^7.10.1
image_picker: ^1.0.4
flutter_colorpicker: ^1.0.3
flutter_json_viewer: ^1.0.1
webview_flutter: ^3.0.4
webview_flutter: ^4.4.1
timeago: ^3.1.0
package_info: ^2.0.2
rounded_loading_button: ^2.1.0
@ -62,9 +62,12 @@ dependencies:
# flutter_launcher_icons: ^0.9.1
overflow_view: ^0.3.1
flutter_styled_toast: ^2.0.0
permission_handler: 9.1.0 # Disables Windows support to fix crash
permission_handler: ^11.0.1 # Disables Windows support to fix crash
file_picker: ^5.2.5
boardview: ^0.2.2
#boardview: ^0.2.2
boardview:
git:
url: https://github.com/BenPoell/FlutterBoardView.git
pointer_interceptor: ^0.9.0
contacts_service: ^0.6.3
diacritic: ^0.1.3
@ -77,14 +80,14 @@ dependencies:
# url: https://github.com/superlistapp/super_editor.git
# path: super_editor
html2md: ^1.2.6
printing: ^5.10.1
image_cropper: ^3.0.1
printing: ^5.11.0
image_cropper: ^4.0.1
msal_js: ^2.14.0
sign_in_with_apple: ^4.3.0
sign_in_with_apple: ^5.0.0
window_manager: ^0.3.0
# bitsdojo_window: ^0.1.5
intl_phone_field: ^3.1.0
flutter_staggered_grid_view: ^0.6.2
flutter_staggered_grid_view: ^0.7.0
desktop_drop: ^0.4.1
widget_kit_plugin: ^0.1.1
pinch_zoom: ^1.0.0
@ -92,6 +95,11 @@ dependencies:
# idb_shim: ^1.11.1+1
collection: ^1.15.0-nullsafety.4
dependency_overrides:
intl: any
navigation_builder: ^0.0.3
states_rebuilder: ^6.3.0
dev_dependencies:
flutter_driver:
sdk: flutter
@ -128,4 +136,4 @@ msix_config:
architecture: x64
capabilities: 'internetClient'
store: true
logo_path: assets/images/icon.png
logo_path: assets/images/icon.png

View File

@ -1,8 +1,5 @@
// Import Flutter Driver API
// Dart imports:
import 'dart:async';
// Package imports:
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';
@ -15,7 +12,7 @@ void main() {
group('LOGIN TEST', () {
late TestLocalization localization;
FlutterDriver? driver;
StreamSubscription? streamSubscription;
//StreamSubscription? streamSubscription;
setUpAll(() async {
localization = TestLocalization('en');
@ -35,9 +32,12 @@ void main() {
if (driver != null) {
driver!.close();
}
/*
if (streamSubscription != null) {
streamSubscription.cancel();
}
*/
});
group('SELF-HOSTED', () {

View File

@ -8,10 +8,9 @@ set(BINARY_NAME "invoiceninja")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake.
cmake_policy(SET CMP0063 NEW)
set(PDFIUM_VERSION "latest" CACHE STRING "" FORCE)
set(PDFIUM_ARCH "x64" CACHE STRING "" FORCE)
cmake_policy(VERSION 3.14...3.25)
# Define build configuration option.
get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
@ -55,6 +54,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR})
# Application build; see runner/CMakeLists.txt.
add_subdirectory("runner")
# Generated plugin build rules, which manage building the plugins and adding
# them to the application.
include(flutter/generated_plugins.cmake)

View File

@ -7,7 +7,9 @@
#include "generated_plugin_registrant.h"
#include <desktop_drop/desktop_drop_plugin.h>
#include <file_selector_windows/file_selector_windows.h>
#include <local_auth_windows/local_auth_plugin.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
#include <printing/printing_plugin.h>
#include <screen_retriever/screen_retriever_plugin.h>
#include <sentry_flutter/sentry_flutter_plugin.h>
@ -19,8 +21,12 @@
void RegisterPlugins(flutter::PluginRegistry* registry) {
DesktopDropPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("DesktopDropPlugin"));
FileSelectorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FileSelectorWindows"));
LocalAuthPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("LocalAuthPlugin"));
PermissionHandlerWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
PrintingPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PrintingPlugin"));
ScreenRetrieverPluginRegisterWithRegistrar(

View File

@ -4,7 +4,9 @@
list(APPEND FLUTTER_PLUGIN_LIST
desktop_drop
file_selector_windows
local_auth_windows
permission_handler_windows
printing
screen_retriever
sentry_flutter

View File

@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() {
this->Show();
});
// Flutter can complete the first frame before the "show window" callback is
// registered. The following call ensures a frame is pending to ensure the
// window is shown. It is a no-op if the first frame hasn't completed yet.
flutter_controller_->ForceRedraw();
return true;
}

View File

@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) {
}
int target_length = ::WideCharToMultiByte(
CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
-1, nullptr, 0, nullptr, nullptr);
-1, nullptr, 0, nullptr, nullptr)
-1; // remove the trailing null character
int input_length = (int)wcslen(utf16_string);
std::string utf8_string;
if (target_length == 0 || target_length > utf8_string.max_size()) {
if (target_length <= 0 || target_length > utf8_string.max_size()) {
return utf8_string;
}
utf8_string.resize(target_length);
int converted_length = ::WideCharToMultiByte(
CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
-1, utf8_string.data(),
target_length, nullptr, nullptr);
input_length, utf8_string.data(), target_length, nullptr, nullptr);
if (converted_length == 0) {
return std::string();
}

View File

@ -60,7 +60,7 @@ class WindowClassRegistrar {
public:
~WindowClassRegistrar() = default;
// Returns the singleton registar instance.
// Returns the singleton registrar instance.
static WindowClassRegistrar* GetInstance() {
if (!instance_) {
instance_ = new WindowClassRegistrar();

View File

@ -77,7 +77,7 @@ class Win32Window {
// OS callback called by message pump. Handles the WM_NCCREATE message which
// is passed when the non-client area is being created and enables automatic
// non-client DPI scaling so that the non-client area automatically
// responsponds to changes in DPI. All other messages are handled by
// responds to changes in DPI. All other messages are handled by
// MessageHandler.
static LRESULT CALLBACK WndProc(HWND const window,
UINT const message,