fn() for use inside formulas.

Compiling in:
Flutter 3.38.9 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 67323de285 (4 weeks ago) • 2026-01-28 13:43:12 -0800
Engine • hash 5eb06b7ad5bb8cbc22c5230264c7a00ceac7674b (revision 587c18f873) (29 days ago) • 2026-01-27 23:23:03.000Z
Tools • Dart 3.10.8 • DevTools 2.51.1
This commit is contained in:
Álvaro González 2026-02-26 20:03:19 +01:00
parent a50474ef9b
commit 7461a2addf
14 changed files with 275 additions and 214 deletions

View file

@ -32,4 +32,5 @@
- [X] Add a Share button to the formula list. It will export the array string literal of the formula with the units from Corpus.withDependencies().
- [X] Replace flutter-markdown with flutter-markdown-plus
- [X] Heron's formula: investigate why a=3, b=40, c=5 yields NaN. Root cause: input values don't form a valid triangle (violate triangle inequality: 3+5=8 is not > 40). Added documentation note to the formula description.
- [ ] Investigate starup time when there is no previous database and corpus is loaded from assets.
- [ ]
- [ ] Investigate startup time when there is no previous database and corpus is loaded from assets.

View file

@ -1,4 +1,4 @@
FROM ghcr.io/cirruslabs/flutter:3.32.3
FROM ghcr.io/cirruslabs/flutter:3.38.9
# Install cmake, ninja, clang, pkg-config, and other tools for flutter linux
RUN apt-get update && apt-get install -y \
@ -32,14 +32,14 @@ RUN chown -R $USER_ID:$GROUP_ID /sdks/flutter
USER $USER_ID:$GROUP_ID
# Pre-cache Flutter artifacts for Linux, Android, and Web to speed up subsequent builds
WORKDIR /dummy_app_only_for_cache
RUN flutter create . && flutter pub get
RUN flutter precache --linux
RUN flutter build linux
RUN flutter precache --web
RUN flutter build web
RUN flutter precache --android
RUN flutter build apk
#WORKDIR /dummy_app_only_for_cache
#RUN flutter create . && flutter pub get
#RUN flutter precache --linux
#RUN flutter build linux
#RUN flutter precache --web
#RUN flutter build web
#RUN flutter precache --android
#RUN flutter build apk
WORKDIR /app

View file

