getAccountPosts method

  1. @override
Future<List<Discussion>> getAccountPosts(
  1. String username,
  2. String by, {
  3. required int limit,
  4. String? startAuthor,
  5. String? startPermlink,
  6. String? observer,
})
override

Implementation

@override
Future<List<Discussion>> getAccountPosts(
  String username,
  String by, {
  required int limit,
  String? startAuthor,
  String? startPermlink,
  String? observer,
}) async {
  final completer = Completer<List<Discussion>>();

  headlessWebView.webViewController?.addJavaScriptHandler(
    handlerName: 'getAccountPostsResult',
    callback: (args) {
      if (!completer.isCompleted) {
        var contentData = args.isNotEmpty ? args[0].toString() : null;

        if (contentData != null &&
            contentData != 'null' &&
            contentData.isNotEmpty) {
          try {
            var posts = Discussion.fromJsonStringList(contentData);
            completer.complete(posts);
          } catch (e) {
            completer.completeError('Failed to parse posts: $e');
          }
        } else {
          completer.completeError(
            'Failed to get account posts or empty response',
          );
        }
      }
    },
  );

  await headlessWebView.webViewController?.evaluateJavascript(
    source: """
  (async () => {
    var string = await getAccountPosts(
      "${jsonDecode(username)}",
      ${jsonEncode(by)},
      $limit,
      ${jsonEncode(startAuthor)},
      ${jsonEncode(startPermlink)},
      ${jsonEncode(observer)},
    );
    window.flutter_inappwebview.callHandler('getAccountPostsResult', string);
  })()
  """,
  );

  return completer.future;
}