Fix a couple Vale linter warnings
This commit is contained in:
+3
-3
@@ -27,7 +27,7 @@ Let's build an example of location sharing option in the app:
|
||||
|
||||

|
||||
|
||||
* Show a "Share Location" button next to MessageInput Textfield.
|
||||
* Show a "Share Location" button next to MessageInput `Textfield`.
|
||||
|
||||
* When the user presses this button, it should fetch the current location coordinates of the user, and send a message on the channel as follows:
|
||||
|
||||
@@ -47,7 +47,7 @@ Message(
|
||||
)
|
||||
```
|
||||
|
||||
For our example, we are going to use [geolocator](https://pub.dev/packages/geolocator) library.
|
||||
For our example, we are going to use [`geolocator`](https://pub.dev/packages/geolocator) library.
|
||||
Please check their [setup instructions](https://pub.dev/packages/geolocator) on their docs.
|
||||
|
||||
NOTE: If you are testing on iOS simulator, you will need to set some dummy coordinates, as mentioned [here](https://stackoverflow.com/a/31238119/7489541).
|
||||
@@ -55,7 +55,7 @@ Also don't forget to enable "location update" capability in background mode, fro
|
||||
|
||||
On the receiver end, `location` type attachment should be rendered in map view, in the `MessageListView`.
|
||||
We are going to use [Google Static Maps API](https://developers.google.com/maps/documentation/maps-static/overview) to render the map in the message.
|
||||
You can use other libraries as well such as [google_maps_flutter](https://pub.dev/packages/google_maps_flutter).
|
||||
You can use other libraries as well such as [`google_maps_flutter`](https://pub.dev/packages/google_maps_flutter).
|
||||
|
||||
First, we add a button which when clicked fetches and shares location into the `MessageInput`:
|
||||
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ final client = StreamChatClient(
|
||||
)..chatPersistenceClient = CustomChatPersistentClient();
|
||||
```
|
||||
|
||||
We provide an official persistent client in the [stream_chat_persistence](https://pub.dev/packages/stream_chat_persistence)
|
||||
We provide an official persistent client in the [`stream_chat_persistence`](https://pub.dev/packages/stream_chat_persistence)
|
||||
package that works using the library [moor](https://moor.simonbinder.eu), an SQLite ORM.
|
||||
|
||||
Add this to your package's `pubspec.yaml` file, using the latest version.
|
||||
|
||||
+9
-9
@@ -21,7 +21,7 @@ Make sure to check [this section](https://getstream.io/chat/docs/flutter-dart/pu
|
||||
|
||||
### Setup FCM
|
||||
|
||||
To integrate push notifications in your Flutter app you need to use the package [firebase_messaging](https://pub.dev/packages/firebase_messaging).
|
||||
To integrate push notifications in your Flutter app you need to use the package [`firebase_messaging`](https://pub.dev/packages/firebase_messaging).
|
||||
|
||||
|
||||
Follow the [Firebase documentation](https://firebase.flutter.dev/docs/messaging/overview/) to know how to set up the plugin for both Android and iOS.
|
||||
@@ -61,7 +61,7 @@ Upload the `Server Key` in your chat dashboard
|
||||
|
||||
|
||||
:::note
|
||||
We are setting up the Android section, but this will work for both Android and iOS if you're using Firebase for both of them!
|
||||
We are setting up the Android section, but this will work for both Android and iOS if you're using Firebase for both of them.
|
||||
:::
|
||||
|
||||
#### Step 6
|
||||
@@ -97,21 +97,21 @@ firebaseMessaging.onTokenRefresh.listen((token) {
|
||||
### Possible issues
|
||||
|
||||
|
||||
We only send push notifications when the user doesn't have any active websocket connection (which is established when you call `client.connectUser`). If you set the [onBackgroundEventReceived](https://pub.dev/documentation/stream_chat_flutter/latest/stream_chat_flutter/StreamChat/onBackgroundEventReceived.html) property of the StreamChat widget, when your app goes to background, your device will keep the ws connection alive for 1 minute, and so within this period, you won't receive any push notification.
|
||||
We only send push notifications when the user doesn't have any active web socket connection (which is established when you call `client.connectUser`). If you set the [onBackgroundEventReceived](https://pub.dev/documentation/stream_chat_flutter/latest/stream_chat_flutter/StreamChat/onBackgroundEventReceived.html) property of the StreamChat widget, when your app goes to background, your device will keep the WS connection alive for 1 minute, and so within this period, you won't receive any push notification.
|
||||
|
||||
Make sure to read the [general push docs](https://getstream.io/chat/docs/flutter-dart/push_introduction/?language=dart) in order to avoid known gotchas that may make your relationship with notifications go bad 😢
|
||||
|
||||
### Testing if Push Notifications are Setup Correctly
|
||||
|
||||
If you're not sure if you've set up push notifications correctly (e.g. you don't always receive them, they work unreliably), you can follow these steps to make sure your config is correct and working:
|
||||
If you're not sure if you've set up push notifications correctly (for example you don't always receive them, they work unreliably), you can follow these steps to make sure your configuration is correct and working:
|
||||
|
||||
1. Clone our repo for push testing git clone [email protected]:GetStream/chat-push-test.git
|
||||
1. Clone our repository for push testing git clone [email protected]:GetStream/chat-push-test.git
|
||||
|
||||
2. `cd flutter`
|
||||
|
||||
3. In folder run `flutter pub get`
|
||||
|
||||
4. Input your api key and secret in `lib/main.dart`
|
||||
4. Input your API key and secret in `lib/main.dart`
|
||||
|
||||
5. Change the bundle identifier/application ID and development team/user so you can run the app in your device (**do not** run on iOS simulator, Android emulator is fine)
|
||||
|
||||
@@ -137,11 +137,11 @@ You should get a test push notification
|
||||
|
||||
The [StreamChat](https://pub.dev/documentation/stream_chat_flutter/latest/stream_chat_flutter/StreamChat-class.html) widget lets you define a [onBackgroundEventReceived](https://pub.dev/documentation/stream_chat_flutter/latest/stream_chat_flutter/StreamChat/onBackgroundEventReceived.html) handler in order to handle events while the app is in the background, but the client is still connected.
|
||||
|
||||
This is useful because it lets you keep the connection alive in cases in which the app goes in the background just for some seconds (eg: multitasking, picking pictures from the gallery...)
|
||||
This is useful because it lets you keep the connection alive in cases in which the app goes in the background just for some seconds (for example multitasking, picking pictures from the gallery...)
|
||||
|
||||
You can even customize the [backgroundKeepAlive](https://pub.dev/documentation/stream_chat_flutter/latest/stream_chat_flutter/StreamChat/backgroundKeepAlive.html) duration.
|
||||
|
||||
In order to show notifications in such a case we suggest using the package [flutter_local_notifications](https://pub.dev/packages/flutter_local_notifications); follow the package guide to successfully set up the plugin.
|
||||
In order to show notifications in such a case we suggest using the package [`flutter_local_notifications`](https://pub.dev/packages/flutter_local_notifications); follow the package guide to successfully set up the plugin.
|
||||
|
||||
Once that's done you should set the [onBackgroundEventReceived](https://pub.dev/documentation/stream_chat_flutter/latest/stream_chat_flutter/StreamChat/onBackgroundEventReceived.html); here is an example:
|
||||
|
||||
@@ -234,7 +234,7 @@ To do this we need to update the push notification data payload at Stream Dashbo
|
||||
}
|
||||
```
|
||||
|
||||
Then we need to integrate the package [stream_chat_persistence](https://pub.dev/packages/stream_chat_persistence) in our app that exports a persistence client, learn [here](https://pub.dev/packages/stream_chat_persistence#usage) how to set it up.
|
||||
Then we need to integrate the package [`stream_chat_persistence`](https://pub.dev/packages/stream_chat_persistence) in our app that exports a persistence client, learn [here](https://pub.dev/packages/stream_chat_persistence#usage) how to set it up.
|
||||
|
||||
Then during the call `firebaseMessaging.configure(...)` we need to set the `onBackgroundMessage` parameter using a TOP-LEVEL or STATIC function to handle background messages; here is an example:
|
||||
|
||||
|
||||
+9
-9
@@ -17,7 +17,7 @@ You can read more about Stream’s [push delivery logic](https://getstream.io/ch
|
||||
|
||||
### Setup FCM
|
||||
|
||||
To integrate push notifications in your Flutter app, you need to use the package [firebase_messaging](https://pub.dev/packages/firebase_messaging).
|
||||
To integrate push notifications in your Flutter app, you need to use the package [`firebase_messaging`](https://pub.dev/packages/firebase_messaging).
|
||||
|
||||
|
||||
Follow the [Firebase documentation](https://firebase.flutter.dev/docs/messaging/overview/) to set up the plugin for Android and iOS.
|
||||
@@ -55,7 +55,7 @@ You can upload your Firebase credentials using either the dashboard or the app s
|
||||
|
||||

|
||||
|
||||
3. Enter your Firebase Credentials and press "Save".
|
||||
3. Enter your Firebase Credentials and press `"Save"`.
|
||||
|
||||
##### Using the API
|
||||
|
||||
@@ -97,7 +97,7 @@ On iOS we send both a **notification** and a **data** payload.
|
||||
This means you don't need to do anything special to get the notification to show up. However, you might want to handle the data payload to perform some logic when the user taps on the notification.
|
||||
|
||||
To update the template, you can use a backend SDK.
|
||||
For example, using the javascript SDK:
|
||||
For example, using the JavaScript SDK:
|
||||
|
||||
```js
|
||||
const client = StreamChat.getInstance(‘api_key’, ‘api_secret’);
|
||||
@@ -173,13 +173,13 @@ void handleNotification(
|
||||
FirebaseMessaging.onBackgroundMessage(onBackgroundMessage);
|
||||
```
|
||||
|
||||
In the above example, you get the message details using the `getMessage` method and then you use the [flutter_local_notifications](https://pub.dev/packages/flutter_local_notifications) package to show the actual notification.
|
||||
In the above example, you get the message details using the `getMessage` method and then you use the [`flutter_local_notifications`](https://pub.dev/packages/flutter_local_notifications) package to show the actual notification.
|
||||
|
||||
##### Using a Template on Android
|
||||
|
||||
It's still possible to add a **notification** payload to Android notifications.
|
||||
You can do so by adding a template using a backend SDK.
|
||||
For example, using the javascript SDK:
|
||||
For example, using the JavaScript SDK:
|
||||
|
||||
```js
|
||||
const client = StreamChat.getInstance(‘api_key’, ‘api_secret’);
|
||||
@@ -203,11 +203,11 @@ Make sure to read the [general push notification docs](https://getstream.io/chat
|
||||
|
||||
### Testing if Push Notifications are Setup Correctly
|
||||
|
||||
If you're not sure whether you've set up push notifications correctly, for example, you don't always receive them, or they don’t work reliably, then you can follow these steps to make sure your config is correct and working:
|
||||
1. Clone our repo for push testing: `git clone [email protected]:GetStream/chat-push-test.git`
|
||||
If you're not sure whether you've set up push notifications correctly, for example, you don't always receive them, or they don’t work reliably, then you can follow these steps to make sure your configuration is correct and working:
|
||||
1. Clone our repository for push testing: `git clone [email protected]:GetStream/chat-push-test.git`
|
||||
2. `cd flutter`
|
||||
3. In that folder run `flutter pub get`
|
||||
4. Input your api key and secret in `lib/main.dart`
|
||||
4. Input your API key and secret in `lib/main.dart`
|
||||
5. Change the bundle identifier/application ID and development team/user so you can run the app on your physical device.**Do not** run on an iOS simulator, as it will not work. Testing on an Android emulator is fine.
|
||||
6. Add your `google-services.json/GoogleService-Info.plist`
|
||||
7. Run the app
|
||||
@@ -249,7 +249,7 @@ Take a look at the [Stream Chat v1 sample app](https://github.com/GetStream/flut
|
||||
|
||||
When the app is closed you may want to save received messages when you receive them via a notification so that later on when you open the app they're already there.
|
||||
|
||||
To do this you need to integrate the package [stream_chat_persistence](https://pub.dev/packages/stream_chat_persistence) in our app that exports a persistence client, see [here](https://pub.dev/packages/stream_chat_persistence#usage) how to set it up.
|
||||
To do this you need to integrate the package [`stream_chat_persistence`](https://pub.dev/packages/stream_chat_persistence) in our app that exports a persistence client, see [here](https://pub.dev/packages/stream_chat_persistence#usage) how to set it up.
|
||||
|
||||
Then calling `FirebaseMessaging.onBackgroundMessage(...)` you need to use a TOP-LEVEL or STATIC function to handle background messages; here is an example:
|
||||
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ Additionally, pinning a message requires you to add the roles which are allowed
|
||||
|
||||
### Partially remove some message actions
|
||||
|
||||
For example, if you only want to keep "copy message" and "delete message",
|
||||
For example, if you only want to keep `"copy message"` and `"delete message"`,
|
||||
here is how to do it using the `messageBuilder` with our `MessageWidget`.
|
||||
|
||||
```dart
|
||||
|
||||
+5
-5
@@ -36,7 +36,7 @@ Check out the diagram below for an example:
|
||||
|
||||
### Dependencies
|
||||
|
||||
Add the [webcrypto](https://pub.dev/packages/webcrypto) package in your `pubspec.yaml` file.
|
||||
Add the [`webcrypto`](https://pub.dev/packages/webcrypto) package in your `pubspec.yaml` file.
|
||||
|
||||
```yaml
|
||||
dependencies:
|
||||
@@ -76,9 +76,9 @@ class JsonWebKeyPair {
|
||||
}
|
||||
```
|
||||
|
||||
### Generate a Crypto Key
|
||||
### Generate a Cryptographic Key
|
||||
|
||||
Next, create a symmetric **Crypto Key** using the keys generated in the previous step.
|
||||
Next, create a symmetric **Cryptographic Key** using the keys generated in the previous step.
|
||||
You will use those keys to encrypt and decrypt messages.
|
||||
|
||||
```dart
|
||||
@@ -107,7 +107,7 @@ Future<List<int>> deriveKey(String senderJwk, String receiverJwk) async {
|
||||
|
||||
### Encrypting Messages
|
||||
|
||||
Once you have generated the **Crypto Key**, you're ready to encrypt the message.
|
||||
Once you have generated the **Cryptographic Key**, you're ready to encrypt the message.
|
||||
You can use the **AES-GCM** algorithm for its known security and performance balance and good browser availability.
|
||||
|
||||
```dart
|
||||
@@ -253,6 +253,6 @@ MessageListView(
|
||||
),
|
||||
```
|
||||
|
||||
That's it! That's all you need to implement E2EE in a Stream powered chat app.
|
||||
That's it. That's all you need to implement E2EE in a Stream powered chat app.
|
||||
|
||||
For more details, check out our [end-to-end encrypted chat article](https://getstream.io/blog/end-to-end-encrypted-chat-in-flutter/#whats-end-to-end-encryption).
|
||||
|
||||
+13
-13
@@ -75,7 +75,7 @@ Added video compress options (frame and quality) to MessageInput
|
||||
`TypingIndicator` now has a property called `parentId` to show typing indicator specific to threads
|
||||
#493: add support for `MessageListView` header/footer
|
||||
`MessageWidget` accepts a `userAvatarBuilder`
|
||||
Added `pinMessage` ui support
|
||||
Added `pinMessage` UI support
|
||||
Added `MessageListView.threadSeparatorBuilder` property
|
||||
Added `MessageInput.onError` property to allow error handling
|
||||
Added `GalleryHeader`/`GalleryFooter` theme classes
|
||||
@@ -202,20 +202,20 @@ in the constructor)
|
||||
#### 🛑️ Breaking Changes from 1.5.3
|
||||
|
||||
* Migrate this package to null safety
|
||||
* `ConnectUserWithProvider` now requires `tokenProvider` as a required param. (Removed from the constructor)
|
||||
* `ConnectUserWithProvider` now requires `tokenProvider` as a required parameter. (Removed from the constructor)
|
||||
* `client.disconnect()` is now divided into two different functions
|
||||
* `client.closeConnection()` -> for closing user websocket connection.
|
||||
* `client.closeConnection()` -> for closing user web socket connection.
|
||||
* `client.disconnectUser()` -> for disconnecting user and resetting client state.
|
||||
* `client.devToken()` now returns a Token model instead of String.
|
||||
* `ApiError` is removed in favor of `StreamChatError`
|
||||
* `StreamChatError` -> parent type for all the stream errors.
|
||||
* `StreamWebSocketError` -> for user websocket related errors.
|
||||
* `StreamWebSocketError` -> for user web socket related errors.
|
||||
* `StreamChatNetworkError` -> for network related errors.
|
||||
* `client.queryChannels()`, `channel.query()` options param is removed in favor of individual params
|
||||
* `client.queryChannels()`, `channel.query()` options parameter is removed in favor of individual parameters
|
||||
* `option.state` -> `bool state`
|
||||
* `option.watch` -> `bool watch`
|
||||
* `option.presence` -> `bool presence`
|
||||
* `client.queryUsers()` options param is removed in favor of individual params
|
||||
* `client.queryUsers()` options parameter is removed in favor of individual parameters
|
||||
* `option.presence` -> `bool presence`
|
||||
* Added typed filters
|
||||
|
||||
@@ -227,8 +227,8 @@ in the constructor)
|
||||
|
||||
#### ✅ Added
|
||||
|
||||
* New Location enum is introduced for easily changing the client location/baseUrl.
|
||||
* New `client.openConnection()` and `client.closeConnection()` is introduced to connect/disconnect user ws connection.
|
||||
* New Location `enum` is introduced for easily changing the client location/baseUrl.
|
||||
* New `client.openConnection()` and `client.closeConnection()` is introduced to connect/disconnect user WS connection.
|
||||
* New `client.partialUpdateMessage` and `channel.partialUpdateMessage` methods
|
||||
* `connectWebSocket` parameter in connect user calls to use the client in "connection-less" mode.
|
||||
|
||||
@@ -253,29 +253,29 @@ dependencies:
|
||||
Upon doing this, all breaking changes from the package will take immediate effect. Here are steps to
|
||||
remedy the issues:
|
||||
|
||||
1) Change over the constructor of `connectUserWithProvider()` to the new format which has `tokenProvider` as a required param.
|
||||
1) Change over the constructor of `connectUserWithProvider()` to the new format which has `tokenProvider` as a required parameter.
|
||||
|
||||
2) We added more nuance to `disconnectUser()` by adding two new methods - one to close the connection
|
||||
and the other to disconnect the user. This allows more fine-grained control of disconnection.
|
||||
|
||||
* `client.closeConnection()` -> for closing user websocket connection.
|
||||
* `client.closeConnection()` -> for closing user web socket connection.
|
||||
* `client.disconnectUser()` -> for disconnecting user and resetting client state.
|
||||
|
||||
3) We refactored how we handle errors - new error types are now introduced that replace ApiError.
|
||||
|
||||
* `StreamChatError` -> parent type for all the stream errors.
|
||||
* `StreamWebSocketError` -> for user websocket related errors.
|
||||
* `StreamWebSocketError` -> for user web socket related errors.
|
||||
* `StreamChatNetworkError` -> for network related errors.
|
||||
|
||||
4) We changed over from a map full of options to a more type-safe and sound approach by changing over to explicit parameters.
|
||||
|
||||
Use these explicit parameters in the query parameters instead of the option keys:
|
||||
|
||||
* `client.queryChannels()`, `channel.query()` options param is removed in favor of individual params
|
||||
* `client.queryChannels()`, `channel.query()` options parameter is removed in favor of individual parameters
|
||||
* `option.state` -> `bool state`
|
||||
* `option.watch` -> `bool watch`
|
||||
* `option.presence` -> `bool presence`
|
||||
* `client.queryUsers()` options param is removed in favor of individual params
|
||||
* `client.queryUsers()` options parameter is removed in favor of individual parameters
|
||||
* `option.presence` -> `bool presence`
|
||||
|
||||
5) We added type-safe filters to make filtering in the app easier. Change over the filters to the
|
||||
|
||||
+5
-5
@@ -24,7 +24,7 @@ Filter.equal('type', 'messaging'),
|
||||
|
||||
#### Filter.notEqual
|
||||
|
||||
The 'notEqual' filter gets the objects where the given key does not have the specified value.
|
||||
The `notEqual` filter gets the objects where the given key does not have the specified value.
|
||||
|
||||
```dart
|
||||
Filter.notEqual('type', 'messaging'),
|
||||
@@ -64,20 +64,20 @@ Filter.lessOrEqual('count', 5),
|
||||
|
||||
#### Filter.in_
|
||||
|
||||
The 'in_' filter allows getting objects where the key matches any in a specified array.
|
||||
The ``in_` filter allows getting objects where the key matches any in a specified array.
|
||||
|
||||
```dart
|
||||
Filter.in_('members', [user.id])
|
||||
```
|
||||
|
||||
:::note
|
||||
Since 'in' is a keyword in Dart, the filter has an underscore added. This does not apply to the 'notIn'
|
||||
Since `in` is a keyword in Dart, the filter has an underscore added. This does not apply to the `notIn`
|
||||
keyword.
|
||||
:::
|
||||
|
||||
#### Filter.notIn
|
||||
|
||||
The 'notIn' filter allows getting objects where the key matches none in a specified array.
|
||||
The `notIn` filter allows getting objects where the key matches none in a specified array.
|
||||
|
||||
```dart
|
||||
Filter.notIn('members', [user.id])
|
||||
@@ -109,7 +109,7 @@ Filter.exists('name')
|
||||
|
||||
#### Filter.notExists
|
||||
|
||||
The 'notExists' filter checks if the specified key doesn't exist. This is a simplified call to `Filter.exists`
|
||||
The `notExists` filter checks if the specified key doesn't exist. This is a simplified call to `Filter.exists`
|
||||
with the value set to false.
|
||||
|
||||
```dart
|
||||
|
||||
+7
-7
@@ -155,7 +155,7 @@ Running the above will give this:
|
||||

|
||||
|
||||
The `Auth` widget handles all of the authentication logic. It initializes a `FirebaseAuth.instance` and uses that
|
||||
in the `createAccount`, `signIn` and `signOut` methods. There is a button to envoke each of these methods.
|
||||
in the `createAccount`, `signIn` and `signOut` methods. There is a button to invoke each of these methods.
|
||||
|
||||
The `FirebaseFunctions.instance` will be used later in this guide.
|
||||
|
||||
@@ -289,7 +289,7 @@ firebase deploy --only functions
|
||||
### Create a Stream User and Get the User's Token
|
||||
|
||||
In the `createStreamUserAndGetToken` cloud function you create an `onCall` HTTPS handler, which exposes
|
||||
a cloud function that can be envoked from your Flutter app.
|
||||
a cloud function that can be invoked from your Flutter app.
|
||||
|
||||
```js
|
||||
// Create a Stream user and return auth token.
|
||||
@@ -325,13 +325,13 @@ by ensuring that `context.auth` is not null. If it is null, then it throws an `H
|
||||
message. This error can be caught in your Flutter application.
|
||||
|
||||
If the caller is authenticated the function proceeds to use the `serverClient` to create a new Stream Chat
|
||||
user by calling the `upsertUser` method and passing in some user data. It uses the authenticated caller's **uid** as an **id**.
|
||||
user by calling the `upsertUser` method and passing in some user data. It uses the authenticated caller's **`uid`** as an **id**.
|
||||
|
||||
After the user is created it generates a token for that user. This token is then returned to the caller.
|
||||
|
||||
To call this from Flutter, you will need to use the `cloud_functions` package.
|
||||
|
||||
Update the **createAccount** method in your Flutter code to the following:
|
||||
Update the **`createAccount`** method in your Flutter code to the following:
|
||||
|
||||
```dart
|
||||
Future<void> createAccount() async {
|
||||
@@ -355,7 +355,7 @@ in the request.
|
||||
|
||||
Once you have the Stream user token, you can authenticate your Stream Chat user as you normally would.
|
||||
|
||||
Please see our [initialization documention](https://getstream.io/chat/docs/flutter-dart/init_and_users/?language=dart) for more information.
|
||||
Please see our [initialization documentation](https://getstream.io/chat/docs/flutter-dart/init_and_users/?language=dart) for more information.
|
||||
|
||||
As you can see below, the User ID matches on both Firebase's and Stream's user database.
|
||||
|
||||
@@ -373,7 +373,7 @@ As you can see below, the User ID matches on both Firebase's and Stream's user d
|
||||
The `getStreamUserToken` cloud function is very similar to the `createStreamUserAndGetToken` function. The only difference is
|
||||
that it only creates a user token and does not create a new user account on Stream.
|
||||
|
||||
Update the **signIn** method in your Flutter code to the following:
|
||||
Update the **`signIn`** method in your Flutter code to the following:
|
||||
|
||||
```dart
|
||||
Future<void> signIn() async {
|
||||
@@ -434,7 +434,7 @@ exports.deleteStreamUser = functions.auth.user().onDelete((user, context) => {
|
||||
```
|
||||
|
||||
In this function, you are listening to delete events on Firebase auth. When an account is deleted, this function will be triggered, and you can get the
|
||||
user's **uid** and call the `deleteUser` method on the `serverClient`.
|
||||
user's **`uid`** and call the `deleteUser` method on the `serverClient`.
|
||||
|
||||
This is not an external cloud function; it can only be triggered when an
|
||||
account is deleted.
|
||||
|
||||
Reference in New Issue
Block a user