如何在 Flutter Supabase 的 RPC 函数上实现 Stream?

问题描述 投票:0回答:1

我目前正在开发一个使用 Supabase 作为后端的 Flutter 项目。我正在尝试在 RPC(远程过程调用)函数上实现流以接收实时更新,但我遇到了问题。

我尝试使用 asStream() 方法,但它似乎没有按预期流式传输更改。有人可以指导我如何在 Flutter Supabase 中正确实现 RPC 函数的流式传输以接收实时更新吗?任何帮助或代码示例将不胜感激。谢谢!

代码在这里

Stream readSteam() {
    return supabase
        .rpc(
          'read_guest_count',
          params: {
            'param_user_id': currentUuid,
          },
        )
        .asStream()
        .doOnDone(
          () => print('Yes'),
        );
  }

小工具

StreamBuilder(
                    stream: _notificationDBController
                        .readNotificationCountSteamDB(),
                    builder: (context, snapshot) {
                      _notificationDBController.tempStream();
                      if (snapshot.connectionState == ConnectionState.waiting) {
                        // While waiting for data, display a loading indicator or placeholder
                        return Text(
                          'Loading...',
                          style: TextStyle(fontSize: 9),
                        );
                      } else if (snapshot.hasError) {
                        // If there's an error with the stream, display an error message
                        return Text(
                          'Error: ${snapshot.error}',
                          style: TextStyle(fontSize: 9),
                        );
                      } else {
                        // If the stream has data, display the data in the Text widget
                        final List<dynamic>? count =
                            snapshot.data as List<dynamic>?;

                        int totalGuests =
                            count![0]['total_guests'];
                        return Text(
                          '$totalGuests',
                          style: TextStyle(fontSize: 9),
                        );
                      }
                    },
                  )
flutter dart supabase supabase-flutter
1个回答
0
投票

这是给你的建议..

Stream<dynamic> readStream() {
  return supabase
      .rpc(
        'read_guest_count',
        params: {
          'param_user_id': currentUuid,
        },
      )
      .asStream();
}

    SteamBuilder(
     stream: readStream(),
    builder:(context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting){
   
     return Text(
     'Loading...',
                              style: TextStyle(fontSize: 9),
                            );
                          } else if (snapshot.hasError) {
                         
                            return Text(
                              'Error: ${snapshot.error}',
                              style: TextStyle(fontSize: 9),
                            );
                          } else {
    final data = snapshot.data;
    reutrn Text(
    '$data',
    style:TextStyle(fontSize: 9),
    );
    }
    },
    )

试试这个,我不是专家希望它会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.