public TeamDetailScreen(
     TeamDetailScreenViewModel viewModel     = null,
     TeamDetailScreenActionModel actionModel = null,
     Key key = null
     ) : base(key: key)
 {
     this.viewModel   = viewModel;
     this.actionModel = actionModel;
 }
 public override Widget build(BuildContext context)
 {
     return(new StoreConnector <AppState, TeamDetailScreenViewModel>(
                converter: state => {
         var currentUserId = state.loginState.loginInfo.userId ?? "";
         var team = this.FetchTeam(this.teamId, state.teamState.teamDict, state.teamState.slugDict);
         var followMap = state.followState.followDict.ContainsKey(key: currentUserId)
                 ? state.followState.followDict[key: currentUserId]
                 : new Dictionary <string, bool>();
         return new TeamDetailScreenViewModel {
             teamLoading = state.teamState.teamLoading,
             teamArticleLoading = state.teamState.teamArticleLoading,
             team = team,
             teamId = this.teamId,
             articleDict = state.articleState.articleDict,
             followMap = followMap,
             currentUserId = state.loginState.loginInfo.userId ?? "",
             isLoggedIn = state.loginState.isLoggedIn
         };
     },
                builder: (context1, viewModel, dispatcher) => {
         var actionModel = new TeamDetailScreenActionModel {
             startFetchTeam = () => dispatcher.dispatch(new StartFetchTeamAction()),
             fetchTeam = () => dispatcher.dispatch <IPromise>(Actions.fetchTeam(this.teamId)),
             startFetchTeamArticle = () => dispatcher.dispatch(new StartFetchTeamArticleAction()),
             fetchTeamArticle = pageNumber =>
                                dispatcher.dispatch <IPromise>(Actions.fetchTeamArticle(viewModel.team.id, pageNumber)),
             mainRouterPop = () => dispatcher.dispatch(new MainNavigatorPopAction()),
             pushToLogin = () => dispatcher.dispatch(new MainNavigatorPushToAction {
                 routeName = MainNavigatorRoutes.Login
             }),
             pushToArticleDetail = id => dispatcher.dispatch(
                 new MainNavigatorPushToArticleDetailAction {
                 articleId = id
             }
                 ),
             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
                 });
             },
             pushToTeamFollower = teamId => dispatcher.dispatch(
                 new MainNavigatorPushToTeamFollowerAction {
                 teamId = teamId
             }
                 ),
             pushToTeamMember = teamId => dispatcher.dispatch(
                 new MainNavigatorPushToTeamMemberAction {
                 teamId = teamId
             }
                 ),
             startFollowTeam = () =>
                               dispatcher.dispatch(new StartFetchFollowTeamAction {
                 followTeamId = viewModel.team.id
             }),
             followTeam = teamId => dispatcher.dispatch <IPromise>(Actions.fetchFollowTeam(teamId)),
             startUnFollowTeam = () => dispatcher.dispatch(new StartFetchUnFollowTeamAction
             {
                 unFollowTeamId = viewModel.team.id
             }),
             unFollowTeam = teamId => dispatcher.dispatch <IPromise>(Actions.fetchUnFollowTeam(teamId)),
             shareToWechat = (type, title, description, linkUrl, imageUrl) => dispatcher.dispatch <IPromise>(
                 Actions.shareToWechat(type, title, description, linkUrl, imageUrl))
         };
         return new TeamDetailScreen(viewModel, actionModel);
     }
                ));
 }