feat: working connection, conn setting, and gear ratio setting for universal shifters

This commit is contained in:
2026-02-22 23:05:12 +01:00
parent f92d6d04f5
commit dcb1e6596e
93 changed files with 10538 additions and 668 deletions

143
lib/database/database.dart Normal file
View File

@ -0,0 +1,143 @@
import 'package:anyhow/anyhow.dart';
import 'package:drift/drift.dart';
import 'package:drift_flutter/drift_flutter.dart';
import 'package:path_provider/path_provider.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'database.g.dart';
@riverpod
class NConnectedDevices extends _$NConnectedDevices {
@override
Future<List<ConnectedDevice>> build() async {
final db = await ref.watch(databaseProvider);
return await db.getAllConnectedDevices();
}
Future<Result<int>> addConnectedDevice(
ConnectedDevicesCompanion device) async {
final db = await ref.watch(databaseProvider);
final res = await db.addConnectedDevice(device);
if (res.isOk()) {
ref.invalidateSelf();
}
return res;
}
Future<Result<void>> deleteConnectedDevice(int id) async {
final db = await ref.watch(databaseProvider);
final res = await db.deleteConnectedDevice(id);
if (res.isOk()) {
ref.invalidateSelf();
}
return res;
}
}
/// Provider for the [AppDatabase] instance
final databaseProvider = Provider<AppDatabase>((ref) {
final database = AppDatabase();
ref.onDispose(() => database.close());
return database;
});
/// Provider for all connected devices as a stream
final connectedDevicesStreamProvider =
StreamProvider<List<ConnectedDevice>>((ref) {
final database = ref.watch(databaseProvider);
return database.getAllConnectedDevicesStream();
});
/// Provider for all connected devices as a future
final connectedDevicesProvider = FutureProvider<List<ConnectedDevice>>((ref) {
final database = ref.watch(databaseProvider);
return database.getAllConnectedDevices();
});
class ConnectedDevices extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get deviceName => text()();
TextColumn get deviceAddress => text()();
TextColumn get deviceType => text()();
DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)();
DateTimeColumn get lastConnectedAt => dateTime().nullable()();
}
@DriftDatabase(tables: [ConnectedDevices])
class AppDatabase extends _$AppDatabase {
// After generating code, this class needs to define a `schemaVersion` getter
// and a constructor telling drift where the database should be stored.
// These are described in the getting started guide: https://drift.simonbinder.eu/setup/
AppDatabase([QueryExecutor? executor]) : super(executor ?? _openConnection());
@override
int get schemaVersion => 1;
static QueryExecutor _openConnection() {
return driftDatabase(
name: 'my_database',
native: const DriftNativeOptions(
// By default, `driftDatabase` from `package:drift_flutter` stores the
// database files in `getApplicationDocumentsDirectory()`.
databaseDirectory: getApplicationSupportDirectory,
),
// If you need web support, see https://drift.simonbinder.eu/platforms/web/
);
}
Future<List<ConnectedDevice>> getAllConnectedDevices() {
return select(connectedDevices).get();
}
/// Adds a new connected device to the database.
///
/// [device] is a [ConnectedDevicesCompanion] representing the device to be inserted.
///
/// Returns a [Result] indicating success or failure of the device insertion.
/// On successful insertion, returns [Ok]\(rowid\). On failure, returns an error with a descriptive message.
Future<Result<int>> addConnectedDevice(
ConnectedDevicesCompanion device) async {
try {
if (!device.deviceAddress.present) {
return bail('Device address is required to save a connected device.');
}
final exists = await (select(connectedDevices)
..where(
(tbl) => tbl.deviceAddress.equals(device.deviceAddress.value)))
.getSingleOrNull();
if (exists != null) {
return bail('Device ${device.deviceAddress.value} is already added.');
}
final rowid = await into(connectedDevices).insert(device);
return Ok(rowid);
} catch (e, st) {
return bail('Failed to add device: $e', st);
}
}
/// Deletes a connected device from the database by its ID.
///
/// [id] is the ID of the device to be deleted.
///
/// Returns a [Result] indicating success or failure of the deletion.
/// On successful deletion, returns [Ok](number of deleted rows). On failure, returns an error with a descriptive message.
Future<Result<void>> deleteConnectedDevice(int id) async {
try {
final count = await (delete(connectedDevices)
..where((tbl) => tbl.id.equals(id)))
.go();
if (count == 0) {
return bail('Device with id $id not found.');
}
return Ok(());
} catch (e, st) {
return bail('Failed to delete device with id $id: $e', st);
}
}
Stream<List<ConnectedDevice>> getAllConnectedDevicesStream() {
return select(connectedDevices).watch();
}
}

