| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | import 'package:flowy_infra_ui/style_widget/hover.dart';import 'package:flowy_infra_ui/style_widget/icon_button.dart';import 'package:flowy_infra_ui/widget/spacing.dart';import 'package:flowy_sdk/protobuf/flowy-workspace/view_create.pb.dart';import 'package:flutter/material.dart';import 'package:app_flowy/workspace/domain/image.dart';import 'package:app_flowy/workspace/presentation/app/app_page.dart';import 'package:styled_widget/styled_widget.dart';class ViewWidgetContext {  final View view;  ViewWidgetContext(this.view);  Key valueKey() => ValueKey("${view.id}${view.version}");}typedef OpenViewCallback = void Function(View);class ViewPage extends StatelessWidget {  final ViewWidgetContext viewCtx;  final bool isSelected;  final OpenViewCallback onOpen;  ViewPage(      {Key? key,      required this.viewCtx,      required this.onOpen,      required this.isSelected})      : super(key: viewCtx.valueKey());  @override  Widget build(BuildContext context) {    final config = HoverDisplayConfig(hoverColor: Colors.grey.shade200);    return InkWell(      onTap: _openView(context),      child: FlowyHover(        config: config,        builder: (context, onHover) => _render(context, onHover, config),      ),    );  }  Widget _render(      BuildContext context, bool onHover, HoverDisplayConfig config) {    const double width = 22;    List<Widget> children = [      SizedBox(          width: width,          height: width,          child: svgImageForViewType(viewCtx.view.viewType)),      const HSpace(6),      Text(        viewCtx.view.name,        textAlign: TextAlign.start,        style: const TextStyle(fontSize: 15),      ),    ];    if (onHover) {      _addedHover(children, width);    }    Widget widget = Row(children: children).padding(      vertical: 5,      left: AppPageSize.expandedPadding,      right: 5,    );    if (isSelected) {      widget = FlowyHoverBackground(child: widget, config: config);    }    return widget;  }  Function() _openView(BuildContext context) {    return () => onOpen(viewCtx.view);  }  void _addedHover(List<Widget> children, double hoverWidth) {    children.add(const Spacer());    children.add(Align(      alignment: Alignment.center,      child: FlowyMoreButton(        width: hoverWidth,        onPressed: () {          debugPrint('show view setting');        },      ),    ));  }}
 |