public override Widget build(BuildContext context) { var pageHeight = MediaQuery.of(context).size.height; const float minHeight = Header.Height + SearchBar.Height + Footer.Height; return(new Container( height: pageHeight, child: new SingleChildScrollView( child: new ScrollableOverlay( child: new Column( children: new List <Widget> { new Header(), new SearchBar(), new Container( constraints: new BoxConstraints( minHeight: minHeight < pageHeight ? pageHeight - minHeight : 0 ), padding: EdgeInsets.symmetric(vertical: 48f), color: new Color(0xffffffff), child: new Center( child: new Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: new List <Widget> { new Container( width: 512, height: 205, margin: EdgeInsets.only(bottom: 24f), child: new Image( image: new AssetImage("Images/404@3x") ) ), new RichText( text: new TextSpan( children: new List <TextSpan> { new TextSpan("抱歉,您所访问的页面已被"), new TextSpan("移除", style: EmStyle), new TextSpan("或"), new TextSpan("不存在", style: EmStyle), new TextSpan("。") }, style: new TextStyle( fontSize: 24f, color: new Color(0xffd8d8d8), height: 1.33333333333f.LineHeight(), fontWeight: FontWeight.w500 ) ) ), new Container( margin: EdgeInsets.only(top: 32f), child: new Button( onTap: () => LocationUtil.Go("/"), text: "返回主页" ) ) } ) ) ), new Footer(), } ) ) ) )); }
public override Widget build(BuildContext context) { var children = new List <Widget> { new Clickable( onTap: () => LocationUtil.Go($"/{_item.type.FirstCharToUpper()}/{_item.name}"), child: new Container( margin: EdgeInsets.only(top: 24f, left: 24f, right: 24f, bottom: 8f), child: new Text( _item.name, style: TitleTextStyle ) ) ) }; if (_highlight != null) { children.Add( new Clickable( onTap: () => LocationUtil.Go($"/{_item.type.FirstCharToUpper()}/{_item.name}"), child: new Container( child: new RichText( text: new TextSpan( children: _highlight ) ), margin: EdgeInsets.only(bottom: 24f, left: 24f, right: 24f) ) ) ); } if (_item.breadcrumbs != null && _item.breadcrumbs.Count != 0) { children.Add(Splitter); children.Add( new Container( height: 44f, padding: EdgeInsets.symmetric(horizontal: 24f), child: new Align( alignment: Alignment.centerLeft, child: new Breadcrumbs( _item.breadcrumbs, splitterStyle: BreadcrumbSplitterStyle, normalBreadcrumbStyle: BreadcrumbStyle, hoverBreadCrumbStyle: BreadcrumbHoverStyle ) ) ) ); } else { children.Add( new Container( height: 24f ) ); } return(new Container( decoration: ContainerDecoration, margin: EdgeInsets.only(bottom: 12f), child: new Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: children ) )); }
public override Widget build(BuildContext buildContext) { if (_loading) { return(new Container( child: new Center( child: new Loading( size: 48f ) ) )); } var markdownBuildCtx = new BuilderContext(_imageMetas, buildContext); _spanRecognizers?.ForEach(recognizer => recognizer.dispose()); var widgets = new List <Widget>(); widgets.AddRange(_tokens .Where(token => Mappings.ContainsKey(token.type)) .Select(token => Mappings[token.type].Invoke(token, markdownBuildCtx)) .Where(w => !(w is null)) .Select(w => new RepaintBoundary(child: w))); _spanRecognizers = markdownBuildCtx.SpanRecognizers; widgets.Insert(0, new Container( height: 64f, padding: EdgeInsets.only(bottom: 8f), decoration: new BoxDecoration( border: new Border( bottom: new BorderSide( color: new Color(0xffd8d8d8), width: 1f ) ) ), child: new Align( alignment: Alignment.bottomLeft, child: new Breadcrumbs( _breadcrumbs, normalBreadcrumbStyle: new TextStyle( fontSize: 16f, color: new Color(0xff979797) ), hoverBreadCrumbStyle: new TextStyle( fontSize: 16f, color: new Color(0xff979797), decoration: TextDecoration.underline ), splitterStyle: new TextStyle( fontSize: 16f, color: new Color(0xff979797) ) ) ) ) ); var linkButtons = new List <Widget>(); if (_prevLink != null) { linkButtons.Add( new Expanded( child: new Container( margin: EdgeInsets.only(right: 20), child: new Button( text: _prevLink.content ?? "", onTap: () => { if (!string.IsNullOrEmpty(_prevLink?.link)) { LocationUtil.Go( $"/Manual/{_prevLink?.link}"); } }, prefix: Icons.MaterialArrowBack ) ) ) ); } else { linkButtons.Add( new Expanded( flex: 1, child: new Container() ) ); // placeholder to use spaceBetween } if (_nextLink != null) { linkButtons.Add( new Expanded( child: new Container( margin: EdgeInsets.only(left: 20), child: new Button( text: _nextLink.content ?? "", onTap: () => { if (!string.IsNullOrEmpty(_nextLink.link)) { LocationUtil.Go( $"/Manual/{_nextLink.link}"); } }, suffix: Icons.MaterialArrowForward ) ) ) ); } else { linkButtons.Add( new Expanded( flex: 1, child: new Container() ) ); // placeholder to use spaceBetween } widgets.Add( new Container( margin: EdgeInsets.only(top: 32, bottom: 64), child: new Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: linkButtons ) ) ); var version = DocApp.of(buildContext).version; return(new Row( crossAxisAlignment: CrossAxisAlignment.start, children: new List <Widget> { new Expanded( child: new Stack( children: new List <Widget> { new Scroller( child: new SingleChildScrollView( controller: _scrollController, child: new ScrollableOverlay( child: new Column( children: new List <Widget> { new Container( constraints: new BoxConstraints( minHeight: MediaQuery.of(buildContext).size.height - Header.Height - SearchBar.Height - Footer.Height ), child: new Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: widgets) ), new Footer(style: Footer.Light, showSocials: false) } ) ) ) ), new ToTop(_scrollController, displayThreshold: 128f) } ) ), new MetaFields( markdownBuildCtx.PositionRecords, _scrollController, $"https://github.com/UnityTech/documentation-cn/blob/{version.unity_version}/Manual/md/{widget._title}.md" ) } )); }
public override Widget build(BuildContext buildContext) { var size = MediaQuery.of(context).size; var children = new List <Widget>(); var emptyKeyword = string.IsNullOrEmpty(_keyword); var mainAxisAlignment = _searching || emptyKeyword ? MainAxisAlignment.center : MainAxisAlignment.start; var crossAxisAlignment = emptyKeyword ? CrossAxisAlignment.center : CrossAxisAlignment.start; if (emptyKeyword) { children.Add( new Column( crossAxisAlignment: CrossAxisAlignment.start, children: new List <Widget> { new Container( width: 253, height: 334, margin: EdgeInsets.only(bottom: 24f), decoration: new BoxDecoration( image: new DecorationImage( image: new AssetImage( "Images/search@3x" ), fit: BoxFit.cover ) ) ), new Text( "请输入关键词搜索", style: new TextStyle( fontSize: 24f, fontWeight: FontWeight.w500, color: new Color(0xff979797), height: 1.33333333f.LineHeight() ) ) } ) ); } else if (_searching) { children.Add( new Container( child: new Center( child: new Loading( size: 48f ) ) ) ); } else { if (_results != null) { children.Add( new Container( height: 24f, child: new Align( alignment: Alignment.centerLeft, child: new Text( _results.total == 0 ? $"您搜索的 “{_keyword}” 暂无匹配的结果" : $"您搜索的“{_keyword}”共有{_results.total}个匹配的结果", style: new TextStyle( fontSize: 16f, fontWeight: FontWeight.w500 ) ) ), margin: EdgeInsets.only(bottom: 16f) ) ); if (_results.items != null) { children.AddRange(_results.items .Select(searchResultItem => new SearchResultCard(searchResultItem)) .Cast <Widget>()); } if (_results.pages != null) { children.Add( new Container( margin: EdgeInsets.only(top: 16f), child: new Pager( pages: _results.pages, currentPage: _results.currentPage, totalPages: _results.totalPages, onPageChanged: page => LocationUtil.Go( $"/Search/{_filterType}/{HttpUtility.UrlEncode(_keyword)}/{page}") ) ) ); } } } var pageHeight = MediaQuery.of(context).size.height; const float minHeight = Header.Height + SearchBar.Height + Footer.Height; return(new Container( constraints: new BoxConstraints( minHeight: size.height ), width: size.width, child: new SingleChildScrollView( child: new ScrollableOverlay( child: new Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: new List <Widget> { new Header(), new SearchBar(), new Container( constraints: new BoxConstraints( minHeight: minHeight < pageHeight ? pageHeight - minHeight : 0 ), padding: EdgeInsets.only(top: 16f, right: 48f, bottom: 48f, left: 48f), color: new Color(0xfff2f1f2), child: new Column( crossAxisAlignment: crossAxisAlignment, mainAxisAlignment: mainAxisAlignment, children: children ) ), new Footer(), } ) ) ) )); }
public override Widget build(BuildContext context) { return(new Expanded( child: new Clickable( onTap: () => LocationUtil.Go(_link), child: new Container( height: Height, margin: EdgeInsets.only(left: 12.0f, right: 12.0f), child: new Column( crossAxisAlignment: CrossAxisAlignment.start, children: new List <Widget> { new Container( height: 32.0f, margin: EdgeInsets.only(bottom: 16.0f), child: new Align( alignment: Alignment.centerLeft, child: new Text( _title, style: new TextStyle( fontSize: 24.0f, fontWeight: FontWeight.w500, color: TitleTextColor ) ) ) ), new Expanded( child: new Container( padding: EdgeInsets.all(24.0f), decoration: new BoxDecoration( image: new DecorationImage( image: new AssetImage(_imageLocation), fit: BoxFit.cover ) ), child: new Column( crossAxisAlignment: CrossAxisAlignment.start, children: new List <Widget> { new Container( margin: EdgeInsets.only(top: 16.0f), child: new Text( _latestVersion, style: new TextStyle( fontSize: 14.0f, fontWeight: FontWeight.w500, height: 1.42857142857f.LineHeight(), color: new Color(0xffffffff) ) ) ), new Container( margin: EdgeInsets.only(top: 4.0f), child: new Text( _description, style: new TextStyle( fontSize: 24.0f, height: 1.33333333333f.LineHeight(), fontWeight: FontWeight.w500, color: new Color(0xffffffff) ) ) ), new Container( margin: EdgeInsets.only(top: 56.0f), child: new Text( _description, style: new TextStyle( fontSize: 16.0f, height: 1.5f.LineHeight(), fontWeight: FontWeight.w400, color: new Color(0xffffffff) ) ) ) } ) ) ), } ) ) ) )); }