mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-28 21:48:13 +08:00
* feat(voltron): format voltron code * feat(voltron): fix voltron flutter analyze
130 lines
4.1 KiB
Dart
130 lines
4.1 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/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:pull_to_refresh/pull_to_refresh.dart';
|
|
import 'package:voltron_renderer/voltron_renderer.dart';
|
|
|
|
class RefreshWrapperWidget extends FRStatefulWidget {
|
|
final RefreshWrapperRenderViewModel _viewModel;
|
|
|
|
RefreshWrapperWidget(this._viewModel) : super(_viewModel);
|
|
|
|
@override
|
|
State<StatefulWidget> createState() {
|
|
return _RefreshWrapperWidgetState();
|
|
}
|
|
}
|
|
|
|
class _RefreshWrapperWidgetState extends FRState<RefreshWrapperWidget> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
LogUtils.dWidget(
|
|
"ID:${widget._viewModel.id}, node:${widget._viewModel.idDesc}, build refresh wrapper widget",
|
|
);
|
|
return ChangeNotifierProvider.value(
|
|
value: widget._viewModel,
|
|
child: Selector<RefreshWrapperRenderViewModel, RefreshWrapperRenderViewModel>(
|
|
selector: (context, viewModel) {
|
|
return RefreshWrapperRenderViewModel.copy(
|
|
viewModel.id,
|
|
viewModel.rootId,
|
|
viewModel.name,
|
|
viewModel.context,
|
|
viewModel,
|
|
);
|
|
},
|
|
builder: (context, viewModel, _) {
|
|
return PositionWidget(
|
|
viewModel,
|
|
child: Selector0<RefreshWrapperRenderContentViewModel>(
|
|
selector: (context) => viewModel.refreshWrapperRenderContentViewModel,
|
|
builder: (context, viewModel, _) => refreshWrapper(viewModel),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget refreshWrapper(RefreshWrapperRenderContentViewModel viewModel) {
|
|
LogUtils.dWidget(
|
|
"ID:${widget._viewModel.id}, node:${widget._viewModel.idDesc}, build refresh wrapper inner widget",
|
|
);
|
|
var content = viewModel.content;
|
|
if (content == null) {
|
|
return Container();
|
|
}
|
|
|
|
var headerModel = viewModel.header;
|
|
Widget? header;
|
|
if (headerModel != null) {
|
|
header = generateByViewModel(context, headerModel);
|
|
}
|
|
var listChild = content;
|
|
listChild.pushExtraInfo(RefreshWrapperController.kWrapperKey, ({
|
|
required context,
|
|
required child,
|
|
footerModel,
|
|
}) {
|
|
Widget? footer;
|
|
if (footerModel != null) {
|
|
footer = generateByViewModel(context, footerModel);
|
|
}
|
|
return RefreshConfiguration(
|
|
headerTriggerDistance: headerModel?.height ?? 0,
|
|
footerTriggerDistance: footerModel?.height ?? 0,
|
|
child: SmartRefresher(
|
|
enablePullDown: true,
|
|
enablePullUp: footerModel != null,
|
|
controller: viewModel.dispatcher.refreshController,
|
|
onRefresh: () {
|
|
viewModel.dispatcher.startRefresh();
|
|
},
|
|
header: header == null
|
|
? null
|
|
: CustomHeader(
|
|
height: headerModel?.height ?? 0,
|
|
builder: (context, status) => header!,
|
|
),
|
|
footer: footer == null
|
|
? null
|
|
: CustomFooter(
|
|
height: footerModel?.height ?? 0,
|
|
builder: (context, status) => footer!,
|
|
loadStyle: LoadStyle.HideAlways,
|
|
),
|
|
onLoading: () {
|
|
viewModel.dispatcher.loadingCompleted();
|
|
},
|
|
child: child,
|
|
),
|
|
);
|
|
});
|
|
var list = generateByViewModel(context, listChild);
|
|
var stack = Stack(
|
|
children: [list],
|
|
);
|
|
return stack;
|
|
}
|
|
}
|