From 269f610d189e11239b17e632790d10ae595f54ff Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Fri, 2 Apr 2021 14:39:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget_detail/widget_detail_page.dart | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/lib/views/pages/widget_detail/widget_detail_page.dart b/lib/views/pages/widget_detail/widget_detail_page.dart index 52da69a..1487118 100644 --- a/lib/views/pages/widget_detail/widget_detail_page.dart +++ b/lib/views/pages/widget_detail/widget_detail_page.dart @@ -5,11 +5,11 @@ import 'package:flutter_unit/app/res/cons.dart'; import 'package:flutter_unit/app/res/toly_icon.dart'; import 'package:flutter_unit/app/utils/Toast.dart'; import 'package:flutter_unit/blocs/bloc_exp.dart'; +import 'package:flutter_unit/model/node_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; import 'package:flutter_unit/views/components/permanent/panel.dart'; import 'package:flutter_unit/views/components/project/widget_node_panel.dart'; -import 'package:flutter_unit/model/node_model.dart'; -import 'package:flutter_unit/model/widget_model.dart'; import 'package:flutter_unit/views/pages/widget_detail/category_end_drawer.dart'; import 'package:flutter_unit/views/widgets/widgets_map.dart'; @@ -31,6 +31,9 @@ class _WidgetDetailPageState extends State { super.initState(); } + // 获取当前的 组件数据模型 + WidgetModel get currentWidgetModel => _modelStack.last; + @override Widget build(BuildContext context) { return Scaffold( @@ -39,7 +42,11 @@ class _WidgetDetailPageState extends State { title: Text(_modelStack.last.name), actions: [ _buildToHome(), - _buildCollectButton(_modelStack.last, context), + FeedbackWidget( + onPressed: () => _toggleLikeState(context), + child: BlocConsumer( + listener: _listenLikeStateChange, builder: _buildByLikeState), + ) ], ), body: Builder(builder: _buildContent), @@ -63,52 +70,49 @@ class _WidgetDetailPageState extends State { Widget _buildToHome() => Builder( builder: (ctx) => GestureDetector( onLongPress: () => Scaffold.of(ctx).openEndDrawer(), - child: Padding( - padding: const EdgeInsets.all(15.0), + child: const Padding( + padding: EdgeInsets.all(15.0), child: Icon(Icons.home), ), onTap: () => Navigator.of(ctx).pop())); - Widget _buildCollectButton(WidgetModel model, BuildContext context) { - //监听 CollectBloc 伺机弹出toast - return BlocListener( - listener: (ctx, st) { - bool collected = st.widgets.contains(model); - String msg = - collected ? "收藏【${model.name}】组件成功!" : "已取消【${model.name}】组件收藏!"; - _showToast(ctx, msg, collected); - }, - child: FeedbackWidget( - onPressed: () => BlocProvider.of(context) - .add(ToggleLikeWidgetEvent(id: model.id)), - child: BlocBuilder( - builder: (_, s) => Padding( - padding: const EdgeInsets.only(right: 20.0), - child: Icon( - s.widgets.contains(model) - ? TolyIcon.icon_star_ok - : TolyIcon.icon_star_add, - size: 25, - ), - )), - )); - } + // 监听 LikeWidgetBloc 伺机弹出 toast + void _listenLikeStateChange(BuildContext context, LikeWidgetState state) { + bool collected = state.widgets.contains(currentWidgetModel); + String msg = collected + ? "收藏【${currentWidgetModel.name}】组件成功!" + : "已取消【${currentWidgetModel.name}】组件收藏!"; - _showToast(BuildContext ctx, String msg, bool collected) { Toast.toast( - ctx, + context, msg, duration: Duration(milliseconds: collected ? 1500 : 600), action: collected ? SnackBarAction( textColor: Colors.white, label: '收藏夹管理', - onPressed: () => Scaffold.of(ctx).openEndDrawer()) + onPressed: () => Scaffold.of(context).openEndDrawer()) : null, ); } - final List colors = Cons.tabColors; + // 根据 [LikeWidgetState ] 构建图标 + Widget _buildByLikeState(BuildContext context, LikeWidgetState state) { + bool liked = state.widgets.contains(currentWidgetModel); + return Padding( + padding: const EdgeInsets.only(right: 20.0), + child: Icon( + liked ? TolyIcon.icon_star_ok : TolyIcon.icon_star_add, + size: 25, + ), + ); + } + + + void _toggleLikeState(BuildContext context) { + BlocProvider.of(context) + .add(ToggleLikeWidgetEvent(id: currentWidgetModel.id)); + } Widget _buildNodes(List nodes, String name) { GlobalState globalState = BlocProvider.of(context).state; @@ -130,7 +134,6 @@ class _WidgetDetailPageState extends State { Future _whenPop(BuildContext context) async { if (Scaffold.of(context).isEndDrawerOpen) return true; - _modelStack.removeLast(); if (_modelStack.length > 0) { setState(() { @@ -167,7 +170,7 @@ class _WidgetDetailPageState extends State { context, state.links, ), - Divider(), + const Divider(), _buildNodes(state.nodes, state.widgetModel.name) ], ); @@ -192,8 +195,7 @@ class _WidgetDetailPageState extends State { children: links .map((e) => ActionChip( onPressed: () { - BlocProvider.of(context) - .add(FetchWidgetDetail(e)); + BlocProvider.of(context).add(FetchWidgetDetail(e)); setState(() { _modelStack.add(e); }); @@ -201,7 +203,7 @@ class _WidgetDetailPageState extends State { elevation: 2, shadowColor: Colors.orange, backgroundColor: Theme.of(context).primaryColor, - labelStyle: TextStyle(fontSize: 12, color: Colors.white), + labelStyle: const TextStyle(fontSize: 12, color: Colors.white), label: Text('${e.name}'), )) .toList(), @@ -228,13 +230,11 @@ class WidgetDetailTitle extends StatelessWidget { _buildRight(model), ], ), - Divider(), + const Divider(), ], )); } - final List colors = Cons.tabColors; - Widget _buildLeft(WidgetModel model) => Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start,