public LeaderBoardDetailScreen(
     LeaderBoardDetailScreenViewModel viewModel     = null,
     LeaderBoardDetailScreenActionModel actionModel = null,
     Key key = null
     ) : base(key: key)
 {
     this.viewModel   = viewModel;
     this.actionModel = actionModel;
 }
        public override Widget build(BuildContext context)
        {
            return(new StoreConnector <AppState, LeaderBoardDetailScreenViewModel>(
                       converter: state => {
                var currentUserId = state.loginState.loginInfo.userId ?? "";
                var dict = this.type == LeaderBoardType.collection
                        ? state.leaderBoardState.collectionDict
                        : state.leaderBoardState.columnDict;
                var articleList = dict.ContainsKey(this.tagId)
                        ? dict[this.tagId]
                        : new List <string>();
                var collectedMap = state.loginState.isLoggedIn
                        ? state.favoriteState.collectedTagMap.ContainsKey(state.loginState.loginInfo.userId)
                            ? state.favoriteState.collectedTagMap[state.loginState.loginInfo.userId]
                            : new Dictionary <string, bool>()
                        : new Dictionary <string, bool>();
                var followedMap = state.loginState.isLoggedIn
                        ? state.followState.followDict.ContainsKey(state.loginState.loginInfo.userId)
                            ? state.followState.followDict[state.loginState.loginInfo.userId]
                            : new Dictionary <string, bool>()
                        : new Dictionary <string, bool>();
                var rankData =
                    state.leaderBoardState.rankDict.isNotEmpty() &&
                    state.leaderBoardState.rankDict.ContainsKey(this.tagId)
                            ? state.leaderBoardState.rankDict[this.tagId]
                            : null;
                var isCollected = false;
                var isFollowed = false;
                var isHost = false;
                if (rankData != null)
                {
                    isCollected = state.loginState.isLoggedIn && collectedMap.ContainsKey(rankData.itemId) &&
                                  collectedMap[rankData.itemId];
                    isFollowed = state.loginState.isLoggedIn && followedMap.ContainsKey(rankData.itemId) &&
                                 followedMap[rankData.itemId];
                    isHost = state.loginState.isLoggedIn &&
                             state.favoriteState.favoriteTagDict.isNotEmpty() &&
                             state.favoriteState.favoriteTagDict.ContainsKey(rankData.itemId) &&
                             state.favoriteState.favoriteTagDict[rankData.itemId].userId ==
                             state.loginState.loginInfo.userId;
                }

                return new LeaderBoardDetailScreenViewModel {
                    rankData = rankData,
                    type = this.type,
                    tagId = this.tagId,
                    articleList = articleList,
                    articleDict = state.articleState.articleDict,
                    userDict = state.userState.userDict,
                    teamDict = state.teamState.teamDict,
                    userArticleDict = state.articleState.userArticleDict,
                    isCollected = isCollected,
                    isFollowed = isFollowed,
                    isHost = isHost,
                    currentUserId = currentUserId,
                    isLoggedIn = state.loginState.isLoggedIn,
                    hasMore = state.leaderBoardState.detailHasMore,
                    loading = state.leaderBoardState.detailLoading,
                    collectLoading = state.leaderBoardState.detailCollectLoading,
                    favoriteTagDict = state.favoriteState.favoriteTagDict,
                    favoriteTagArticleDict = state.favoriteState.favoriteTagArticleDict
                };
            },
                       builder: (context1, viewModel, dispatcher) => {
                var actionModel = new LeaderBoardDetailScreenActionModel {
                    mainRouterPop = () => dispatcher.dispatch(new MainNavigatorPopAction()),
                    pushToLogin = () => dispatcher.dispatch(new MainNavigatorPushToAction {
                        routeName = MainNavigatorRoutes.Login
                    }),
                    pushToArticleDetail = id => dispatcher.dispatch(
                        new MainNavigatorPushToArticleDetailAction {
                        articleId = id
                    }
                        ),
                    startFetchDetailList = () => dispatcher.dispatch(new StartFetchLeaderBoardDetailAction()),
                    fetchDetailList = page =>
                                      dispatcher.dispatch <IPromise>(
                        Actions.fetchLeaderBoardDetail(this.tagId, page, this.type)),
                    pushToReport = (reportId, reportType) => dispatcher.dispatch(
                        new MainNavigatorPushToReportAction {
                        reportId = reportId,
                        reportType = reportType
                    }
                        ),
                    pushToBlock = articleId => {
                        dispatcher.dispatch(new BlockArticleAction {
                            articleId = articleId
                        });
                        dispatcher.dispatch(new DeleteArticleHistoryAction {
                            articleId = articleId
                        });
                    },
                    collectFavoriteTag =
                        (itemId, rankDataId) =>
                        dispatcher.dispatch <IPromise>(Actions.collectFavoriteTag(itemId, rankDataId)),
                    cancelCollectFavoriteTag = (myFavoriteId, itemId) =>
                                               dispatcher.dispatch <IPromise>(Actions.cancelCollectFavoriteTag(myFavoriteId, itemId)),
                    startFollowUser = followUserId => dispatcher.dispatch(new StartFollowUserAction {
                        followUserId = followUserId
                    }),
                    startUnFollowUser = userId =>
                                        dispatcher.dispatch(new StartUnFollowUserAction {
                        unFollowUserId = userId
                    }),
                    followUser = userId => dispatcher.dispatch <IPromise>(Actions.fetchFollowUser(userId)),
                    unFollowUser = userId => dispatcher.dispatch <IPromise>(Actions.fetchUnFollowUser(userId))
                };
                return new LeaderBoardDetailScreen(viewModel: viewModel, actionModel: actionModel);
            }
                       ));
        }