0

由于我的 BaaS,我想将实时数据和 StreamBuilder 与名为 realtime_dart 的包一起使用。Supabase 使用这个包,所以我也需要它。但我不知道如何以正确的方式使用 Socket 钩子。

这是我正在使用的包的示例(realtime_dart)

import 'package:realtime_client/realtime_client.dart';

/// Example to use with Supabase Realtime https://supabase.io/
Future<void> main() async {
  final socket = RealtimeClient('ws://SUPABASE_API_ENDPOINT/realtime/v1',
      params: {'apikey': 'SUPABSE_API_KEY'},
      // ignore: avoid_print
      logger: (kind, msg, data) => {print('$kind $msg $data')});

  final channel = socket.channel('realtime:public');
  channel.on('DELETE', (payload, {ref}) {
    print('channel delete payload: $payload');
  });
  channel.on('INSERT', (payload, {ref}) {
    print('channel insert payload: $payload');
  });

  socket.onMessage((message) => print('MESSAGE $message'));

  // on connect and subscribe
  socket.connect();
  channel.subscribe().receive('ok', (_) => print('SUBSCRIBED'));

  // delay 20s to receive events from server
  await Future.delayed(const Duration(seconds: 20));

  // on unsubscribe and disconnect
  channel.unsubscribe();
  socket.disconnect();
}

如何将这个套接字挂钩与 StreamBuilder 一起使用?

谢谢

4

1 回答 1

4

可能会有一个新stream()功能即将supabase_dart打包,您可以直接使用它来收听这样的流:

StreamBuilder<List<Map<String, dynamic>>>(
  stream: supabase.from('chats').stream(),
  builder: (context, snapshot) {
    if (snapshot.connectionState != ConnectionState.active) {
      return preloader;
    }
    final chats = snapshot.data!;
    return ChatCell(chats);
  },
),

它还没有,但你可以在这里跟踪 PR

另外,当你使用 Supabase 时,你可以只使用,虽然你可以使用单独的包,比如realtime_clientor gotrue,如果你使用supabase_flutter包会更容易。这包括身份验证、实时存储和 postgrest 的一切!

8月14日编辑

stream()已登陆最新版本的supbase_flutter

API 与我上面解释的有所不同,因为您需要execute()在最后调用如下:

supabase.from('chats').stream().execute();
于 2021-08-03T21:37:15.247 回答