view_widget.dart 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import 'package:app_flowy/startup/startup.dart';
  2. import 'package:app_flowy/workspace/domain/image.dart';
  3. import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart';
  4. import 'package:app_flowy/workspace/presentation/app/app_widget.dart';
  5. import 'package:flowy_infra_ui/widget/spacing.dart';
  6. import 'package:flowy_sdk/protobuf/flowy-workspace/view_create.pb.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:flowy_infra_ui/style_widget/styled_icon_button.dart';
  9. import 'package:flowy_infra_ui/style_widget/styled_hover.dart';
  10. class ViewWidget extends StatelessWidget {
  11. final View view;
  12. const ViewWidget({Key? key, required this.view}) : super(key: key);
  13. @override
  14. Widget build(BuildContext context) {
  15. return InkWell(
  16. onTap: _openView(context),
  17. child: StyledHover(
  18. color: Colors.grey.shade300,
  19. borderRadius: BorderRadius.circular(8),
  20. builder: (context, onHover) => _render(context, onHover),
  21. ),
  22. );
  23. }
  24. Widget _render(BuildContext context, bool onHover) {
  25. const double width = 20;
  26. List<Widget> children = [
  27. Image(
  28. fit: BoxFit.cover,
  29. width: width,
  30. height: width,
  31. image: assetImageForViewType(view.viewType)),
  32. const HSpace(6),
  33. Text(
  34. view.name,
  35. textAlign: TextAlign.start,
  36. style: const TextStyle(fontSize: 15),
  37. ),
  38. ];
  39. if (onHover) {
  40. children.add(const Spacer());
  41. children.add(Align(
  42. alignment: Alignment.center,
  43. child: StyledMore(
  44. width: width,
  45. onPressed: () {},
  46. ),
  47. ));
  48. }
  49. final padding = EdgeInsets.only(
  50. left: AppWidgetSize.expandedPadding,
  51. top: 5,
  52. bottom: 5,
  53. right: 5,
  54. );
  55. return Padding(
  56. padding: padding,
  57. child: Row(children: children),
  58. );
  59. }
  60. Function() _openView(BuildContext context) {
  61. return () {
  62. final stackView = stackViewFromView(view);
  63. getIt<HomePageStack>().setStackView(stackView);
  64. };
  65. }
  66. }