【问题标题】:Flutter/Dio Hangs when in an isolateFlutter/Dio 在隔离时挂起
【发布时间】: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 变得很挑剔),但仍然没有。

【问题讨论】:

    标签: flutter dio


    【解决方案1】:

    所以这有点奇怪,但调用await _syncUser(...) 解决了问题。

    【讨论】:

      猜你喜欢
      • 2023-01-02
      • 2021-09-29
      • 2019-07-02
      • 2019-06-06
      • 2019-03-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多