huawei_login_view.dart 1.7 KB
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();
  }
}