There are a few ways to fix this. We could skip events, where we don't have the state in memory yet or always do a /profile request and cache that. I chose to go with loading the event from the database if necessary. If we have a room in the db, we should have our memberevent in the db. In some cases we might not (if the server thinks our memberevent is super redundant), but I think the spec doesn't really allow that and it doesn't happen in practice. And even if it would, we probably would want our member event ASAP. And if we have no rooms, we fetch it from the server as before instead of constructing a member with an MXID as the username. fixes https://gitlab.com/famedly/company/frontend/frontend-issue-inbox/-/issues/65 |
||
|---|---|---|
| .gitlab | ||
| example | ||
| home | ||
| lib | ||
| scripts | ||
| test | ||
| test_driver | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .metadata | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.md | ||
| analysis_options.yaml | ||
| build.yaml | ||
| pubspec.yaml | ||
README.md
Matrix SDK
Matrix (matrix.org) SDK written in dart.
Native libraries
For E2EE, libolm must be provided.
Additionally, OpenSSL (libcrypto) must be provided on native platforms for E2EE.
For flutter apps you can easily import it with the flutter_olm and the flutter_openssl_crypto packages.
How to use this
- Import the sdk
matrix: <latest-version>
# Optional:
flutter_olm: <latest-version>
flutter_openssl_crypto: <latest-version>
import 'package:matrix/matrix.dart';
- Create a new client:
final client = Client("HappyChat");
The SDK works better with a database. Otherwise it has no persistence. For this you need to provide a databaseBuilder like this:
final client = Client(
"HappyChat",
databaseBuilder: (Client client) async {
await Hive.init('/path/to/your/storage');
final db = FamedlySdkHiveDatabase(client.clientName);
await db.open();
return db;
},
);
- Connect to a Matrix Homeserver and listen to the streams:
client.onLoginStateChanged.stream.listen((bool loginState){
print("LoginState: ${loginState.toString()}");
});
client.onEvent.stream.listen((EventUpdate eventUpdate){
print("New event update!");
});
client.onRoomUpdate.stream.listen((RoomUpdate eventUpdate){
print("New room update!");
});
await client.checkHomeserver("https://yourhomeserver.abc");
await client.login(
identifier: AuthenticationUserIdentifier(user: 'alice'),
password: '123456',
);
- Send a message to a Room:
await client.getRoomById('your_room_id').sendTextEvent('Hello world');