Skip to content

Commit bc569e3

Browse files
committed
f1
1 parent 8d9fcab commit bc569e3

2 files changed

Lines changed: 28 additions & 7 deletions

File tree

lib/src/e2ee/e2ee_manager.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class E2EEManager {
5252
}
5353

5454
Future<void> setup(Room room) async {
55-
_keyProvider ??= _options.keyProvider ?? await _buildSharedKeyProvider(_options.sharedKey!);
55+
_keyProvider ??= _options.keyProviderOrNull ?? await _buildSharedKeyProvider(_options.sharedKey!);
5656
if (_room != room) {
5757
await _cleanUp();
5858
_room = room;

lib/src/e2ee/options.dart

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15+
import 'package:meta/meta.dart';
16+
1517
import 'key_provider.dart';
1618

1719
enum EncryptionType {
@@ -26,18 +28,37 @@ enum EncryptionType {
2628
/// or a shared passphrase ([E2EEOptions.sharedKey]). Resolution of the
2729
/// passphrase into a native key provider is deferred to [E2EEManager.setup].
2830
class E2EEOptions {
29-
/// A pre-built [BaseKeyProvider], or `null` when this instance was created
30-
/// via [E2EEOptions.sharedKey].
31-
final BaseKeyProvider? keyProvider;
31+
final BaseKeyProvider? _keyProvider;
3232

33-
/// A shared passphrase, or `null` when a [keyProvider] was provided.
33+
/// A shared passphrase, or `null` when a [BaseKeyProvider] was provided.
3434
final String? sharedKey;
3535

3636
final EncryptionType encryptionType = EncryptionType.kGcm;
3737

38-
const E2EEOptions({required BaseKeyProvider this.keyProvider}) : sharedKey = null;
38+
const E2EEOptions({required BaseKeyProvider keyProvider})
39+
: _keyProvider = keyProvider,
40+
sharedKey = null;
3941

4042
const E2EEOptions.sharedKey(String key)
4143
: sharedKey = key,
42-
keyProvider = null;
44+
_keyProvider = null;
45+
46+
/// The underlying [BaseKeyProvider].
47+
///
48+
/// Available immediately when built via the default constructor. Throws
49+
/// [StateError] when built via [E2EEOptions.sharedKey] — the provider is
50+
/// created lazily inside [E2EEManager.setup]; read it from
51+
/// `room.e2eeManager!.keyProvider` after connect instead.
52+
BaseKeyProvider get keyProvider =>
53+
_keyProvider ??
54+
(throw StateError(
55+
'E2EEOptions was constructed via E2EEOptions.sharedKey(...); '
56+
'BaseKeyProvider is built lazily inside E2EEManager.setup(). '
57+
'Access it via room.e2eeManager!.keyProvider after connect.',
58+
));
59+
60+
/// Internal accessor used by [E2EEManager.setup] to read the pre-built
61+
/// provider without triggering the throwing [keyProvider] getter.
62+
@internal
63+
BaseKeyProvider? get keyProviderOrNull => _keyProvider;
4364
}

0 commit comments

Comments
 (0)