huawei_login_view.dart
1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
typedef OnHuaweiLoginViewCreated = Function(HuaweiLoginViewController);
class HuaweiLoginView extends StatefulWidget {
final OnHuaweiLoginViewCreated onViewCreated;
const HuaweiLoginView({Key? key, required this.onViewCreated})
: super(key: key);
@override
State<HuaweiLoginView> createState() => _HuaweiLoginViewState();
}
class _HuaweiLoginViewState extends State<HuaweiLoginView> {
late MethodChannel _channel;
@override
Widget build(BuildContext context) {
return OhosView(
viewType: 'com.naji.huawei/loginView',
onPlatformViewCreated: (int id) {
_channel = MethodChannel('com.naji.huawei/loginView$id');
final controller = HuaweiLoginViewController._(_channel);
widget.onViewCreated(controller);
},
creationParams: const <String, dynamic>{},
creationParamsCodec: const StandardMessageCodec(),
);
}
}
class HuaweiLoginViewController {
final MethodChannel _channel;
final StreamController<Map<String, dynamic>> _controller =
StreamController<Map<String, dynamic>>.broadcast();
HuaweiLoginViewController._(this._channel) {
_channel.setMethodCallHandler((call) async {
_controller.sink.add({
'method': call.method,
'data': call.arguments,
});
});
}
Stream<Map<String, dynamic>> get events => _controller.stream;
Future<void> setAgreementStatus(bool accepted) async {
await _channel.invokeMethod('setAgreementStatus', accepted);
}
Future<void> continueLogin() async {
await _channel.invokeMethod('continueLogin', '');
}
void dispose() {
_controller.close();
}
}