1
0
mirror of https://github.com/nrop19/weiman_app.git synced 2025-08-02 23:05:48 +08:00
weiman_app/lib/activities/dataConvert.dart
2020-11-07 21:18:42 +00:00

135 lines
3.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:oktoast/oktoast.dart';
import 'package:weiman/classes/book.dart';
import 'package:weiman/classes/data.dart';
import 'package:weiman/db/book.dart' as newBook;
import 'package:weiman/main.dart';
import 'home.dart';
class ActivityDataConvert extends StatefulWidget {
@override
_State createState() => _State();
}
class _State extends State<ActivityDataConvert> {
List<Book> quick;
Map<String, Book> favorites;
bool selectQ = true, selectH = true;
@override
void initState() {
analytics.setCurrentScreen(screenName: '/activity_data_convert');
favorites = Data.getFavorites();
quick = Data.quickList();
super.initState();
}
Future convert() async {
int quickIndex = 0;
int skip = 0;
final awaitList = <Future>[];
favorites.keys.forEach((id) {
if (newBook.Book.bookBox.containsKey(id)) return;
final oldBook = favorites[id];
final isQuick = selectQ && quick.contains(oldBook.aid);
final book = new newBook.Book(
httpId: null,
aid: oldBook.aid,
name: oldBook.name,
avatar: oldBook.avatar,
description: oldBook.description,
authors: [oldBook.author],
chapterCount: oldBook.chapterCount,
quick: isQuick ? quickIndex : null,
needUpdate: true,
favorite: true,
history: null,
);
if (isQuick) quickIndex++;
awaitList.add(book.save());
});
await Future.wait(awaitList);
showToast(
'成功转存 ${awaitList.length} 本小说\n跳过了 $skip',
textPadding: EdgeInsets.all(10),
);
}
Future clean() async {
await Data.instance.remove(Data.favoriteBooksKey);
await Data.instance.remove(Data.quickKey);
await Data.instance.remove(Data.viewHistoryKey);
}
void gotoHome() {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (_) => ActivityHome(),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('旧数据转存'),
),
body: ListView(children: [
ListTile(
title: Text('从v1.1.2开始,为了实现藏书分组功能,使用了新的数据存储方式'
'\n【旧书】打开后直接搜索同名漫画。'
'\n清空旧数据后这个界面不会再次出现。'
'\n需要将旧的藏书数据转存为新数据吗?'
'\n旧藏书不多的话,我个人建议直接清空,可以防止产生数据干扰')),
ListTile(
title: Text('收藏列表'),
subtitle: Text('一共有 ${favorites.length}'),
trailing: Checkbox(
value: true,
onChanged: null,
),
),
ListTile(
title: Text('快速导航'),
subtitle: Text('一共有 ${quick.length}'),
trailing: Checkbox(
value: selectQ,
onChanged: (value) {
setState(() {
selectQ = value;
});
},
),
),
]),
bottomNavigationBar: Row(children: [
SizedBox(width: 10),
Expanded(
child: OutlineButton(
child: Text('直接清空旧数据'),
onPressed: () async {
await clean();
gotoHome();
},
),
),
SizedBox(width: 10),
Expanded(
child: OutlineButton(
child: Text('转存并清空旧数据'),
onPressed: () async {
await convert();
await clean();
gotoHome();
},
),
),
SizedBox(width: 10),
]),
);
}
}