DEV Community

HarmonyOS
HarmonyOS

Posted on

How to implement Pagination using Remote Communication Kit?

Read the original article:How to implement Pagination using Remote Communication Kit?

Requirement Description

This project demonstrates how to implement pagination in a HarmonyOS application using Remote Communication Kit (RCK). The goal is to fetch and display paginated data from a remote device or service, handling navigation between pages with "Next" and "Previous" controls.

Background Knowledge

To understand and implement this project, the following concepts and tools are required:

  • HarmonyOS Remote Communication Kit (RCK): Used to invoke remote methods and share data between devices.
  • Pagination Principles: Understanding how to fetch, cache, and display data in a paginated manner.

Implementation Steps

  1. Add the required imports for RCK, error handling, your Characters model, and ComponentContent.
  2. Build the PaginationPage component:
  3. Add necessary functions as shown in next part.
  4. Render the UI

Code Snippet / Configuration

Necessary imports:

import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { Characters } from '../viewmodel/PaginationModel';
import {ComponentContent } from '@kit.ArkUI';
Enter fullscreen mode Exit fullscreen mode

Header component defines the page title:

@Builder
function header() {
  Column() {
    Text(" Game of Thrones Characters")
      .fontSize(16)
      .fontWeight(FontWeight.Bold)
      .textAlign(TextAlign.Center)
      .margin({ bottom: 8 })
  }
}
Enter fullscreen mode Exit fullscreen mode

PaginationPage component holds state and UI context:

@Entry
@Component
struct PaginationPage {
  @State private items: string = ''
  @State private currentPage: number = 1
  private readonly pageSize: number = 10
  @State chars: Characters[] = []
  context: UIContext = this.getUIContext()
  header: ComponentContent<object> = new ComponentContent(this.context, wrapBuilder(header))
Enter fullscreen mode Exit fullscreen mode

Load data when page appears, method includes refresh, pagination buttons, page info, and list:

aboutToAppear(): void {
  this.loadPage()
}
build() {
  Flex({ justifyContent: FlexAlign.Center, wrap: FlexWrap.Wrap, alignItems: ItemAlign.Center }) {
    Button("🔄 Refresh Characters") /* ... */
    Row() { /* Previous and Next buttons */ }
    Text(`📄 Characters Page ${this.currentPage}`) /* ... */
    Flex({ justifyContent: FlexAlign.Center }) {
      List() {
        ForEach(this.chars, (char: Characters) => { /* Character items */ })
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

loadPage fetches characters from API and updates state:

loadPage() {
  const url = `https://anapioficeandfire.com/api/characters?page=${this.currentPage}&pageSize=${this.pageSize}`
  const request = new rcp.Request(url, 'GET')
  const session = rcp.createSession()

  session.fetch(request)
    .then((rep) => rep.toJSON() as Characters[])
    .then((data) => { this.chars = data /* ... */ })
    .catch((err) => { this.items = 'Fetch error' })
}
Enter fullscreen mode Exit fullscreen mode

deletePage deletes a character by ID and reloads data:

deletePage() {
  const characterId = 583
  const url = `https://anapioficeandfire.com/api/characters/${characterId}`
  const request = new rcp.Request(url, 'DELETE')
  const session = rcp.createSession()

  session.fetch(request)
    .then((rep) => { if (rep) this.loadPage() })
    .catch((err) => { console.error(err) })
}
Enter fullscreen mode Exit fullscreen mode

Test Results

This example demonstrates how to implement pagination in a HarmonyOS app using Remote Communication Kit. It shows how to fetch data from a remote API, display it in a paginated list, and handle navigation between pages. The code also includes basic error handling and supports refreshing and deleting items. This approach can be adapted for other remote data-fetching scenarios requiring pagination.

cogif.gifco1.PNG

Related Documents or Links

https://developer.huawei.com/consumer/en/doc/harmonyos-guides/remote-communication-netsend-arkts

Written by Egemen Ayhan

Top comments (0)