mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-28 13:38:10 +08:00
133 lines
4.2 KiB
Dart
133 lines
4.2 KiB
Dart
//
|
|
// Tencent is pleased to support the open source community by making
|
|
// Hippy available.
|
|
//
|
|
// Copyright (C) 2022 THL A29 Limited, a Tencent company.
|
|
// All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/widgets.dart';
|
|
|
|
import '../common.dart';
|
|
import '../controller.dart';
|
|
import '../render.dart';
|
|
import '../style.dart';
|
|
import '../viewmodel.dart';
|
|
import '../widget.dart';
|
|
|
|
class WebViewViewController extends BaseViewController<WebViewViewModel> {
|
|
static const String kClassName = "WebView";
|
|
|
|
// 兼容3.0新事件绑定方式
|
|
static const String kEventOnLoad = "load";
|
|
static const String kEventOnLoadStart = "loadstart";
|
|
static const String kEventOnLoadEnd = "loadend";
|
|
static const String kEventOnError = "error";
|
|
|
|
@override
|
|
WebViewViewModel createRenderViewModel(RenderNode node, RenderContext context) {
|
|
return WebViewViewModel(node.id, node.rootId, node.name, context);
|
|
}
|
|
|
|
@override
|
|
Widget createWidget(BuildContext context, WebViewViewModel viewModel) {
|
|
return WebViewViewWidget(viewModel);
|
|
}
|
|
|
|
@override
|
|
Map<String, ControllerMethodProp> get extendRegisteredMethodProp {
|
|
var extraMap = <String, ControllerMethodProp>{};
|
|
extraMap[NodeProps.kSource] = ControllerMethodProp(setSource, null);
|
|
extraMap[NodeProps.kUserAgent] = ControllerMethodProp(setUserAgent, '');
|
|
extraMap[NodeProps.kMethod] = ControllerMethodProp(setMethod, '');
|
|
extraMap[NodeProps.kOnLoad] = ControllerMethodProp(setOnLoad, true);
|
|
extraMap[NodeProps.kOnLoadStart] = ControllerMethodProp(setOnLoadStart, true);
|
|
extraMap[NodeProps.kOnLoadEnd] = ControllerMethodProp(setOnLoadEnd, true);
|
|
extraMap[NodeProps.kOnError] = ControllerMethodProp(setOnError, true);
|
|
|
|
return extraMap;
|
|
}
|
|
|
|
@ControllerProps(NodeProps.kSource)
|
|
void setSource(WebViewViewModel renderViewModel, VoltronMap? source) {
|
|
String? src = source?.get<String>('uri');
|
|
if (src != null && src != renderViewModel.src) {
|
|
renderViewModel.src = src;
|
|
}
|
|
}
|
|
|
|
@ControllerProps(NodeProps.kUserAgent)
|
|
void setUserAgent(WebViewViewModel renderViewModel, String ua) {
|
|
if (ua != renderViewModel.userAgent) {
|
|
renderViewModel.userAgent = ua;
|
|
}
|
|
}
|
|
|
|
@ControllerProps(NodeProps.kMethod)
|
|
void setMethod(WebViewViewModel renderViewModel, String method) {
|
|
renderViewModel.method = method;
|
|
}
|
|
|
|
@ControllerProps(NodeProps.kOnLoadStart)
|
|
void setOnLoadStart(WebViewViewModel renderViewModel, bool flag) {
|
|
renderViewModel.onLoadStartEventEnable = flag;
|
|
}
|
|
|
|
@ControllerProps(NodeProps.kOnError)
|
|
void setOnError(WebViewViewModel renderViewModel, bool flag) {
|
|
renderViewModel.onErrorEventEnable = flag;
|
|
}
|
|
|
|
@ControllerProps(NodeProps.kOnLoadEnd)
|
|
void setOnLoadEnd(WebViewViewModel renderViewModel, bool flag) {
|
|
renderViewModel.onLoadEndEventEnable = flag;
|
|
}
|
|
|
|
@ControllerProps(NodeProps.kOnLoad)
|
|
void setOnLoad(WebViewViewModel renderViewModel, bool flag) {
|
|
renderViewModel.onLoadEventEnable = flag;
|
|
}
|
|
|
|
@override
|
|
void updateEvents(
|
|
WebViewViewModel renderViewModel,
|
|
Set<EventHolder> holders,
|
|
) {
|
|
super.updateEvents(renderViewModel, holders);
|
|
if (holders.isNotEmpty) {
|
|
for (var holder in holders) {
|
|
switch (holder.eventName) {
|
|
case kEventOnLoad:
|
|
setOnLoad(renderViewModel, holder.isAdd);
|
|
break;
|
|
case kEventOnLoadStart:
|
|
setOnLoadStart(renderViewModel, holder.isAdd);
|
|
break;
|
|
case kEventOnLoadEnd:
|
|
setOnLoadEnd(renderViewModel, holder.isAdd);
|
|
break;
|
|
case kEventOnError:
|
|
setOnError(renderViewModel, holder.isAdd);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@override
|
|
String get name => kClassName;
|
|
}
|