Я использовал flutter_moor для базы данных SQLite. У меня проблема с тем, что мне нужен столбец для суммы валюты в два раза с двумя десятичными знаками.
Я обнаружил, что существует RealColumn, но не нашел, как правильно его реализовать.
/// A column that stores floating point numeric values.///
abstract class RealColumn extends Column<double, RealType> {}
Вот как выглядит таблица:
class MyClass extends Table {
IntColumn get int => integer().autoIncrement()();
TextColumn get title => text().withLength(min: 1, max: 35)();
TextColumn get description => text().withLength(min: 0, max: 50)();
TextColumn get categorie => text().withLength(min: 1, max: 35)();
RealColumn get amount => double()();
DateTimeColumn get date => dateTime()();
}
Функция double () в RealColumn не работает. Я думал, что это так же, как INT или текст. Я не нахожу решения в документации и в Интернете.
Мой вопрос: как правильно настроить работу столбца суммы?
Заранее большое спасибо за помощь.
---- Редактировать: ---- Полный файл:
import 'dart:core';
import 'package:moor/moor.dart';
import 'package:moor_flutter/moor_flutter.dart';
part 'moor_database.g.dart';
class Transactions extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get title => text().withLength(min: 1, max: 35)();
TextColumn get description => text().withLength(min: 0, max: 50)();
TextColumn get categorie => text().withLength(min: 1, max: 35)();
RealColumn get amount => double()(); //!!!<---This is line with the error///
DateTimeColumn get date => dateTime()();
}
@UseMoor(tables: [Transactions])
class AppDatabase extends _$AppDatabase {
AppDatabase()
: super((FlutterQueryExecutor.inDatabaseFolder(
path: 'db.sqlite',
logStatements: true,
)));
@override
int get schemaVersion => 1;
Future<List<Transaction>> getAllTasks() => select(transactions).get();
Stream<List<Transaction>> watchAllTasks() => select(transactions).watch();
Future insertTask(Transaction transaction) => into(transactions).insert(transaction);
Future updateTask(Transaction transaction) => update(transactions).replace(transaction);
Future deleteTask(Transaction transaction) => delete(transactions).delete(transaction);
}
double () () подчеркнут
Код ошибки следующий (я использую VSCode):
Абстрактные классы не могут быть созданы. Попробуйте создать экземпляр подтипа.
Выражение не оценивается как функция, поэтому его нельзя вызвать.
'$ TransactionsTable.amount' ('Функция GeneratedIntColumn () ') не является корректным переопределением «Transactions.amount» («RealColumn Function ()»).
Например, документация flutter_moor для IntColumn:
/// Столбец, в котором хранятся значения int. абстрактный класс IntColumn extends Column {}
Это работает:
IntColumn get amount => integer()();
Я не понимаю ошибку и почему не работает double () ().
Я надеюсь, что это помогает:)