/
memo.dart
66 lines (60 loc) · 1.33 KB
/
memo.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import 'dart:io';
import 'package:isar/isar.dart';
import 'package:uchi_sake/common.dart';
import 'package:uchi_sake/models/file_converter.dart';
part 'memo.g.dart';
@Collection()
class Memo {
@Id()
int? id;
String? name;
@FileConverter()
File? labelImage;
@FileConverter()
File? specImage;
@FileConverter()
File? otherImage;
@Index()
DateTime? tappedOn;
String? keywordsString;
int? score;
String? purchaceStore;
String? body;
late DateTime createdAt;
late DateTime updatedAt;
void save() {
updatedAt = DateTime.now();
if (id == null) {
createdAt = updatedAt;
}
isar.writeTxnSync((isar) {
id = isar.memos.putSync(this);
});
}
void destroy() {
if (id == null) {
return;
} else {
isar.writeTxnSync((isar) {
isar.memos.deleteSync(id!);
});
}
}
static List<Memo> searchByText(String searchText) {
var words = searchText.split(' ');
return isar.memos
.where(sort: Sort.desc)
.anyTappedOn()
.filter()
.nameContains('')
.repeat(
words,
(wordQ, String word) => wordQ.and().group((q) => q
.nameContains(word)
.or()
.keywordsStringContains(word)
.or()
.bodyContains(word)))
.findAllSync();
}
}