View File

@ -0,0 +1,586 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'database.dart';
// ignore_for_file: type=lint
class $ConnectedDevicesTable extends ConnectedDevices
with TableInfo<$ConnectedDevicesTable, ConnectedDevice> {
@override
final GeneratedDatabase attachedDatabase;
final String? _alias;
$ConnectedDevicesTable(this.attachedDatabase, [this._alias]);
static const VerificationMeta _idMeta = const VerificationMeta('id');
@override
late final GeneratedColumn<int> id = GeneratedColumn<int>(
'id', aliasedName, false,
hasAutoIncrement: true,
type: DriftSqlType.int,
requiredDuringInsert: false,
defaultConstraints:
GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT'));
static const VerificationMeta _deviceNameMeta =
const VerificationMeta('deviceName');
@override
late final GeneratedColumn<String> deviceName = GeneratedColumn<String>(
'device_name', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
static const VerificationMeta _deviceAddressMeta =
const VerificationMeta('deviceAddress');
@override
late final GeneratedColumn<String> deviceAddress = GeneratedColumn<String>(
'device_address', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
static const VerificationMeta _deviceTypeMeta =
const VerificationMeta('deviceType');
@override
late final GeneratedColumn<String> deviceType = GeneratedColumn<String>(
'device_type', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
static const VerificationMeta _createdAtMeta =
const VerificationMeta('createdAt');
@override
late final GeneratedColumn<DateTime> createdAt = GeneratedColumn<DateTime>(
'created_at', aliasedName, false,
type: DriftSqlType.dateTime,
requiredDuringInsert: false,
defaultValue: currentDateAndTime);
static const VerificationMeta _lastConnectedAtMeta =
const VerificationMeta('lastConnectedAt');
@override
late final GeneratedColumn<DateTime> lastConnectedAt =
GeneratedColumn<DateTime>('last_connected_at', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
@override
List<GeneratedColumn> get $columns =>
[id, deviceName, deviceAddress, deviceType, createdAt, lastConnectedAt];
@override
String get aliasedName => _alias ?? actualTableName;
@override
String get actualTableName => $name;
static const String $name = 'connected_devices';
@override
VerificationContext validateIntegrity(Insertable<ConnectedDevice> instance,
{bool isInserting = false}) {
final context = VerificationContext();
final data = instance.toColumns(true);
if (data.containsKey('id')) {
context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
}
if (data.containsKey('device_name')) {
context.handle(
_deviceNameMeta,
deviceName.isAcceptableOrUnknown(
data['device_name']!, _deviceNameMeta));
} else if (isInserting) {
context.missing(_deviceNameMeta);
}
if (data.containsKey('device_address')) {
context.handle(
_deviceAddressMeta,
deviceAddress.isAcceptableOrUnknown(
data['device_address']!, _deviceAddressMeta));
} else if (isInserting) {
context.missing(_deviceAddressMeta);
}
if (data.containsKey('device_type')) {
context.handle(
_deviceTypeMeta,
deviceType.isAcceptableOrUnknown(
data['device_type']!, _deviceTypeMeta));
} else if (isInserting) {
context.missing(_deviceTypeMeta);
}
if (data.containsKey('created_at')) {
context.handle(_createdAtMeta,
createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta));
}
if (data.containsKey('last_connected_at')) {
context.handle(
_lastConnectedAtMeta,
lastConnectedAt.isAcceptableOrUnknown(
data['last_connected_at']!, _lastConnectedAtMeta));
}
return context;
}
@override
Set<GeneratedColumn> get $primaryKey => {id};
@override
ConnectedDevice map(Map<String, dynamic> data, {String? tablePrefix}) {
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
return ConnectedDevice(
id: attachedDatabase.typeMapping
.read(DriftSqlType.int, data['${effectivePrefix}id'])!,
deviceName: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}device_name'])!,
deviceAddress: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}device_address'])!,
deviceType: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}device_type'])!,
createdAt: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!,
lastConnectedAt: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime, data['${effectivePrefix}last_connected_at']),
);
}
@override
$ConnectedDevicesTable createAlias(String alias) {
return $ConnectedDevicesTable(attachedDatabase, alias);
}
}
class ConnectedDevice extends DataClass implements Insertable<ConnectedDevice> {
final int id;
final String deviceName;
final String deviceAddress;
final String deviceType;
final DateTime createdAt;
final DateTime? lastConnectedAt;
const ConnectedDevice(
{required this.id,
required this.deviceName,
required this.deviceAddress,
required this.deviceType,
required this.createdAt,
this.lastConnectedAt});
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
map['id'] = Variable<int>(id);
map['device_name'] = Variable<String>(deviceName);
map['device_address'] = Variable<String>(deviceAddress);
map['device_type'] = Variable<String>(deviceType);
map['created_at'] = Variable<DateTime>(createdAt);
if (!nullToAbsent || lastConnectedAt != null) {
map['last_connected_at'] = Variable<DateTime>(lastConnectedAt);
}
return map;
}
ConnectedDevicesCompanion toCompanion(bool nullToAbsent) {
return ConnectedDevicesCompanion(
id: Value(id),
deviceName: Value(deviceName),
deviceAddress: Value(deviceAddress),
deviceType: Value(deviceType),
createdAt: Value(createdAt),
lastConnectedAt: lastConnectedAt == null && nullToAbsent
? const Value.absent()
: Value(lastConnectedAt),
);
}
factory ConnectedDevice.fromJson(Map<String, dynamic> json,
{ValueSerializer? serializer}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return ConnectedDevice(
id: serializer.fromJson<int>(json['id']),
deviceName: serializer.fromJson<String>(json['deviceName']),
deviceAddress: serializer.fromJson<String>(json['deviceAddress']),
deviceType: serializer.fromJson<String>(json['deviceType']),
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
lastConnectedAt: serializer.fromJson<DateTime?>(json['lastConnectedAt']),
);
}
@override
Map<String, dynamic> toJson({ValueSerializer? serializer}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return <String, dynamic>{
'id': serializer.toJson<int>(id),
'deviceName': serializer.toJson<String>(deviceName),
'deviceAddress': serializer.toJson<String>(deviceAddress),
'deviceType': serializer.toJson<String>(deviceType),
'createdAt': serializer.toJson<DateTime>(createdAt),
'lastConnectedAt': serializer.toJson<DateTime?>(lastConnectedAt),
};
}
ConnectedDevice copyWith(
{int? id,
String? deviceName,
String? deviceAddress,
String? deviceType,
DateTime? createdAt,
Value<DateTime?> lastConnectedAt = const Value.absent()}) =>
ConnectedDevice(
id: id ?? this.id,
deviceName: deviceName ?? this.deviceName,
deviceAddress: deviceAddress ?? this.deviceAddress,
deviceType: deviceType ?? this.deviceType,
createdAt: createdAt ?? this.createdAt,
lastConnectedAt: lastConnectedAt.present
? lastConnectedAt.value
: this.lastConnectedAt,
);
ConnectedDevice copyWithCompanion(ConnectedDevicesCompanion data) {
return ConnectedDevice(
id: data.id.present ? data.id.value : this.id,
deviceName:
data.deviceName.present ? data.deviceName.value : this.deviceName,
deviceAddress: data.deviceAddress.present
? data.deviceAddress.value
: this.deviceAddress,
deviceType:
data.deviceType.present ? data.deviceType.value : this.deviceType,
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
lastConnectedAt: data.lastConnectedAt.present
? data.lastConnectedAt.value
: this.lastConnectedAt,
);
}
@override
String toString() {
return (StringBuffer('ConnectedDevice(')
..write('id: $id, ')
..write('deviceName: $deviceName, ')
..write('deviceAddress: $deviceAddress, ')
..write('deviceType: $deviceType, ')
..write('createdAt: $createdAt, ')
..write('lastConnectedAt: $lastConnectedAt')
..write(')'))
.toString();
}
@override
int get hashCode => Object.hash(
id, deviceName, deviceAddress, deviceType, createdAt, lastConnectedAt);
@override
bool operator ==(Object other) =>
identical(this, other) ||
(other is ConnectedDevice &&
other.id == this.id &&
other.deviceName == this.deviceName &&
other.deviceAddress == this.deviceAddress &&
other.deviceType == this.deviceType &&
other.createdAt == this.createdAt &&
other.lastConnectedAt == this.lastConnectedAt);
}
class ConnectedDevicesCompanion extends UpdateCompanion<ConnectedDevice> {
final Value<int> id;
final Value<String> deviceName;
final Value<String> deviceAddress;
final Value<String> deviceType;
final Value<DateTime> createdAt;
final Value<DateTime?> lastConnectedAt;
const ConnectedDevicesCompanion({
this.id = const Value.absent(),
this.deviceName = const Value.absent(),
this.deviceAddress = const Value.absent(),
this.deviceType = const Value.absent(),
this.createdAt = const Value.absent(),
this.lastConnectedAt = const Value.absent(),
});
ConnectedDevicesCompanion.insert({
this.id = const Value.absent(),
required String deviceName,
required String deviceAddress,
required String deviceType,
this.createdAt = const Value.absent(),
this.lastConnectedAt = const Value.absent(),
}) : deviceName = Value(deviceName),
deviceAddress = Value(deviceAddress),
deviceType = Value(deviceType);
static Insertable<ConnectedDevice> custom({
Expression<int>? id,
Expression<String>? deviceName,
Expression<String>? deviceAddress,
Expression<String>? deviceType,
Expression<DateTime>? createdAt,
Expression<DateTime>? lastConnectedAt,
}) {
return RawValuesInsertable({
if (id != null) 'id': id,
if (deviceName != null) 'device_name': deviceName,
if (deviceAddress != null) 'device_address': deviceAddress,
if (deviceType != null) 'device_type': deviceType,
if (createdAt != null) 'created_at': createdAt,
if (lastConnectedAt != null) 'last_connected_at': lastConnectedAt,
});
}
ConnectedDevicesCompanion copyWith(
{Value<int>? id,
Value<String>? deviceName,
Value<String>? deviceAddress,
Value<String>? deviceType,
Value<DateTime>? createdAt,
Value<DateTime?>? lastConnectedAt}) {
return ConnectedDevicesCompanion(
id: id ?? this.id,
deviceName: deviceName ?? this.deviceName,
deviceAddress: deviceAddress ?? this.deviceAddress,
deviceType: deviceType ?? this.deviceType,
createdAt: createdAt ?? this.createdAt,
lastConnectedAt: lastConnectedAt ?? this.lastConnectedAt,
);
}
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
if (id.present) {
map['id'] = Variable<int>(id.value);
}
if (deviceName.present) {
map['device_name'] = Variable<String>(deviceName.value);
}
if (deviceAddress.present) {
map['device_address'] = Variable<String>(deviceAddress.value);
}
if (deviceType.present) {
map['device_type'] = Variable<String>(deviceType.value);
}
if (createdAt.present) {
map['created_at'] = Variable<DateTime>(createdAt.value);
}
if (lastConnectedAt.present) {
map['last_connected_at'] = Variable<DateTime>(lastConnectedAt.value);
}
return map;
}
@override
String toString() {
return (StringBuffer('ConnectedDevicesCompanion(')
..write('id: $id, ')
..write('deviceName: $deviceName, ')
..write('deviceAddress: $deviceAddress, ')
..write('deviceType: $deviceType, ')
..write('createdAt: $createdAt, ')
..write('lastConnectedAt: $lastConnectedAt')
..write(')'))
.toString();
}
}
abstract class _$AppDatabase extends GeneratedDatabase {
_$AppDatabase(QueryExecutor e) : super(e);
$AppDatabaseManager get managers => $AppDatabaseManager(this);
late final $ConnectedDevicesTable connectedDevices =
$ConnectedDevicesTable(this);
@override
Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
List<DatabaseSchemaEntity> get allSchemaEntities => [connectedDevices];
}
typedef $$ConnectedDevicesTableCreateCompanionBuilder
= ConnectedDevicesCompanion Function({
Value<int> id,
required String deviceName,
required String deviceAddress,
required String deviceType,
Value<DateTime> createdAt,
Value<DateTime?> lastConnectedAt,
});
typedef $$ConnectedDevicesTableUpdateCompanionBuilder
= ConnectedDevicesCompanion Function({
Value<int> id,
Value<String> deviceName,
Value<String> deviceAddress,
Value<String> deviceType,
Value<DateTime> createdAt,
Value<DateTime?> lastConnectedAt,
});
class $$ConnectedDevicesTableFilterComposer
extends Composer<_$AppDatabase, $ConnectedDevicesTable> {
$$ConnectedDevicesTableFilterComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
ColumnFilters<int> get id => $composableBuilder(
column: $table.id, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get deviceName => $composableBuilder(
column: $table.deviceName, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get deviceAddress => $composableBuilder(
column: $table.deviceAddress, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get deviceType => $composableBuilder(
column: $table.deviceType, builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get createdAt => $composableBuilder(
column: $table.createdAt, builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get lastConnectedAt => $composableBuilder(
column: $table.lastConnectedAt,
builder: (column) => ColumnFilters(column));
}
class $$ConnectedDevicesTableOrderingComposer
extends Composer<_$AppDatabase, $ConnectedDevicesTable> {
$$ConnectedDevicesTableOrderingComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
ColumnOrderings<int> get id => $composableBuilder(
column: $table.id, builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get deviceName => $composableBuilder(
column: $table.deviceName, builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get deviceAddress => $composableBuilder(
column: $table.deviceAddress,
builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get deviceType => $composableBuilder(
column: $table.deviceType, builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get createdAt => $composableBuilder(
column: $table.createdAt, builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get lastConnectedAt => $composableBuilder(
column: $table.lastConnectedAt,
builder: (column) => ColumnOrderings(column));
}
class $$ConnectedDevicesTableAnnotationComposer
extends Composer<_$AppDatabase, $ConnectedDevicesTable> {
$$ConnectedDevicesTableAnnotationComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
GeneratedColumn<int> get id =>
$composableBuilder(column: $table.id, builder: (column) => column);
GeneratedColumn<String> get deviceName => $composableBuilder(
column: $table.deviceName, builder: (column) => column);
GeneratedColumn<String> get deviceAddress => $composableBuilder(
column: $table.deviceAddress, builder: (column) => column);
GeneratedColumn<String> get deviceType => $composableBuilder(
column: $table.deviceType, builder: (column) => column);
GeneratedColumn<DateTime> get createdAt =>
$composableBuilder(column: $table.createdAt, builder: (column) => column);
GeneratedColumn<DateTime> get lastConnectedAt => $composableBuilder(
column: $table.lastConnectedAt, builder: (column) => column);
}
class $$ConnectedDevicesTableTableManager extends RootTableManager<
_$AppDatabase,
$ConnectedDevicesTable,
ConnectedDevice,
$$ConnectedDevicesTableFilterComposer,
$$ConnectedDevicesTableOrderingComposer,
$$ConnectedDevicesTableAnnotationComposer,
$$ConnectedDevicesTableCreateCompanionBuilder,
$$ConnectedDevicesTableUpdateCompanionBuilder,
(
ConnectedDevice,
BaseReferences<_$AppDatabase, $ConnectedDevicesTable, ConnectedDevice>
),
ConnectedDevice,
PrefetchHooks Function()> {
$$ConnectedDevicesTableTableManager(
_$AppDatabase db, $ConnectedDevicesTable table)
: super(TableManagerState(
db: db,
table: table,
createFilteringComposer: () =>
$$ConnectedDevicesTableFilterComposer($db: db, $table: table),
createOrderingComposer: () =>
$$ConnectedDevicesTableOrderingComposer($db: db, $table: table),
createComputedFieldComposer: () =>
$$ConnectedDevicesTableAnnotationComposer($db: db, $table: table),
updateCompanionCallback: ({
Value<int> id = const Value.absent(),
Value<String> deviceName = const Value.absent(),
Value<String> deviceAddress = const Value.absent(),
Value<String> deviceType = const Value.absent(),
Value<DateTime> createdAt = const Value.absent(),
Value<DateTime?> lastConnectedAt = const Value.absent(),
}) =>
ConnectedDevicesCompanion(
id: id,
deviceName: deviceName,
deviceAddress: deviceAddress,
deviceType: deviceType,
createdAt: createdAt,
lastConnectedAt: lastConnectedAt,
),
createCompanionCallback: ({
Value<int> id = const Value.absent(),
required String deviceName,
required String deviceAddress,
required String deviceType,
Value<DateTime> createdAt = const Value.absent(),
Value<DateTime?> lastConnectedAt = const Value.absent(),
}) =>
ConnectedDevicesCompanion.insert(
id: id,
deviceName: deviceName,
deviceAddress: deviceAddress,
deviceType: deviceType,
createdAt: createdAt,
lastConnectedAt: lastConnectedAt,
),
withReferenceMapper: (p0) => p0
.map((e) => (e.readTable(table), BaseReferences(db, table, e)))
.toList(),
prefetchHooksCallback: null,
));
}
typedef $$ConnectedDevicesTableProcessedTableManager = ProcessedTableManager<
_$AppDatabase,
$ConnectedDevicesTable,
ConnectedDevice,
$$ConnectedDevicesTableFilterComposer,
$$ConnectedDevicesTableOrderingComposer,
$$ConnectedDevicesTableAnnotationComposer,
$$ConnectedDevicesTableCreateCompanionBuilder,
$$ConnectedDevicesTableUpdateCompanionBuilder,
(
ConnectedDevice,
BaseReferences<_$AppDatabase, $ConnectedDevicesTable, ConnectedDevice>
),
ConnectedDevice,
PrefetchHooks Function()>;
class $AppDatabaseManager {
final _$AppDatabase _db;
$AppDatabaseManager(this._db);
$$ConnectedDevicesTableTableManager get connectedDevices =>
$$ConnectedDevicesTableTableManager(_db, _db.connectedDevices);
}
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$nConnectedDevicesHash() => r'022e744d950bb37c1016266064639e51ce6031b5';
/// See also [NConnectedDevices].
@ProviderFor(NConnectedDevices)
final nConnectedDevicesProvider = AutoDisposeAsyncNotifierProvider<
NConnectedDevices, List<ConnectedDevice>>.internal(
NConnectedDevices.new,
name: r'nConnectedDevicesProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$nConnectedDevicesHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$NConnectedDevices = AutoDisposeAsyncNotifier<List<ConnectedDevice>>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package