Как создать столбец для двойных значений в трепетании - PullRequest
0 голосов
/ 10 марта 2020

Я использовал 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 () ().

Я надеюсь, что это помогает:)

1 Ответ

1 голос
/ 01 апреля 2020

Вы должны использовать real () вместо double () следующим образом:

RealColumn get amount => real()(); 
...