@ -165,7 +165,7 @@ class Corpus{
static Number _evaluate(String code, [D4rt? interpreter]) {
final d4rtInterpreter = interpreter ?? FormulaEvaluator.createDefaultInterpreter();
FormulaEvaluator.prepareInterpreter(d4rtInterpreter);
final completeCode = "${FormulaEvaluator.d4rtImports}\n$code";
final completeCode = "${FormulaEvaluator.preamble}\n$code";
final result = d4rtInterpreter.execute(source: completeCode);
return result.toDouble();
}

19
lib/d4rt_bridge.dart Normal file
View file

@ -0,0 +1,19 @@
import 'package:d4rt/d4rt.dart';
import 'package:get_it/get_it.dart';
import 'corpus.dart';
import 'formula_evaluator.dart';
part 'd4rt_bridge.g.dart';
@D4rtBridge(libraryUri: 'package:formulas/runtime_bridge.dart')
class D4rtBridgeImpl {
static dynamic fn(String formulaName, Map<String, dynamic> inputValues) {
var corpus = GetIt.instance.get<Corpus>();
var evaluator = FormulaEvaluator();
var formula = corpus.getFormula(formulaName);
if (formula == null) {
throw ArgumentError("Formula not found in corpus: $formulaName");
}
return evaluator.evaluate(formula, inputValues);
}
}

View file

@ -12,18 +12,27 @@ class $FormulaElementsTable extends FormulaElements
static const VerificationMeta _idMeta = const VerificationMeta('id');
@override
late final GeneratedColumn<int> id = GeneratedColumn<int>(
'id', aliasedName, false,
'id',
aliasedName,
false,
hasAutoIncrement: true,
type: DriftSqlType.int,
requiredDuringInsert: false,
defaultConstraints:
GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT'));
static const VerificationMeta _elementTextMeta =
const VerificationMeta('elementText');
defaultConstraints: GeneratedColumn.constraintIsAlways(
'PRIMARY KEY AUTOINCREMENT',
),
);
static const VerificationMeta _elementTextMeta = const VerificationMeta(
'elementText',
);
@override
late final GeneratedColumn<String> elementText = GeneratedColumn<String>(
'element_text', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
'element_text',
aliasedName,
false,
type: DriftSqlType.string,
requiredDuringInsert: true,
);
@override
List<GeneratedColumn> get $columns => [id, elementText];
@override
@ -32,8 +41,10 @@ class $FormulaElementsTable extends FormulaElements
String get actualTableName => $name;
static const String $name = 'formula_elements';
@override
VerificationContext validateIntegrity(Insertable<FormulaElement> instance,
{bool isInserting = false}) {
VerificationContext validateIntegrity(
Insertable<FormulaElement> instance, {
bool isInserting = false,
}) {
final context = VerificationContext();
final data = instance.toColumns(true);
if (data.containsKey('id')) {
@ -43,7 +54,10 @@ class $FormulaElementsTable extends FormulaElements
context.handle(
_elementTextMeta,
elementText.isAcceptableOrUnknown(
data['element_text']!, _elementTextMeta));
data['element_text']!,
_elementTextMeta,
),
);
} else if (isInserting) {
context.missing(_elementTextMeta);
}
@ -56,10 +70,14 @@ class $FormulaElementsTable extends FormulaElements
FormulaElement map(Map<String, dynamic> data, {String? tablePrefix}) {
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
return FormulaElement(
id: attachedDatabase.typeMapping
.read(DriftSqlType.int, data['${effectivePrefix}id'])!,
elementText: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}element_text'])!,
id: attachedDatabase.typeMapping.read(
DriftSqlType.int,
data['${effectivePrefix}id'],
)!,
elementText: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}element_text'],
)!,
);
}
@ -88,8 +106,10 @@ class FormulaElement extends DataClass implements Insertable<FormulaElement> {
);
}
factory FormulaElement.fromJson(Map<String, dynamic> json,
{ValueSerializer? serializer}) {
factory FormulaElement.fromJson(
Map<String, dynamic> json, {
ValueSerializer? serializer,
}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return FormulaElement(
id: serializer.fromJson<int>(json['id']),
@ -112,8 +132,9 @@ class FormulaElement extends DataClass implements Insertable<FormulaElement> {
FormulaElement copyWithCompanion(FormulaElementsCompanion data) {
return FormulaElement(
id: data.id.present ? data.id.value : this.id,
elementText:
data.elementText.present ? data.elementText.value : this.elementText,
elementText: data.elementText.present
? data.elementText.value
: this.elementText,
);
}
@ -157,8 +178,10 @@ class FormulaElementsCompanion extends UpdateCompanion<FormulaElement> {
});
}
FormulaElementsCompanion copyWith(
{Value<int>? id, Value<String>? elementText}) {
FormulaElementsCompanion copyWith({
Value<int>? id,
Value<String>? elementText,
}) {
return FormulaElementsCompanion(
id: id ?? this.id,
elementText: elementText ?? this.elementText,
@ -190,8 +213,9 @@ class FormulaElementsCompanion extends UpdateCompanion<FormulaElement> {
abstract class _$FormulasDatabase extends GeneratedDatabase {
_$FormulasDatabase(QueryExecutor e) : super(e);
$FormulasDatabaseManager get managers => $FormulasDatabaseManager(this);
late final $FormulaElementsTable formulaElements =
$FormulaElementsTable(this);
late final $FormulaElementsTable formulaElements = $FormulaElementsTable(
this,
);
@override
Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@ -199,13 +223,13 @@ abstract class _$FormulasDatabase extends GeneratedDatabase {
List<DatabaseSchemaEntity> get allSchemaEntities => [formulaElements];
}
typedef $$FormulaElementsTableCreateCompanionBuilder = FormulaElementsCompanion
Function({
typedef $$FormulaElementsTableCreateCompanionBuilder =
FormulaElementsCompanion Function({
Value<int> id,
required String elementText,
});
typedef $$FormulaElementsTableUpdateCompanionBuilder = FormulaElementsCompanion
Function({
typedef $$FormulaElementsTableUpdateCompanionBuilder =
FormulaElementsCompanion Function({
Value<int> id,
Value<String> elementText,
});
@ -220,10 +244,14 @@ class $$FormulaElementsTableFilterComposer
super.$removeJoinBuilderFromRootComposer,
});
ColumnFilters<int> get id => $composableBuilder(
column: $table.id, builder: (column) => ColumnFilters(column));
column: $table.id,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get elementText => $composableBuilder(
column: $table.elementText, builder: (column) => ColumnFilters(column));
column: $table.elementText,
builder: (column) => ColumnFilters(column),
);
}
class $$FormulaElementsTableOrderingComposer
@ -236,10 +264,14 @@ class $$FormulaElementsTableOrderingComposer
super.$removeJoinBuilderFromRootComposer,
});
ColumnOrderings<int> get id => $composableBuilder(
column: $table.id, builder: (column) => ColumnOrderings(column));
column: $table.id,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get elementText => $composableBuilder(
column: $table.elementText, builder: (column) => ColumnOrderings(column));
column: $table.elementText,
builder: (column) => ColumnOrderings(column),
);
}
class $$FormulaElementsTableAnnotationComposer
@ -255,10 +287,14 @@ class $$FormulaElementsTableAnnotationComposer
$composableBuilder(column: $table.id, builder: (column) => column);
GeneratedColumn<String> get elementText => $composableBuilder(
column: $table.elementText, builder: (column) => column);
column: $table.elementText,
builder: (column) => column,
);
}
class $$FormulaElementsTableTableManager extends RootTableManager<
class $$FormulaElementsTableTableManager
extends
RootTableManager<
_$FormulasDatabase,
$FormulaElementsTable,
FormulaElement,
@ -269,13 +305,20 @@ class $$FormulaElementsTableTableManager extends RootTableManager<
$$FormulaElementsTableUpdateCompanionBuilder,
(
FormulaElement,
BaseReferences<_$FormulasDatabase, $FormulaElementsTable, FormulaElement>
BaseReferences<
_$FormulasDatabase,
$FormulaElementsTable,
FormulaElement
>,
),
FormulaElement,
PrefetchHooks Function()> {
PrefetchHooks Function()
> {
$$FormulaElementsTableTableManager(
_$FormulasDatabase db, $FormulaElementsTable table)
: super(TableManagerState(
_$FormulasDatabase db,
$FormulaElementsTable table,
) : super(
TableManagerState(
db: db,
table: table,
createFilteringComposer: () =>
@ -284,19 +327,16 @@ class $$FormulaElementsTableTableManager extends RootTableManager<
$$FormulaElementsTableOrderingComposer($db: db, $table: table),
createComputedFieldComposer: () =>
$$FormulaElementsTableAnnotationComposer($db: db, $table: table),
updateCompanionCallback: ({
updateCompanionCallback:
({
Value<int> id = const Value.absent(),
Value<String> elementText = const Value.absent(),
}) =>
FormulaElementsCompanion(
id: id,
elementText: elementText,
),
createCompanionCallback: ({
}) => FormulaElementsCompanion(id: id, elementText: elementText),
createCompanionCallback:
({
Value<int> id = const Value.absent(),
required String elementText,
}) =>
FormulaElementsCompanion.insert(
}) => FormulaElementsCompanion.insert(
id: id,
elementText: elementText,
),
@ -304,10 +344,12 @@ class $$FormulaElementsTableTableManager extends RootTableManager<
.map((e) => (e.readTable(table), BaseReferences(db, table, e)))
.toList(),
prefetchHooksCallback: null,
));
),
);
}
typedef $$FormulaElementsTableProcessedTableManager = ProcessedTableManager<
typedef $$FormulaElementsTableProcessedTableManager =
ProcessedTableManager<
_$FormulasDatabase,
$FormulaElementsTable,
FormulaElement,
@ -318,10 +360,15 @@ typedef $$FormulaElementsTableProcessedTableManager = ProcessedTableManager<
$$FormulaElementsTableUpdateCompanionBuilder,
(
FormulaElement,
BaseReferences<_$FormulasDatabase, $FormulaElementsTable, FormulaElement>
BaseReferences<
_$FormulasDatabase,
$FormulaElementsTable,
FormulaElement
>,
),
FormulaElement,
PrefetchHooks Function()>;
PrefetchHooks Function()
>;
class $FormulasDatabaseManager {
final _$FormulasDatabase _db;

View file

@ -1,8 +1,11 @@
import 'dart:math' as Math;
import 'package:d4rt/d4rt.dart';
import 'package:get_it/get_it.dart';
import 'corpus.dart';
import 'formula_models.dart';
import 'error_handler.dart';
import 'd4rt_bridge.dart';
@ -71,13 +74,14 @@ class FormulaEvaluator {
);
interpreter.registerBridgedClass(myMathDefinition, "package:d4rt_formulas.dart");
registerD4rtBridgeBridges(interpreter);
}
static FormulaResult evaluateExpression(String code, [D4rt? interpreter]) {
final d4rtInterpreter = interpreter ?? createDefaultInterpreter();
prepareInterpreter(d4rtInterpreter);
final d4rtCode = """
$d4rtImports
$preamble
main()
{
late var result;
@ -166,15 +170,15 @@ class FormulaEvaluator {
return formula.inputVarNames()..sort();
}
static final String d4rtImports = """
import 'dart:math';
import "package:d4rt_formulas.dart";
""";
static final String signalMagicString = "###";
static final String signal = """
static final String preamble = """
import 'dart:math';
import "package:d4rt_formulas.dart";
import "package:formulas/runtime_bridge.dart";
void signal( String msg ) => throw Exception("$signalMagicString\$msg");
dynamic fn(String formulaName, Map<String, dynamic> inputValues) => D4rtBridgeImpl.fn(formulaName, inputValues);
""";
static const reservedVariableNames = { "variableValues", "indexOf", "variableAllowedValues"} ;
@ -183,8 +187,7 @@ class FormulaEvaluator {
final buffer = StringBuffer();
buffer.writeln("""
$d4rtImports
$signal
$preamble
main()
{
"""

View file

@ -1,5 +1,6 @@
import 'package:d4rt_formulas/d4rt_formulas.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'database/database_service.dart';
import 'package:drift/drift.dart' as drift;
import 'service_locator.dart';
@ -53,12 +54,15 @@ class _CorpusLoaderState extends State<CorpusLoader> {
return Center(child: Text('Error loading corpus: ${snapshot.error}'));
}
var corpus = snapshot.data!;
GetIt.instance.registerSingleton<Corpus>(corpus);
// If the corpus is empty (user chose not to load default), we could handle that here
// For now, just display the formula list
return Scaffold(
appBar: AppBar(title: const Text('Formulas')),
body: FormulaList(
corpus: snapshot.data!,
corpus: corpus,
formulas: snapshot.data!.getFormulas(),
),
);

View file

@ -6,13 +6,9 @@
#include "generated_plugin_registrant.h"
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin");
sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);

View file

@ -3,7 +3,6 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
sqlite3_flutter_libs
url_launcher_linux
)

View file

@ -5,14 +5,10 @@
import FlutterMacOS
import Foundation
import path_provider_foundation
import share_plus
import sqlite3_flutter_libs
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
}

View file

@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f
sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d
url: "https://pub.dev"
source: hosted
version: "85.0.0"
version: "91.0.0"
analyzer:
dependency: transitive
dependency: "direct main"
description:
name: analyzer
sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d"
sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08
url: "https://pub.dev"
source: hosted
version: "7.7.1"
version: "8.4.1"
args:
dependency: transitive
description:
@ -53,10 +53,10 @@ packages:
dependency: transitive
description:
name: build
sha256: ce76b1d48875e3233fde17717c23d1f60a91cc631597e49a400c89b475395b1d
sha256: "275bf6bb2a00a9852c28d4e0b410da1d833a734d57d39d44f94bfc895a484ec3"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
version: "4.0.4"
build_config:
dependency: transitive
description:
@ -73,30 +73,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.1"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
sha256: d1d57f7807debd7349b4726a19fd32ec8bc177c71ad0febf91a20f84cd2d4b46
url: "https://pub.dev"
source: hosted
version: "3.0.3"
build_runner:
dependency: "direct dev"
description:
name: build_runner
sha256: b24597fceb695969d47025c958f3837f9f0122e237c6a22cb082a5ac66c3ca30
sha256: "39ad4ca8a2876779737c60e4228b4bcd35d4352ef7e14e47514093edc012c734"
url: "https://pub.dev"
source: hosted
version: "2.7.1"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
sha256: "066dda7f73d8eb48ba630a55acb50c4a84a2e6b453b1cb4567f581729e794f7b"
url: "https://pub.dev"
source: hosted
version: "9.3.1"
version: "2.11.1"
built_collection:
dependency: transitive
description:
@ -109,10 +93,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: "7931c90b84bc573fef103548e354258ae4c9d28d140e41961df6843c5d60d4d8"
sha256: "6ae8a6435a8c6520c7077b107e77f1fb4ba7009633259a4d49a8afd8e7efc5e9"
url: "https://pub.dev"
source: hosted
version: "8.12.3"
version: "8.12.4"
characters:
dependency: transitive
description:
@ -161,6 +145,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.2"
code_assets:
dependency: transitive
description:
name: code_assets
sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
code_builder:
dependency: transitive
description:
@ -221,34 +213,34 @@ packages:
dependency: "direct main"
description:
name: d4rt
sha256: eff6a10f31e9e5b60b99146a33204c5f2d74e20ac3eeb14132d8a8ed0921c6e1
sha256: "4c178f741141592d60e4037c3205f9c081a3b32edc1061029a43667dff409a36"
url: "https://pub.dev"
source: hosted
version: "0.1.9"
version: "0.2.2"
dart_style:
dependency: transitive
description:
name: dart_style
sha256: "8a0e5fba27e8ee025d2ffb4ee820b4e6e2cf5e4246a6b1a477eb66866947e0bb"
sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b
url: "https://pub.dev"
source: hosted
version: "3.1.1"
version: "3.1.3"
drift:
dependency: "direct main"
description:
name: drift
sha256: "83290a32ae006a7535c5ecf300722cb77177250d9df4ee2becc5fa8a36095114"
sha256: "970cd188fddb111b26ea6a9b07a62bf5c2432d74147b8122c67044ae3b97e99e"
url: "https://pub.dev"
source: hosted
version: "2.29.0"
version: "2.31.0"
drift_dev:
dependency: "direct dev"
description:
name: drift_dev
sha256: "6019f827544e77524ffd5134ae0cb75dfd92ef5ef3e269872af92840c929cd43"
sha256: "917184b2fb867b70a548a83bf0d36268423b38d39968c06cce4905683da49587"
url: "https://pub.dev"
source: hosted
version: "2.29.0"
version: "2.31.0"
equatable:
dependency: transitive
description:
@ -302,14 +294,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.3.5"
flutter_d4rt:
dependency: "direct main"
description:
name: flutter_d4rt
sha256: "7ab9d3f91de5c10db115ccab1d9b1588946f744850f5bacc243cfc9041dd0a4c"
url: "https://pub.dev"
source: hosted
version: "0.0.5"
flutter_highlight:
dependency: transitive
description:
@ -380,10 +364,10 @@ packages:
dependency: "direct main"
description:
name: get_it
sha256: "1d648d2dd2047d7f7450d5727ca24ee435f240385753d90b49650e3cdff32e56"
sha256: "568d62f0e68666fb5d95519743b3c24a34c7f19d834b0658c46e26d778461f66"
url: "https://pub.dev"
source: hosted
version: "9.2.0"
version: "9.2.1"
glob:
dependency: transitive
description:
@ -416,6 +400,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.2.3"
hooks:
dependency: transitive
description:
name: hooks
sha256: "7a08a0d684cb3b8fb604b78455d5d352f502b68079f7b80b831c62220ab0a4f6"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
http:
dependency: transitive
description:
@ -460,10 +452,10 @@ packages:
dependency: transitive
description:
name: json_annotation
sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
url: "https://pub.dev"
source: hosted
version: "4.9.0"
version: "4.11.0"
leak_tracker:
dependency: transitive
description:
@ -560,6 +552,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.4"
native_toolchain_c:
dependency: transitive
description:
name: native_toolchain_c
sha256: "89e83885ba09da5fdf2cdacc8002a712ca238c28b7f717910b34bcd27b0d03ac"
url: "https://pub.dev"
source: hosted
version: "0.17.4"
nested:
dependency: transitive
description:
@ -576,6 +576,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.2"
objective_c:
dependency: transitive
description:
name: objective_c
sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52"
url: "https://pub.dev"
source: hosted
version: "9.3.0"
package_config:
dependency: transitive
description:
@ -612,18 +620,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "3b4c1fc3aa55ddc9cd4aa6759984330d5c8e66aa7702a6223c61540dc6380c37"
sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e
url: "https://pub.dev"
source: hosted
version: "2.2.19"
version: "2.2.22"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
version: "2.6.0"
path_provider_linux:
dependency: transitive
description:
@ -785,10 +793,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: "800f12fb87434defa13432ab37e33051b43b290a174e15259563b043cda40c46"
sha256: "1d562a3c1f713904ebbed50d2760217fd8a51ca170ac4b05b0db490699dbac17"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
version: "4.2.0"
source_map_stack_trace:
dependency: transitive
description:
@ -809,10 +817,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
url: "https://pub.dev"
source: hosted
version: "1.10.1"
version: "1.10.2"
sqlite3:
dependency: transitive
description:
@ -825,18 +833,18 @@ packages:
dependency: "direct main"
description:
name: sqlite3_flutter_libs
sha256: "1e800ebe7f85a80a66adacaa6febe4d5f4d8b75f244e9838a27cb2ffc7aec08d"
sha256: "3ed7553eee7bb368f8950f58ba29f634e06e813c029aff6a0d60862b96de8454"
url: "https://pub.dev"
source: hosted
version: "0.5.41"
version: "0.6.0+eol"
sqlparser:
dependency: transitive
description:
name: sqlparser
sha256: "162435ede92bcc793ea939fdc0452eef0a73d11f8ed053b58a89792fba749da5"
sha256: "337e9997f7141ffdd054259128553c348635fa318f7ca492f07a4ab76f850d19"
url: "https://pub.dev"
source: hosted
version: "0.42.1"
version: "0.43.1"
stack_trace:
dependency: transitive
description:
@ -901,14 +909,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.6.12"
timing:
dependency: transitive
description:
name: timing
sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
tuple:
dependency: transitive
description:
@ -937,18 +937,18 @@ packages:
dependency: transitive
description:
name: url_launcher_android
sha256: "81777b08c498a292d93ff2feead633174c386291e35612f8da438d6e92c4447e"
sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611"
url: "https://pub.dev"
source: hosted
version: "6.3.20"
version: "6.3.28"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7
sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
url: "https://pub.dev"
source: hosted
version: "6.3.4"
version: "6.4.1"
url_launcher_linux:
dependency: transitive
description:
@ -961,10 +961,10 @@ packages:
dependency: transitive
description:
name: url_launcher_macos
sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f
sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18"
url: "https://pub.dev"
source: hosted
version: "3.2.3"
version: "3.2.5"
url_launcher_platform_interface:
dependency: transitive
description:
@ -977,10 +977,10 @@ packages:
dependency: transitive
description:
name: url_launcher_web
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "2.4.2"
url_launcher_windows:
dependency: transitive
description:
@ -993,10 +993,10 @@ packages:
dependency: transitive
description:
name: uuid
sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8
sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489"
url: "https://pub.dev"
source: hosted
version: "4.5.2"
version: "4.5.3"
vector_graphics:
dependency: transitive
description:
@ -1017,10 +1017,10 @@ packages:
dependency: transitive
description:
name: vector_graphics_compiler
sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc
sha256: "5a88dd14c0954a5398af544651c7fb51b457a2a556949bfb25369b210ef73a74"
url: "https://pub.dev"
source: hosted
version: "1.1.19"
version: "1.2.0"
vector_math:
dependency: transitive
description:
@ -1033,10 +1033,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
url: "https://pub.dev"
source: hosted
version: "15.0.0"
version: "15.0.2"
watcher:
dependency: transitive
description:
@ -1110,5 +1110,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
dart: ">=3.8.1 <4.0.0"
flutter: ">=3.32.0"
dart: ">=3.10.3 <4.0.0"
flutter: ">=3.38.4"

View file

@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
sdk: ^3.0.0
sdk: ^3.10.0
# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
@ -35,8 +35,8 @@ dependencies:
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons:
resource_portable:
d4rt:
flutter_d4rt:
d4rt: ^0.2.0
analyzer: ^8.4.1
flutter_markdown_plus:
flutter_markdown_plus_latex:
flutter_code_editor:

View file

@ -7,14 +7,11 @@
#include "generated_plugin_registrant.h"
#include <share_plus/share_plus_windows_plugin_c_api.h>
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) {
SharePlusWindowsPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
Sqlite3FlutterLibsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
}

View file

@ -4,7 +4,6 @@
list(APPEND FLUTTER_PLUGIN_LIST
share_plus
sqlite3_flutter_libs
url_launcher_windows
)