From 34e4856ab8ae74a6c2be4044fabbfecf8848c351 Mon Sep 17 00:00:00 2001 From: zhushenwudi <55681140@163.com> Date: Sun, 14 Apr 2024 12:20:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=8C=851.5.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 - lib/dao/database.g.dart | 1139 +++++++++++++++++++++++++++++++++++++ lib/generated/assets.dart | 175 ++++++ 3 files changed, 1314 insertions(+), 2 deletions(-) create mode 100644 lib/dao/database.g.dart create mode 100644 lib/generated/assets.dart diff --git a/.gitignore b/.gitignore index 6e70f0a0..d61ef785 100644 --- a/.gitignore +++ b/.gitignore @@ -46,5 +46,3 @@ app.*.map.json /android/app/release *.lock /test/ -/lib/dao/database.g.dart -/lib/generated/assets.dart diff --git a/lib/dao/database.g.dart b/lib/dao/database.g.dart new file mode 100644 index 00000000..6a1cc7ec --- /dev/null +++ b/lib/dao/database.g.dart @@ -0,0 +1,1139 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'database.dart'; + +// ************************************************************************** +// FloorGenerator +// ************************************************************************** + +// ignore: avoid_classes_with_only_static_members +class $FloorMusicDatabase { + /// Creates a database builder for a persistent database. + /// Once a database is built, you should keep a reference to it and re-use it. + static _$MusicDatabaseBuilder databaseBuilder(String name) => + _$MusicDatabaseBuilder(name); + + /// Creates a database builder for an in memory database. + /// Information stored in an in memory database disappears when the process is killed. + /// Once a database is built, you should keep a reference to it and re-use it. + static _$MusicDatabaseBuilder inMemoryDatabaseBuilder() => + _$MusicDatabaseBuilder(null); +} + +class _$MusicDatabaseBuilder { + _$MusicDatabaseBuilder(this.name); + + final String? name; + + final List _migrations = []; + + Callback? _callback; + + /// Adds migrations to the builder. + _$MusicDatabaseBuilder addMigrations(List migrations) { + _migrations.addAll(migrations); + return this; + } + + /// Adds a database [Callback] to the builder. + _$MusicDatabaseBuilder addCallback(Callback callback) { + _callback = callback; + return this; + } + + /// Creates the database and initializes it. + Future build() async { + final path = name != null + ? await sqfliteDatabaseFactory.getDatabasePath(name!) + : ':memory:'; + final database = _$MusicDatabase(); + database.database = await database.open( + path, + _migrations, + _callback, + ); + return database; + } +} + +class _$MusicDatabase extends MusicDatabase { + _$MusicDatabase([StreamController? listener]) { + changeListener = listener ?? StreamController.broadcast(); + } + + AlbumDao? _albumDaoInstance; + + LyricDao? _lyricDaoInstance; + + MusicDao? _musicDaoInstance; + + PlayListMusicDao? _playListMusicDaoInstance; + + MenuDao? _menuDaoInstance; + + ArtistDao? _artistDaoInstance; + + LoveDao? _loveDaoInstance; + + HistoryDao? _historyDaoInstance; + + Future open( + String path, + List migrations, [ + Callback? callback, + ]) async { + final databaseOptions = sqflite.OpenDatabaseOptions( + version: 9, + onConfigure: (database) async { + await database.execute('PRAGMA foreign_keys = ON'); + await callback?.onConfigure?.call(database); + }, + onOpen: (database) async { + await callback?.onOpen?.call(database); + }, + onUpgrade: (database, startVersion, endVersion) async { + await MigrationAdapter.runMigrations( + database, startVersion, endVersion, migrations); + + await callback?.onUpgrade?.call(database, startVersion, endVersion); + }, + onCreate: (database, version) async { + await database.execute( + 'CREATE TABLE IF NOT EXISTS `Album` (`albumId` TEXT, `albumName` TEXT, `date` TEXT, `coverPath` TEXT, `category` TEXT, `group` TEXT, `existFile` INTEGER, PRIMARY KEY (`albumId`))'); + await database.execute( + 'CREATE TABLE IF NOT EXISTS `Lyric` (`uid` TEXT, `jp` TEXT, `zh` TEXT, `roma` TEXT, PRIMARY KEY (`uid`))'); + await database.execute( + 'CREATE TABLE IF NOT EXISTS `Music` (`musicId` TEXT, `musicName` TEXT, `artist` TEXT, `artistBin` TEXT, `albumId` TEXT, `albumName` TEXT, `coverPath` TEXT, `musicPath` TEXT, `time` TEXT, `baseUrl` TEXT, `category` TEXT, `group` TEXT, `isLove` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `neteaseId` TEXT, `date` TEXT, `existFile` INTEGER, PRIMARY KEY (`musicId`))'); + await database.execute( + 'CREATE TABLE IF NOT EXISTS `PlayListMusic` (`musicId` TEXT NOT NULL, `musicName` TEXT NOT NULL, `artist` TEXT NOT NULL, `isPlaying` INTEGER NOT NULL, PRIMARY KEY (`musicId`))'); + await database.execute( + 'CREATE TABLE IF NOT EXISTS `Menu` (`id` INTEGER NOT NULL, `isPhone` INTEGER NOT NULL, `music` TEXT NOT NULL, `date` TEXT NOT NULL, `name` TEXT NOT NULL, PRIMARY KEY (`id`))'); + await database.execute( + 'CREATE TABLE IF NOT EXISTS `Artist` (`id` INTEGER, `uid` TEXT NOT NULL, `name` TEXT NOT NULL, `photo` TEXT NOT NULL, `group` TEXT NOT NULL, `music` TEXT NOT NULL, PRIMARY KEY (`id`))'); + await database.execute( + 'CREATE TABLE IF NOT EXISTS `Love` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `musicId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL)'); + await database.execute( + 'CREATE TABLE IF NOT EXISTS `History` (`musicId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, PRIMARY KEY (`musicId`))'); + + await callback?.onCreate?.call(database, version); + }, + ); + return sqfliteDatabaseFactory.openDatabase(path, options: databaseOptions); + } + + @override + AlbumDao get albumDao { + return _albumDaoInstance ??= _$AlbumDao(database, changeListener); + } + + @override + LyricDao get lyricDao { + return _lyricDaoInstance ??= _$LyricDao(database, changeListener); + } + + @override + MusicDao get musicDao { + return _musicDaoInstance ??= _$MusicDao(database, changeListener); + } + + @override + PlayListMusicDao get playListMusicDao { + return _playListMusicDaoInstance ??= + _$PlayListMusicDao(database, changeListener); + } + + @override + MenuDao get menuDao { + return _menuDaoInstance ??= _$MenuDao(database, changeListener); + } + + @override + ArtistDao get artistDao { + return _artistDaoInstance ??= _$ArtistDao(database, changeListener); + } + + @override + LoveDao get loveDao { + return _loveDaoInstance ??= _$LoveDao(database, changeListener); + } + + @override + HistoryDao get historyDao { + return _historyDaoInstance ??= _$HistoryDao(database, changeListener); + } +} + +class _$AlbumDao extends AlbumDao { + _$AlbumDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database), + _albumInsertionAdapter = InsertionAdapter( + database, + 'Album', + (Album item) => { + 'albumId': item.albumId, + 'albumName': item.albumName, + 'date': item.date, + 'coverPath': item.coverPath, + 'category': item.category, + 'group': item.group, + 'existFile': + item.existFile == null ? null : (item.existFile! ? 1 : 0) + }), + _albumUpdateAdapter = UpdateAdapter( + database, + 'Album', + ['albumId'], + (Album item) => { + 'albumId': item.albumId, + 'albumName': item.albumName, + 'date': item.date, + 'coverPath': item.coverPath, + 'category': item.category, + 'group': item.group, + 'existFile': + item.existFile == null ? null : (item.existFile! ? 1 : 0) + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _albumInsertionAdapter; + + final UpdateAdapter _albumUpdateAdapter; + + @override + Future> findAllAlbums() async { + return _queryAdapter.queryList('SELECT * FROM Album ORDER BY `date`', + mapper: (Map row) => Album( + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + date: row['date'] as String?, + coverPath: row['coverPath'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0)); + } + + @override + Future> findAllExistAlbums() async { + return _queryAdapter.queryList( + 'SELECT * FROM Album WHERE `existFile` = 1 ORDER BY `date`', + mapper: (Map row) => Album( + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + date: row['date'] as String?, + coverPath: row['coverPath'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0)); + } + + @override + Future> findAllAlbumsByGroup(String group) async { + return _queryAdapter.queryList( + 'SELECT * FROM Album WHERE `group` = ?1 ORDER BY `date`', + mapper: (Map row) => Album( + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + date: row['date'] as String?, + coverPath: row['coverPath'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0), + arguments: [group]); + } + + @override + Future> findAllExistAlbumsByGroup(String group) async { + return _queryAdapter.queryList( + 'SELECT * FROM Album WHERE `group` = ?1 AND `existFile` = 1 ORDER BY `date`', + mapper: (Map row) => Album(albumId: row['albumId'] as String?, albumName: row['albumName'] as String?, date: row['date'] as String?, coverPath: row['coverPath'] as String?, category: row['category'] as String?, group: row['group'] as String?, existFile: row['existFile'] == null ? null : (row['existFile'] as int) != 0), + arguments: [group]); + } + + @override + Future findAlbumByUId(String albumId) async { + return _queryAdapter.query('SELECT * FROM Album WHERE albumId = ?1', + mapper: (Map row) => Album( + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + date: row['date'] as String?, + coverPath: row['coverPath'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0), + arguments: [albumId]); + } + + @override + Future deleteAllAlbums() async { + await _queryAdapter.queryNoReturn('DELETE FROM Album'); + } + + @override + Future insertAlbum(Album album) async { + await _albumInsertionAdapter.insert(album, OnConflictStrategy.abort); + } + + @override + Future insertAllAlbums(List albums) async { + await _albumInsertionAdapter.insertList(albums, OnConflictStrategy.abort); + } + + @override + Future updateAlbum(Album album) async { + await _albumUpdateAdapter.update(album, OnConflictStrategy.abort); + } +} + +class _$LyricDao extends LyricDao { + _$LyricDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database), + _lyricInsertionAdapter = InsertionAdapter( + database, + 'Lyric', + (Lyric item) => { + 'uid': item.uid, + 'jp': item.jp, + 'zh': item.zh, + 'roma': item.roma + }), + _lyricUpdateAdapter = UpdateAdapter( + database, + 'Lyric', + ['uid'], + (Lyric item) => { + 'uid': item.uid, + 'jp': item.jp, + 'zh': item.zh, + 'roma': item.roma + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _lyricInsertionAdapter; + + final UpdateAdapter _lyricUpdateAdapter; + + @override + Future findLyricById(String uid) async { + return _queryAdapter.query('SELECT * FROM Lyric WHERE uid = ?1', + mapper: (Map row) => Lyric( + uid: row['uid'] as String?, + jp: row['jp'] as String?, + zh: row['zh'] as String?, + roma: row['roma'] as String?), + arguments: [uid]); + } + + @override + Future deleteAllLyrics() async { + await _queryAdapter.queryNoReturn('DELETE FROM Lyric'); + } + + @override + Future insertLyric(Lyric lyric) async { + await _lyricInsertionAdapter.insert(lyric, OnConflictStrategy.abort); + } + + @override + Future updateLrc(Lyric lyric) async { + await _lyricUpdateAdapter.update(lyric, OnConflictStrategy.abort); + } +} + +class _$MusicDao extends MusicDao { + _$MusicDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database), + _musicInsertionAdapter = InsertionAdapter( + database, + 'Music', + (Music item) => { + 'musicId': item.musicId, + 'musicName': item.musicName, + 'artist': item.artist, + 'artistBin': item.artistBin, + 'albumId': item.albumId, + 'albumName': item.albumName, + 'coverPath': item.coverPath, + 'musicPath': item.musicPath, + 'time': item.time, + 'baseUrl': item.baseUrl, + 'category': item.category, + 'group': item.group, + 'isLove': item.isLove ? 1 : 0, + 'timestamp': item.timestamp, + 'neteaseId': item.neteaseId, + 'date': item.date, + 'existFile': + item.existFile == null ? null : (item.existFile! ? 1 : 0) + }), + _musicUpdateAdapter = UpdateAdapter( + database, + 'Music', + ['musicId'], + (Music item) => { + 'musicId': item.musicId, + 'musicName': item.musicName, + 'artist': item.artist, + 'artistBin': item.artistBin, + 'albumId': item.albumId, + 'albumName': item.albumName, + 'coverPath': item.coverPath, + 'musicPath': item.musicPath, + 'time': item.time, + 'baseUrl': item.baseUrl, + 'category': item.category, + 'group': item.group, + 'isLove': item.isLove ? 1 : 0, + 'timestamp': item.timestamp, + 'neteaseId': item.neteaseId, + 'date': item.date, + 'existFile': + item.existFile == null ? null : (item.existFile! ? 1 : 0) + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _musicInsertionAdapter; + + final UpdateAdapter _musicUpdateAdapter; + + @override + Future> findAllMusicsASC() async { + return _queryAdapter.queryList( + 'SELECT * FROM Music ORDER BY `date` ASC, `musicId` ASC', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0)); + } + + @override + Future> findAllMusicsDESC() async { + return _queryAdapter.queryList( + 'SELECT * FROM Music ORDER BY `date` DESC, `musicId` DESC', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0)); + } + + @override + Future> findAllExistMusicsASC() async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE `existFile` = 1 ORDER BY `date` ASC, `musicId` ASC', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0)); + } + + @override + Future> findAllExistMusicsDESC() async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE `existFile` = 1 ORDER BY `date` DESC, `musicId` DESC', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0)); + } + + @override + Future> findAllMusicsByGroupASC(String group) async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE `group` = ?1 ORDER BY `date` ASC, `musicId` ASC', + mapper: (Map row) => Music(musicId: row['musicId'] as String?, musicName: row['musicName'] as String?, artist: row['artist'] as String?, artistBin: row['artistBin'] as String?, albumId: row['albumId'] as String?, albumName: row['albumName'] as String?, coverPath: row['coverPath'] as String?, musicPath: row['musicPath'] as String?, time: row['time'] as String?, category: row['category'] as String?, group: row['group'] as String?, baseUrl: row['baseUrl'] as String?, date: row['date'] as String?, timestamp: row['timestamp'] as int, neteaseId: row['neteaseId'] as String?, isLove: (row['isLove'] as int) != 0, existFile: row['existFile'] == null ? null : (row['existFile'] as int) != 0), + arguments: [group]); + } + + @override + Future> findAllMusicsByGroupDESC(String group) async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE `group` = ?1 ORDER BY `date` DESC, `musicId` DESC', + mapper: (Map row) => Music(musicId: row['musicId'] as String?, musicName: row['musicName'] as String?, artist: row['artist'] as String?, artistBin: row['artistBin'] as String?, albumId: row['albumId'] as String?, albumName: row['albumName'] as String?, coverPath: row['coverPath'] as String?, musicPath: row['musicPath'] as String?, time: row['time'] as String?, category: row['category'] as String?, group: row['group'] as String?, baseUrl: row['baseUrl'] as String?, date: row['date'] as String?, timestamp: row['timestamp'] as int, neteaseId: row['neteaseId'] as String?, isLove: (row['isLove'] as int) != 0, existFile: row['existFile'] == null ? null : (row['existFile'] as int) != 0), + arguments: [group]); + } + + @override + Future> findAllExistMusicsByGroupASC(String group) async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE `group` = ?1 AND `existFile` = 1 ORDER BY `date` ASC, `musicId` ASC', + mapper: (Map row) => Music(musicId: row['musicId'] as String?, musicName: row['musicName'] as String?, artist: row['artist'] as String?, artistBin: row['artistBin'] as String?, albumId: row['albumId'] as String?, albumName: row['albumName'] as String?, coverPath: row['coverPath'] as String?, musicPath: row['musicPath'] as String?, time: row['time'] as String?, category: row['category'] as String?, group: row['group'] as String?, baseUrl: row['baseUrl'] as String?, date: row['date'] as String?, timestamp: row['timestamp'] as int, neteaseId: row['neteaseId'] as String?, isLove: (row['isLove'] as int) != 0, existFile: row['existFile'] == null ? null : (row['existFile'] as int) != 0), + arguments: [group]); + } + + @override + Future> findAllExistMusicsByGroupDESC(String group) async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE `group` = ?1 AND `existFile` = 1 ORDER BY `date` DESC, `musicId` DESC', + mapper: (Map row) => Music(musicId: row['musicId'] as String?, musicName: row['musicName'] as String?, artist: row['artist'] as String?, artistBin: row['artistBin'] as String?, albumId: row['albumId'] as String?, albumName: row['albumName'] as String?, coverPath: row['coverPath'] as String?, musicPath: row['musicPath'] as String?, time: row['time'] as String?, category: row['category'] as String?, group: row['group'] as String?, baseUrl: row['baseUrl'] as String?, date: row['date'] as String?, timestamp: row['timestamp'] as int, neteaseId: row['neteaseId'] as String?, isLove: (row['isLove'] as int) != 0, existFile: row['existFile'] == null ? null : (row['existFile'] as int) != 0), + arguments: [group]); + } + + @override + Future> findAllMusicsTest() async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE name like \"%ん%\"', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0)); + } + + @override + Future> findAllMusicsByAlbumId(String albumId) async { + return _queryAdapter.queryList('SELECT * FROM Music WHERE albumId = ?1', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0), + arguments: [albumId]); + } + + @override + Future> findAllExistMusicsByAlbumId(String albumId) async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE albumId = ?1 AND `existFile` = 1', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0), + arguments: [albumId]); + } + + @override + Future findMusicByUId(String musicId) async { + return _queryAdapter.query('SELECT * FROM Music WHERE musicId = ?1', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0), + arguments: [musicId]); + } + + @override + Future> findRecentMusics() async { + return _queryAdapter.queryList( + 'SELECT * FROM Music WHERE `timestamp` > 0 ORDER BY `timestamp` DESC LIMIT 100', + mapper: (Map row) => Music( + musicId: row['musicId'] as String?, + musicName: row['musicName'] as String?, + artist: row['artist'] as String?, + artistBin: row['artistBin'] as String?, + albumId: row['albumId'] as String?, + albumName: row['albumName'] as String?, + coverPath: row['coverPath'] as String?, + musicPath: row['musicPath'] as String?, + time: row['time'] as String?, + category: row['category'] as String?, + group: row['group'] as String?, + baseUrl: row['baseUrl'] as String?, + date: row['date'] as String?, + timestamp: row['timestamp'] as int, + neteaseId: row['neteaseId'] as String?, + isLove: (row['isLove'] as int) != 0, + existFile: row['existFile'] == null + ? null + : (row['existFile'] as int) != 0)); + } + + @override + Future deleteAllMusics() async { + await _queryAdapter.queryNoReturn('DELETE FROM Music'); + } + + @override + Future deleteAllLove() async { + await _queryAdapter + .queryNoReturn('UPDATE Music SET isLove = REPLACE(isLove, 1, 0)'); + } + + @override + Future insertMusic(Music music) async { + await _musicInsertionAdapter.insert(music, OnConflictStrategy.abort); + } + + @override + Future insertAllMusics(List musics) async { + await _musicInsertionAdapter.insertList(musics, OnConflictStrategy.abort); + } + + @override + Future updateMusic(Music music) async { + await _musicUpdateAdapter.update(music, OnConflictStrategy.abort); + } +} + +class _$PlayListMusicDao extends PlayListMusicDao { + _$PlayListMusicDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database), + _playListMusicInsertionAdapter = InsertionAdapter( + database, + 'PlayListMusic', + (PlayListMusic item) => { + 'musicId': item.musicId, + 'musicName': item.musicName, + 'artist': item.artist, + 'isPlaying': item.isPlaying ? 1 : 0 + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _playListMusicInsertionAdapter; + + @override + Future> findAllPlayListMusics() async { + return _queryAdapter.queryList('SELECT * FROM PlayListMusic', + mapper: (Map row) => PlayListMusic( + musicId: row['musicId'] as String, + musicName: row['musicName'] as String, + artist: row['artist'] as String, + isPlaying: (row['isPlaying'] as int) != 0)); + } + + @override + Future deleteAllPlayListMusics() async { + await _queryAdapter.queryNoReturn('DELETE FROM PlayListMusic'); + } + + @override + Future insertAllPlayListMusics( + List playListMusic) async { + await _playListMusicInsertionAdapter.insertList( + playListMusic, OnConflictStrategy.abort); + } +} + +class _$MenuDao extends MenuDao { + _$MenuDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database), + _menuInsertionAdapter = InsertionAdapter( + database, + 'Menu', + (Menu item) => { + 'id': item.id, + 'isPhone': item.isPhone ? 1 : 0, + 'music': _stringListConverter.encode(item.music), + 'date': item.date, + 'name': item.name + }), + _menuUpdateAdapter = UpdateAdapter( + database, + 'Menu', + ['id'], + (Menu item) => { + 'id': item.id, + 'isPhone': item.isPhone ? 1 : 0, + 'music': _stringListConverter.encode(item.music), + 'date': item.date, + 'name': item.name + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _menuInsertionAdapter; + + final UpdateAdapter _menuUpdateAdapter; + + @override + Future> findAllMenus() async { + return _queryAdapter.queryList('SELECT * FROM Menu ORDER BY `date`', + mapper: (Map row) => Menu( + id: row['id'] as int, + isPhone: (row['isPhone'] as int) != 0, + music: _stringListConverter.decode(row['music'] as String), + date: row['date'] as String, + name: row['name'] as String)); + } + + @override + Future findMenuById(int menuId) async { + return _queryAdapter.query('SELECT * FROM Menu WHERE `id` = ?1', + mapper: (Map row) => Menu( + id: row['id'] as int, + isPhone: (row['isPhone'] as int) != 0, + music: _stringListConverter.decode(row['music'] as String), + date: row['date'] as String, + name: row['name'] as String), + arguments: [menuId]); + } + + @override + Future deleteMenuById(int menuId) async { + await _queryAdapter + .queryNoReturn('DELETE FROM Menu WHERE `id` = ?1', arguments: [menuId]); + } + + @override + Future deletePcMenu() async { + await _queryAdapter.queryNoReturn('DELETE FROM Menu WHERE `id` <= 100'); + } + + @override + Future deleteAllMenus() async { + await _queryAdapter.queryNoReturn('DELETE FROM Menu'); + } + + @override + Future insertMenu(Menu menu) async { + await _menuInsertionAdapter.insert(menu, OnConflictStrategy.abort); + } + + @override + Future updateMenu(Menu menu) async { + await _menuUpdateAdapter.update(menu, OnConflictStrategy.abort); + } +} + +class _$ArtistDao extends ArtistDao { + _$ArtistDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database), + _artistInsertionAdapter = InsertionAdapter( + database, + 'Artist', + (Artist item) => { + 'id': item.id, + 'uid': item.uid, + 'name': item.name, + 'photo': item.photo, + 'group': item.group, + 'music': _stringListConverter.encode(item.music) + }), + _artistUpdateAdapter = UpdateAdapter( + database, + 'Artist', + ['id'], + (Artist item) => { + 'id': item.id, + 'uid': item.uid, + 'name': item.name, + 'photo': item.photo, + 'group': item.group, + 'music': _stringListConverter.encode(item.music) + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _artistInsertionAdapter; + + final UpdateAdapter _artistUpdateAdapter; + + @override + Future> findAllArtists() async { + return _queryAdapter.queryList('SELECT * FROM Artist', + mapper: (Map row) => Artist( + id: row['id'] as int?, + uid: row['uid'] as String, + name: row['name'] as String, + photo: row['photo'] as String, + music: _stringListConverter.decode(row['music'] as String), + group: row['group'] as String)); + } + + @override + Future> findAllArtistsByGroup(String group) async { + return _queryAdapter.queryList('SELECT * FROM Artist WHERE `group` = ?1', + mapper: (Map row) => Artist( + id: row['id'] as int?, + uid: row['uid'] as String, + name: row['name'] as String, + photo: row['photo'] as String, + music: _stringListConverter.decode(row['music'] as String), + group: row['group'] as String), + arguments: [group]); + } + + @override + Future findArtistByArtistBinAndGroup( + String artistBin, + String group, + ) async { + return _queryAdapter.query( + 'SELECT * FROM Artist WHERE uid = ?1 AND `group` = ?2', + mapper: (Map row) => Artist( + id: row['id'] as int?, + uid: row['uid'] as String, + name: row['name'] as String, + photo: row['photo'] as String, + music: _stringListConverter.decode(row['music'] as String), + group: row['group'] as String), + arguments: [artistBin, group]); + } + + @override + Future> findArtistByArtistBin(String artistBin) async { + return _queryAdapter.queryList('SELECT * FROM Artist WHERE uid = ?1', + mapper: (Map row) => Artist( + id: row['id'] as int?, + uid: row['uid'] as String, + name: row['name'] as String, + photo: row['photo'] as String, + music: _stringListConverter.decode(row['music'] as String), + group: row['group'] as String), + arguments: [artistBin]); + } + + @override + Future deleteAllArtists() async { + await _queryAdapter.queryNoReturn('DELETE FROM Artist'); + } + + @override + Future insertArtist(Artist artist) { + return _artistInsertionAdapter.insertAndReturnId( + artist, OnConflictStrategy.abort); + } + + @override + Future insertAllArtists(List artist) async { + await _artistInsertionAdapter.insertList(artist, OnConflictStrategy.abort); + } + + @override + Future updateArtist(Artist artist) async { + await _artistUpdateAdapter.update(artist, OnConflictStrategy.abort); + } +} + +class _$LoveDao extends LoveDao { + _$LoveDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database), + _loveInsertionAdapter = InsertionAdapter( + database, + 'Love', + (Love item) => { + 'id': item.id, + 'musicId': item.musicId, + 'timestamp': item.timestamp + }), + _loveUpdateAdapter = UpdateAdapter( + database, + 'Love', + ['id'], + (Love item) => { + 'id': item.id, + 'musicId': item.musicId, + 'timestamp': item.timestamp + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _loveInsertionAdapter; + + final UpdateAdapter _loveUpdateAdapter; + + @override + Future> findAllLovesASC() async { + return _queryAdapter.queryList('SELECT * FROM Love ORDER BY `id` ASC', + mapper: (Map row) => Love( + timestamp: row['timestamp'] as int, + musicId: row['musicId'] as String, + id: row['id'] as int?)); + } + + @override + Future> findAllLovesDESC() async { + return _queryAdapter.queryList('SELECT * FROM Love ORDER BY `id` DESC', + mapper: (Map row) => Love( + timestamp: row['timestamp'] as int, + musicId: row['musicId'] as String, + id: row['id'] as int?)); + } + + @override + Future findLoveById(String musicId) async { + return _queryAdapter.query('SELECT * FROM Love WHERE musicId = ?1', + mapper: (Map row) => Love( + timestamp: row['timestamp'] as int, + musicId: row['musicId'] as String, + id: row['id'] as int?), + arguments: [musicId]); + } + + @override + Future deleteLoveById(String musicId) async { + await _queryAdapter.queryNoReturn('DELETE FROM Love WHERE musicId = ?1', + arguments: [musicId]); + } + + @override + Future deleteAllLoves() async { + await _queryAdapter.queryNoReturn('DELETE FROM Love'); + } + + @override + Future insertLove(Love love) async { + await _loveInsertionAdapter.insert(love, OnConflictStrategy.abort); + } + + @override + Future insertAllLoves(List loves) async { + await _loveInsertionAdapter.insertList(loves, OnConflictStrategy.abort); + } + + @override + Future updateLove(Love love) async { + await _loveUpdateAdapter.update(love, OnConflictStrategy.abort); + } +} + +class _$HistoryDao extends HistoryDao { + _$HistoryDao( + this.database, + this.changeListener, + ) : _queryAdapter = QueryAdapter(database), + _historyInsertionAdapter = InsertionAdapter( + database, + 'History', + (History item) => { + 'musicId': item.musicId, + 'timestamp': item.timestamp + }), + _historyUpdateAdapter = UpdateAdapter( + database, + 'History', + ['musicId'], + (History item) => { + 'musicId': item.musicId, + 'timestamp': item.timestamp + }); + + final sqflite.DatabaseExecutor database; + + final StreamController changeListener; + + final QueryAdapter _queryAdapter; + + final InsertionAdapter _historyInsertionAdapter; + + final UpdateAdapter _historyUpdateAdapter; + + @override + Future> findAllHistorysASC() async { + return _queryAdapter.queryList( + 'SELECT * FROM History ORDER BY `timestamp` ASC LIMIT 100', + mapper: (Map row) => History( + musicId: row['musicId'] as String, + timestamp: row['timestamp'] as int)); + } + + @override + Future> findAllHistorysDESC() async { + return _queryAdapter.queryList( + 'SELECT * FROM History ORDER BY `timestamp` DESC LIMIT 100', + mapper: (Map row) => History( + musicId: row['musicId'] as String, + timestamp: row['timestamp'] as int)); + } + + @override + Future findHistoryById(String musicId) async { + return _queryAdapter.query('SELECT * FROM History WHERE musicId = ?1', + mapper: (Map row) => History( + musicId: row['musicId'] as String, + timestamp: row['timestamp'] as int), + arguments: [musicId]); + } + + @override + Future deleteHistoryById(String musicId) async { + await _queryAdapter.queryNoReturn('DELETE FROM History WHERE musicId = ?1', + arguments: [musicId]); + } + + @override + Future deleteAllHistorys() async { + await _queryAdapter.queryNoReturn('DELETE FROM History'); + } + + @override + Future insertHistory(History history) async { + await _historyInsertionAdapter.insert(history, OnConflictStrategy.abort); + } + + @override + Future updateHistory(History history) async { + await _historyUpdateAdapter.update(history, OnConflictStrategy.abort); + } +} + +// ignore_for_file: unused_element +final _stringListConverter = StringListConverter(); diff --git a/lib/generated/assets.dart b/lib/generated/assets.dart new file mode 100644 index 00000000..7b7a3355 --- /dev/null +++ b/lib/generated/assets.dart @@ -0,0 +1,175 @@ +///This file is automatically generated. DO NOT EDIT, all your changes would be lost. +class Assets { + Assets._(); + + static const String assetsJetbrains = 'assets/jetbrains.png'; + static const String assetsTachieIndex = 'assets/tachie/index.html'; + static const String assetsTachieSakana = 'assets/tachie/sakana.css'; + static const String assetsUpFace = 'assets/up_face.jpg'; + static const String assetsUpWx = 'assets/up_wx.png'; + static const String assetsUpZfb = 'assets/up_zfb.png'; + static const String dialogIcAddPlayList = + 'assets/dialog/ic_add_play_list.svg'; + static const String dialogIcAddPlayList2 = + 'assets/dialog/ic_add_play_list2.svg'; + static const String dialogIcAddSongSheet = + 'assets/dialog/ic_add_song_sheet.svg'; + static const String dialogIcDelete = 'assets/dialog/ic_delete.svg'; + static const String dialogIcDelete2 = 'assets/dialog/ic_delete_2.svg'; + static const String dialogIcEdit = 'assets/dialog/ic_edit.svg'; + static const String dialogIcNewSongList = + 'assets/dialog/ic_new_song_list.svg'; + static const String dialogIcSeeAlbum = 'assets/dialog/ic_see_album.svg'; + static const String dialogIcSongInfo = 'assets/dialog/ic_song_info.svg'; + static const String drawerDrawerAiPic = 'assets/drawer/drawer_ai_pic.svg'; + static const String drawerDrawerBackground = + 'assets/drawer/drawer_background.svg'; + static const String drawerDrawerCalendar = + 'assets/drawer/drawer_calendar.svg'; + static const String drawerDrawerCar = 'assets/drawer/drawer_car.svg'; + static const String drawerDrawerColorful = + 'assets/drawer/drawer_colorful.svg'; + static const String drawerDrawerDataDownload = + 'assets/drawer/drawer_data_download.svg'; + static const String drawerDrawerDataSync = + 'assets/drawer/drawer_data_sync.svg'; + static const String drawerDrawerDayNight = + 'assets/drawer/drawer_day_night.svg'; + static const String drawerDrawerDebug = 'assets/drawer/drawer_debug.svg'; + static const String drawerDrawerHttp = 'assets/drawer/drawer_http.svg'; + static const String drawerDrawerInspect = 'assets/drawer/drawer_inspect.svg'; + static const String drawerDrawerQuickTrans = + 'assets/drawer/drawer_quick_trans.svg'; + static const String drawerDrawerReset = 'assets/drawer/drawer_reset.svg'; + static const String drawerDrawerSecret = 'assets/drawer/drawer_secret.svg'; + static const String drawerDrawerSetting = 'assets/drawer/drawer_setting.svg'; + static const String drawerDrawerShare = 'assets/drawer/drawer_share.svg'; + static const String drawerDrawerSystemTheme = + 'assets/drawer/drawer_system_theme.svg'; + static const String drawerDrawerTimer = 'assets/drawer/drawer_timer.svg'; + static const String drawerDrawerUpdate = 'assets/drawer/drawer_update.svg'; + static const String drawerLogoAllstars = 'assets/drawer/logo_allstars.svg'; + static const String drawerLogoAqours = 'assets/drawer/logo_aqours.svg'; + static const String drawerLogoHasunosora = + 'assets/drawer/logo_hasunosora.svg'; + static const String drawerLogoLiella = 'assets/drawer/logo_liella.svg'; + static const String drawerLogoLovelive = 'assets/drawer/logo_lovelive.svg'; + static const String drawerLogoNijigasaki = + 'assets/drawer/logo_nijigasaki.svg'; + static const String drawerLogoUs = 'assets/drawer/logo_us.svg'; + static const String drawerLogoYohaneDay = 'assets/drawer/logo_yohane_day.svg'; + static const String drawerLogoYohaneNight = + 'assets/drawer/logo_yohane_night.svg'; + static const String driveCarDisFavorite = 'assets/drive/car_dis_favorite.svg'; + static const String driveCarExit = 'assets/drive/car_exit.svg'; + static const String driveCarFavoriate = 'assets/drive/car_favoriate.svg'; + static const String driveCarFavoriteBottom = + 'assets/drive/car_favorite_bottom.svg'; + static const String driveCarPauseButton = 'assets/drive/car_pause_button.svg'; + static const String driveCarPlayButton = 'assets/drive/car_play_button.svg'; + static const String driveCarPlaylistBottom = + 'assets/drive/car_playlist_bottom.svg'; + static const String driveCarplayFavorite = + 'assets/drive/carplay_favorite.png'; + static const String driveDiscFill = 'assets/drive/disc-fill.png'; + static const String fontsKaTong = 'assets/fonts/KaTong.ttf'; + static const String launchBackground = 'assets/launch/background.png'; + static const String logoLogo = 'assets/logo/logo.png'; + static const String logoLogoAqours = 'assets/logo/logo_aqours.jpg'; + static const String logoLogoCombine = 'assets/logo/logo_combine.jpg'; + static const String logoLogoHasunosora = 'assets/logo/logo_hasunosora.jpg'; + static const String logoLogoLiella = 'assets/logo/logo_liella.jpg'; + static const String logoLogoNiji = 'assets/logo/logo_niji.jpg'; + static const String logoLogoUs = 'assets/logo/logo_us.jpg'; + static const String logoLogoYohane = 'assets/logo/logo_yohane.jpg'; + static const String logoSvgLogo = 'assets/logo/svg_logo.svg'; + static const String loveLiveMusicPlayerMobileShorebird = 'shorebird.yaml'; + static const String mainIcAddNext = 'assets/main/ic_add_next.svg'; + static const String mainIcDraggable = 'assets/main/ic_draggable.svg'; + static const String mainIcErr = 'assets/main/ic_err.png'; + static const String mainIcMore = 'assets/main/ic_more.svg'; + static const String mainIcNull = 'assets/main/ic_null.png'; + static const String mainIcScreen = 'assets/main/ic_screen.svg'; + static const String mainIcSearch = 'assets/main/ic_search.svg'; + static const String mainIcSortAsc = 'assets/main/ic_sort_asc.svg'; + static const String mainIcSortDesc = 'assets/main/ic_sort_desc.svg'; + static const String playerPlayJp = 'assets/player/play_jp.svg'; + static const String playerPlayLove = 'assets/player/play_love.svg'; + static const String playerPlayNext = 'assets/player/play_next.svg'; + static const String playerPlayPause = 'assets/player/play_pause.svg'; + static const String playerPlayPlay = 'assets/player/play_play.svg'; + static const String playerPlayPlaylist = 'assets/player/play_playlist.svg'; + static const String playerPlayPrev = 'assets/player/play_prev.svg'; + static const String playerPlayRecycle = 'assets/player/play_recycle.svg'; + static const String playerPlayRoma = 'assets/player/play_roma.svg'; + static const String playerPlayShuffle = 'assets/player/play_shuffle.svg'; + static const String playerPlaySingle = 'assets/player/play_single.svg'; + static const String playerPlayZh = 'assets/player/play_zh.svg'; + static const String playerPlayerCall = 'assets/player/player_call.gif'; + static const String role11 = 'assets/role/11.png'; + static const String role11s = 'assets/role/11s.png'; + static const String role12 = 'assets/role/12.png'; + static const String role13k = 'assets/role/13k.png'; + static const String role14 = 'assets/role/14.png'; + static const String role174 = 'assets/role/174.png'; + static const String role18 = 'assets/role/18.png'; + static const String role1g = 'assets/role/1g.png'; + static const String role1w = 'assets/role/1w.png'; + static const String role21 = 'assets/role/21.png'; + static const String role21s = 'assets/role/21s.png'; + static const String role22 = 'assets/role/22.png'; + static const String role23k = 'assets/role/23k.png'; + static const String role24 = 'assets/role/24.png'; + static const String role274 = 'assets/role/274.png'; + static const String role28 = 'assets/role/28.png'; + static const String role2g = 'assets/role/2g.png'; + static const String role2w = 'assets/role/2w.png'; + static const String role31 = 'assets/role/31.png'; + static const String role31kw = 'assets/role/31kw.png'; + static const String role31s = 'assets/role/31s.png'; + static const String role32 = 'assets/role/32.png'; + static const String role33k = 'assets/role/33k.png'; + static const String role34 = 'assets/role/34.png'; + static const String role374 = 'assets/role/374.png'; + static const String role38 = 'assets/role/38.png'; + static const String role3e8 = 'assets/role/3e8.png'; + static const String role3g = 'assets/role/3g.png'; + static const String role3sg = 'assets/role/3sg.png'; + static const String role3w = 'assets/role/3w.png'; + static const String role41 = 'assets/role/41.png'; + static const String role41kw = 'assets/role/41kw.png'; + static const String role41s = 'assets/role/41s.png'; + static const String role42 = 'assets/role/42.png'; + static const String role435s = 'assets/role/435s.png'; + static const String role43k = 'assets/role/43k.png'; + static const String role44 = 'assets/role/44.png'; + static const String role474 = 'assets/role/474.png'; + static const String role48 = 'assets/role/48.png'; + static const String role4g = 'assets/role/4g.png'; + static const String role4w = 'assets/role/4w.png'; + static const String role61 = 'assets/role/61.png'; + static const String role62 = 'assets/role/62.png'; + static const String role64 = 'assets/role/64.png'; + static const String role68 = 'assets/role/68.png'; + static const String role6g = 'assets/role/6g.png'; + static const String role6w = 'assets/role/6w.png'; + static const String simpleSimple1 = 'assets/simple/simple1.png'; + static const String simpleSimple2 = 'assets/simple/simple2.png'; + static const String simpleSimple3 = 'assets/simple/simple3.png'; + static const String simpleSimple4 = 'assets/simple/simple4.png'; + static const String simpleSimple5 = 'assets/simple/simple5.png'; + static const String simpleSimple6 = 'assets/simple/simple6.png'; + static const String syncIconComputer = 'assets/sync/icon_computer.svg'; + static const String syncIconDataSync = 'assets/sync/icon_data_sync.svg'; + static const String syncIconPhone = 'assets/sync/icon_phone.svg'; + static const String syncIconScanQr = 'assets/sync/icon_scan_qr.svg'; + static const String tabTabAlbum = 'assets/tab/tab_album.svg'; + static const String tabTabLove = 'assets/tab/tab_love.svg'; + static const String tabTabMusic = 'assets/tab/tab_music.svg'; + static const String tabTabPlaylist = 'assets/tab/tab_playlist.svg'; + static const String tabTabRecently = 'assets/tab/tab_recently.svg'; + static const String tabTabSinger = 'assets/tab/tab_singer.svg'; + static const String tachieIndex = 'assets/tachie/index.css'; + static const String tachieSakana = 'assets/tachie/sakana.js'; + static const String tachieTachie = 'assets/tachie/tachie.json'; +}