【发布时间】:2020-12-09 01:01:46
【问题描述】:
所以我尝试在隔离中同步我的数据库,因为 UI 不关心同步。
Database _backgroundConnection(File dbFile) {
final database = VmDatabase(dbFile);
var connection = DatabaseConnection.fromExecutor(database);
return Database.connect(connection);
}
Dio _getDio(String urlBase, String authToken) {
var dio = Dio();
dio.options.baseUrl = urlBase;
dio.options.headers = {"Authorization": authToken};
dio.options.connectTimeout = 5000; //5s
dio.options.receiveTimeout = 3000;
return dio;
}
Future<void> _syncUser(UserDao dao, DateTime lastSynced, Dio dio) async {
var users = await dao.getUser();
if (users.isEmpty) {
return;
}
var user = users[0];
var userDto = UserDto.fromUser(user);
//if (user.lastUpdated.isAfter(lastSynced)) {
var result = await dio.put("/api/v1/user", data: userDto.toJson());
print(result);
//}
}
Future<void> _startSync(Map<String, dynamic> info) async {
String dbPath = info["dbPath"];
DateTime lastSynced = info["lastSynced"];
String urlBase = info["url"];
String token = info["token"];
var dio = _getDio(urlBase, token);
File dbFile = File(dbPath);
var database = _backgroundConnection(dbFile);
_syncUser(UserDao.fromDatabase(database), lastSynced, dio);
}
class DatabaseSync {
Future<void> syncDatabase() async {
final dbFolder = await getApplicationDocumentsDirectory();
var envVars = GetIt.instance.get<EnvVariables>();
var authRepo = GetIt.instance.get<FirebaseAuthRepository>();
compute(_startSync, {
"lastSynced": DateTime.now(),
"dbPath": p.join(dbFolder.path, 'db.sqlite'),
"url": envVars.url,
"token": await authRepo.getAuthToken(),
});
}
}
我已经删除了计算部分,只运行了代码,它就可以工作了。它提出请求。但是,当我在请求之前放置一个断点时,它会命中,但是当我将它放在 print 语句上时,它永远不会命中。没有任何东西被写入控制台。这发生在 iOS 和 android 上。我尝试将 urlBase 从我的 localhost 服务器更改为 https://google.com 以确保它会命中 https(因为 iOS 变得很挑剔),但仍然没有。
【问题讨论】: