Widget flexColumn() { var image = Image.network( "https://tse3.mm.bing.net/th?id=OIP.XOAIpvR1kh-CzISe_Nj9GgHaHs&pid=Api", width: 100, height: 100 ); List <Widget> columnImages = new List <Widget>(); columnImages.Add(image); columnImages.Add(image); columnImages.Add(image); var column = new Column( textDirection: null, textBaseline: null, key: null, mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, verticalDirection: VerticalDirection.down, children: columnImages ); return(column); }
public override Widget build(BuildContext context) { if (this.type == OwnerType.team) { return(this._buildTeamAvatar()); } var avatarUrl = this.user.avatar ?? ""; var fullName = this.user.fullName ?? this.user.name; var result = _extractName(fullName) ?? ""; return(new ClipRRect( borderRadius: BorderRadius.circular(this.size / 2), child: avatarUrl.isEmpty() ? new Container( child: new _Placeholder(result, this.size) ) : new Container( width: this.size, height: this.size, color: new Color(0xFFD8D8D8), child: Image.network(avatarUrl, fit: BoxFit.cover) ) )); }
public override Widget build(BuildContext context) { Widget child; if (this.imageUrl == null || this.imageUrl.Length <= 0) { child = new Container( width: this.width, height: this.height, color: new Color(0xFFD8D8D8) ); } else { child = new Container( width: this.width, height: this.height, color: new Color(0xFFD8D8D8), child: Image.network(this.imageUrl, width: this.width, height: this.height, fit: this.fit ) ); } return(new ClipRRect( borderRadius: BorderRadius.all(this.borderRadius == null ? 0 : (float)this.borderRadius), child: child )); }
public override Widget build(BuildContext context) { var imageSimplePath = "test.gif"; var absolutePath = getAbsoluteImagePathForApp(imageSimplePath); return(new Container( child: new Column( children: new List <Widget> { new Lottie("wine.json", size: new Size(100, 100)), new Container( width: 100, height: 100, decoration: new BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(8)) ), child: Image.file(absolutePath, gaplessPlayback: true, isAbsolutePath: true) ), new Container(width: 50f, height: 50f, child: Image.file(imageSimplePath, gaplessPlayback: true)), new Container( width: 200, height: 100, decoration: new BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(8)) ), child: Image.network( "https://unity-cn-cms-prd-1254078910.cos.ap-shanghai.myqcloud.com/assetstore-cms-media/img-7dfe215f-0075-4f9c-9b5a-be5ee88b866b", gaplessPlayback: true) ) } ) )); }
Widget stack() { var image = new Container( width: 150, height: 150, child: Image.network( "https://tse3.mm.bing.net/th?id=OIP.XOAIpvR1kh-CzISe_Nj9GgHaHs&pid=Api", width: 100, height: 100 ) ); var text = new Container( width: 150, height: 150, child: new Text("TTTTTTTTTTTTTTTTEST") ); List <Widget> rowImages = new List <Widget>(); rowImages.Add(image); rowImages.Add(text); return(new Stack( children: rowImages, alignment: Alignment.center )); }
Widget container() { var image = Image.network( "https://tse3.mm.bing.net/th?id=OIP.XOAIpvR1kh-CzISe_Nj9GgHaHs&pid=Api", width: 100, height: 100, repeat: ImageRepeat.repeatX ); var container = new Container( width: 200, height: 200, margin: EdgeInsets.all(30.0f), padding: EdgeInsets.all(15.0f), child: image, decoration: new BoxDecoration( color: CLColors.white, borderRadius: BorderRadius.all(30), gradient: new LinearGradient(colors: new List <Color> { CLColors.blue, CLColors.red, CLColors.green }) ) ); return(container); }
// _buildImage, buildcheckbox, build bullet, buildTablecell Widget _buildImage(string src) { var parts = src.Split('#'); if (parts.isEmpty()) { return(new SizedBox()); } var path = parts.first(); float width = 0, height = 0; if (parts.Length == 2) { var dimensions = parts.last().Split('x'); if (dimensions.Length == 2) { width = float.Parse(dimensions[0]); height = float.Parse(dimensions[1]); } } var uri = new Uri(path); Widget child; if (uri.Scheme == "http" || uri.Scheme == "https") { child = Image.network(uri.ToString(), null, 1); } else if (uri.Scheme == "data") { // todo child = this._handleDataSchemeUri(uri, width, height); } else if (uri.Scheme == "resource") { //TODO: child = Image.asset(path.Substring(9), null, null, width, height); } else { string filePath = this.imageDirectory == null ? uri.ToString() : Path.Combine(this.imageDirectory, uri.ToString()); child = Image.file(filePath, null, 1, width, height); } if (this._linkHandlers.isNotEmpty()) { TapGestureRecognizer recognizer = this._linkHandlers.last() as TapGestureRecognizer; return(new GestureDetector(null, child, null, null, recognizer.onTap)); } else { return(child); } }
private Widget _buildAvatar() { return(new Center( child: new Container( width: 256, height: 256, child: Image.network(Datas.AppManager.Instance.GetUserData.AvatarUrl) ) )); }
Widget _buildBanner(BuildContext context) { return(new Container( height: 450, color: CLColors.white, child: Image.network( "https://d2ujflorbtfzji.cloudfront.net/banner/5c57178c-4be6-4903-953b-85125bfb7154.jpg", fit: BoxFit.cover ) )); }
Widget _buildBanner(BuildContext context) { return(new Container( height: 450, color: CLColors.white, child: Image.network( "https://assetstorev1-prd-cdn.unity3d.com/banner/9716cc07-748c-43cc-8809-10113119c97a.jpg", fit: BoxFit.cover, filterMode: FilterMode.Bilinear ) )); }
public override Widget build(BuildContext context) { var avatarSize = this.hasWhiteBorder ? this.size : this.size - this.whiteBorderWidth * 2; var border = this.hasWhiteBorder ? Border.all( color: CColors.White, width: this.whiteBorderWidth ) : null; // fix Android 9 http request error var httpsUrl = this.avatarUrl.httpToHttps(); return(new Container( width: this.size, height: this.size, decoration: new BoxDecoration( borderRadius: BorderRadius.circular(this.avatarShape == AvatarShape.circle ? this.size / 2 : DefaultRectCorner), border: border ), child: new ClipRRect( borderRadius: BorderRadius.circular(this.avatarShape == AvatarShape.circle ? avatarSize : this.hasWhiteBorder ? DefaultRectCorner / 2 : DefaultRectCorner), child: this.avatarUrl.isEmpty() ? new Container( child: new _Placeholder( this.id ?? "", this.fullName ?? "", size: avatarSize ) ) : new Container( width: avatarSize, height: avatarSize, color: CColors.LoadingGrey, child: this.useCachedNetworkImage ? (Widget) new CachedNetworkImage(src: httpsUrl) : Image.network(src: httpsUrl) ) ) )); }
public override Widget build(BuildContext context) { var headers = this.widget.headers ?? new Dictionary <string, string> { { HttpManager.COOKIE, HttpManager.getCookie() }, { "ConnectAppVersion", Config.versionNumber }, { "X-Requested-With", "XmlHttpRequest" } }; var pageView = new PageView( controller: this.widget.controller, onPageChanged: index => { this.setState(() => { this.currentIndex = index; }); }, children: this.widget.urls.Select <string, Widget>(url => { return(this.widget.useCachedNetworkImage ? CachedNetworkImageProvider.cachedNetworkImage( url, fit: BoxFit.contain, headers: headers) : Image.network(url, fit: BoxFit.contain, headers: headers)); }).ToList()); return(new GestureDetector( onTap: () => { StoreProvider.store.dispatcher.dispatch(new MainNavigatorPopAction()); }, onLongPress: this._pickImage, child: new Container( color: CColors.Black, child: new Stack( alignment: Alignment.center, children: new List <Widget> { pageView, new Positioned( bottom: 30, child: new Container( height: 40, padding: EdgeInsets.symmetric(0, 24), alignment: Alignment.center, decoration: new BoxDecoration( color: Color.fromRGBO(0, 0, 0, 0.5f), borderRadius: BorderRadius.all(20) ), child: new Text($"{this.currentIndex + 1}/{this.widget.urls.Count}", style: CTextStyle.PLargeWhite.copyWith(height: 1)) ) ) })))); }
Widget _buildTeamAvatar() { var avatarUrl = this.team.avatar ?? ""; var name = this.team.name; var result = _extractName(name) ?? ""; if (avatarUrl.Length <= 0) { return(new _Placeholder(result, this.size)); } return(new Container( width: this.size, height: this.size, color: new Color(0xFFD8D8D8), child: Image.network(avatarUrl) )); }
public override Widget build(BuildContext context) { var avatarSize = this.hasWhiteBorder ? this.size : this.size - this.whiteBorderWidth * 2; var border = this.hasWhiteBorder ? Border.all( color: CColors.White, width: this.whiteBorderWidth ) : null; return(new Container( width: this.size, height: this.size, decoration: new BoxDecoration( borderRadius: BorderRadius.circular(this.avatarShape == AvatarShape.circle ? this.size / 2 : DefaultRectCorner), border: border ), child: new ClipRRect( borderRadius: BorderRadius.circular(this.avatarShape == AvatarShape.circle ? avatarSize : this.hasWhiteBorder ? DefaultRectCorner / 2 : DefaultRectCorner), child: this.avatarUrl.isEmpty() ? new Container( child: new _Placeholder( this.id ?? "", this.fullName ?? "", size: avatarSize ) ) : new Container( width: avatarSize, height: avatarSize, color: CColors.AvatarLoading, child: Image.network(src: this.avatarUrl) ) ) )); }
Widget _buildHeadImage(Widget child) { var eventObj = this.widget.eventObj; var imageUrl = eventObj.background != null ? eventObj.background : ""; return(new Container( color: new Color(0xFFD8D8D8), child: new AspectRatio( aspectRatio: 16.0f / 9.0f, child: new Stack( fit: StackFit.expand, children: new List <Widget> { Image.network( imageUrl, fit: BoxFit.cover ), child } ) ) )); }
public override Widget build(BuildContext context) { return(new Container( child: new Column( children: new List <Widget> { AnimatedLottie.file("wine.json", frame: frame, curve: Curves.linear), new Container( width: 100, height: 100, decoration: new BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(8)) ), child: Image.file("test.gif", gaplessPlayback: true) ), new Container( width: 200, height: 100, decoration: new BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(8)) ), child: Image.network( "https://unity-cn-cms-prd-1254078910.cos.ap-shanghai.myqcloud.com/assetstore-cms-media/img-7dfe215f-0075-4f9c-9b5a-be5ee88b866b", gaplessPlayback: true) ), new GestureDetector( onTap: () => { setState(() => { frame += 1; }); }, child: new Container( color: Color.black, padding: EdgeInsets.symmetric(20, 20), child: new Text("Click Me", style: new TextStyle(fontWeight: FontWeight.w700)) ) ) } ) )); }
public override Widget build(BuildContext context) { Widget child; if (this.imageUrl.isEmpty()) { child = new Container( width: this.width, height: this.height, color: this.color ); } else { child = new Container( width: this.width, height: this.height, color: this.color, child: !this.useCachedNetworkImage ? Image.network( src: this.imageUrl, width: this.width, height: this.height, fit: this.fit ) : (Widget) new CachedNetworkImage( src: this.imageUrl, fit: this.fit ) ); } return(new ClipRRect( borderRadius: BorderRadius.all(this.borderRadius ?? 0), child: child )); }
public override Widget build(BuildContext context) { Widget child; if (this.imageUrl == null || this.imageUrl.Length <= 0) { child = new Container( width: this.width, height: this.height, color: new Color(0xFFD8D8D8) ); } else { child = new Container( width: this.width, height: this.height, color: new Color(0xFFD8D8D8), child: !this.useCachedNetworkImage ? Image.network( src: this.imageUrl, width: this.width, height: this.height, fit: this.fit ) : CachedNetworkImageProvider.cachedNetworkImage( src: this.imageUrl, fit: this.fit ) ); } return(new ClipRRect( borderRadius: BorderRadius.all(this.borderRadius ?? 0), child: child )); }
static Widget _Atomic(BuildContext context, string type, string contentType, string title, string dataUrl, _OriginalImage originalImage, string videoStatus, string videoPoster, string url, string downloadUrl, string attachmentId, Action <string> openUrl, Action <string, bool, int> playVideo, Action loginAction, bool needUpdate, int limitSeconds, Action <string> browserImage = null) { if (type == "ATTACHMENT" && contentType != "video/mp4") { return(new Container()); } var playButton = Positioned.fill( new Container() ); if (type == "VIDEO" || type == "ATTACHMENT") { playButton = Positioned.fill( new Center( child: videoStatus == "completed" ? UserInfoManager.isLogin() ? new CustomButton( onPressed: () => { if (type == "ATTACHMENT") { if (url.isEmpty()) { playVideo(downloadUrl, false, 0); } else { playVideo($"{Config.apiAddress}/playlist/{attachmentId}", needUpdate, limitSeconds); } } else { if (url == null || url.Length <= 0) { return; } openUrl(url); } }, child: new Container( width: 60, height: 60, decoration: new BoxDecoration( CColors.H5White, borderRadius: BorderRadius.all(30) ), child: new Icon( Icons.play_arrow, size: 45, color: CColors.Icon ) ) ) : (Widget) new GestureDetector( onTap: () => { loginAction(); }, child: new Container( color: CColors.Black.withOpacity(0.5f), alignment: Alignment.center, child: new Text("Login to view this video", style: CTextStyle.PXLargeWhite.merge( new TextStyle(decoration: TextDecoration.underline))) )) : new Container( color: CColors.Black.withOpacity(0.5f), alignment: Alignment.center, child: new Text("Video is processing, try it later", style: CTextStyle.PXLargeWhite) ) ) ); } var attachWidth = MediaQuery.of(context).size.width - 32; var attachHeight = attachWidth * 9 / 16; if (type == "ATTACHMENT") { return(new Container( color: CColors.White, padding: EdgeInsets.only(bottom: 32), alignment: Alignment.center, child: new Container( padding: EdgeInsets.only(16, right: 16), child: new Column( children: new List <Widget> { new Stack( children: new List <Widget> { new Container( width: attachWidth, height: attachHeight, color: CColors.Black, child: Image.network( videoPoster, fit: BoxFit.cover ) ), playButton } ) } ) ) )); } var width = originalImage.width < MediaQuery.of(context).size.width - 32 ? originalImage.width : MediaQuery.of(context).size.width - 32; var height = width * originalImage.height / originalImage.width; var imageUrl = originalImage.url; if (imageUrl.isNotEmpty()) { imageUrl = imageUrl.EndsWith(".gif") || imageUrl.EndsWith(".png") ? imageUrl : CImageUtils.SuitableSizeImageUrl(MediaQuery.of(context).size.width, imageUrl); imageUrls.Add(imageUrl); } var nodes = new List <Widget> { new Stack( children: new List <Widget> { new GestureDetector( child: new Hero( tag: imageUrl, child: new PlaceholderImage( imageUrl: imageUrl, width: width, height: height, fit: BoxFit.cover, useCachedNetworkImage: true ) ), onTap: () => { if (dataUrl.isNotEmpty()) { openUrl(obj: dataUrl); } else { browserImage?.Invoke(imageUrl); } } ), playButton } ) }; if (title != null) { var imageTitle = new Container( decoration: new BoxDecoration( border: new Border( bottom: new BorderSide( CColors.Separator, 2 ) ) ), child: new Container( margin: EdgeInsets.only(4, 8, 4, 4), child: new Text( title, style: CTextStyle.PRegularBody4 ) ) ); nodes.Add(imageTitle); } return(new Container( color: CColors.White, padding: EdgeInsets.only(bottom: 32), alignment: Alignment.center, child: new Container( padding: EdgeInsets.only(16, right: 16), child: new Column( children: nodes ) ) )); }
Widget _parseNode(HtmlNode node) { if (this.customRender != null) { Widget customWidget = this.customRender(node, this._parseNodeList(node.ChildNodes)); if (customWidget != null) { return(customWidget); } } if (node.NodeType is HtmlNodeType.Element) { if (!_supportedElements.Contains(node.Name)) { return(new Container()); } switch (node.Name) { case "a": return(new GestureDetector( child: DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: this.linkStyle ), onTap: () => { if (node.Attributes.Contains("href") && this.onLinkTap != null) { string url = node.Attributes["href"].Value; this.onLinkTap(url); } })); case "abbr": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( decoration: TextDecoration.underline, decorationStyle: TextDecorationStyle.solid ) )); case "acronym": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( decoration: TextDecoration.underline, decorationStyle: TextDecorationStyle.solid ) )); case "address": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontStyle: FontStyle.italic ) )); case "article": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "aside": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "b": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontWeight: FontWeight.bold ) )); case "bdi": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "bdo": if (node.Attributes["dir"] != null) { return(new Directionality( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), textDirection: node.Attributes["dir"].Value == "rtl" ? TextDirection.rtl : TextDirection.ltr )); } //Direction attribute is required, just render the text normally now. return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "big": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontSize: 20.0f ) )); case "blockquote": return(new Padding( padding: EdgeInsets.fromLTRB(40.0f, this.blockSpacing, 40.0f, this.blockSpacing), child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ) )); case "body": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "br": if (this._isNotFirstBreakTag(node)) { return(new Container(width: this.width, height: this.blockSpacing)); } return(new Container(width: this.width)); case "caption": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, alignment: WrapAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "center": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes), alignment: WrapAlignment.center ))); case "cite": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontStyle: FontStyle.italic ) )); case "code": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontFamily: "monospace" ) )); case "data": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "dd": return(new Padding( padding: EdgeInsets.only(left: 40.0f), child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ))); case "del": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( decoration: TextDecoration.lineThrough ) )); case "dfn": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontStyle: FontStyle.italic ) )); case "div": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "dl": return(new Padding( padding: EdgeInsets.only(top: this.blockSpacing, bottom: this.blockSpacing), child: new Column( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.start ))); case "dt": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "em": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontStyle: FontStyle.italic ) )); case "figcaption": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "figure": return(new Padding( padding: EdgeInsets.fromLTRB(40.0f, this.blockSpacing, 40.0f, this.blockSpacing), child: new Column( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.center ))); case "font": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "footer": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "h1": return(DefaultTextStyle.merge( child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ), style: new TextStyle( fontSize: 28.0f, fontWeight: FontWeight.bold ) )); case "h2": return(DefaultTextStyle.merge( child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ), style: new TextStyle( fontSize: 21.0f, fontWeight: FontWeight.bold ) )); case "h3": return(DefaultTextStyle.merge( child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ), style: new TextStyle( fontSize: 16.0f, fontWeight: FontWeight.bold ) )); case "h4": return(DefaultTextStyle.merge( child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ), style: new TextStyle( fontSize: 14.0f, fontWeight: FontWeight.bold ) )); case "h5": return(DefaultTextStyle.merge( child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ), style: new TextStyle( fontSize: 12.0f, fontWeight: FontWeight.bold ) )); case "h6": return(DefaultTextStyle.merge( child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ), style: new TextStyle( fontSize: 10.0f, fontWeight: FontWeight.bold ) )); case "header": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "hr": return(new Padding( padding: EdgeInsets.only(top: 7.0f, bottom: 7.0f), child: new Divider(height: 1.0f, color: Colors.black38) )); case "i": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontStyle: FontStyle.italic ) )); case "img": return(new Builder( builder: (BuildContext context) => { if (this.showImages) { if (node.Attributes["src"] != null) { if (node.Attributes["src"].Value.StartsWith("data:image") && node.Attributes["src"].Value.Contains("base64,")) { return Image.memory(Convert.FromBase64String( node.Attributes["src"].Value.Split(new string[] { "base64," }, StringSplitOptions.None)[1].Trim())); } return Image.network(node.Attributes["src"].Value); } else if (node.Attributes["alt"] != null) { //Temp fix for https://github.com/flutter/flutter/issues/736 if (node.Attributes["alt"].Value.EndsWith(" ")) { return new Container( padding: EdgeInsets.only(right: 2.0f), child: new Text(node.Attributes["alt"].Value)); } else { return new Text(node.Attributes["alt"].Value); } } } return new Container(); } )); case "ins": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( decoration: TextDecoration.underline ) )); case "kbd": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontFamily: "monospace" ) )); case "li": string type = node.ParentNode.Name; // Parent type; usually ol or ul EdgeInsets markPadding = EdgeInsets.symmetric(horizontal: 4.0f); Widget mark; switch (type) { case "ul": mark = new Container(child: new Text("•"), padding: markPadding); break; case "ol": int index = node.ParentNode.ChildNodes.IndexOf(node) + 1; mark = new Container(child: new Text($"{index}."), padding: markPadding); break; default: //Fallback to middle dot mark = new Container(width: 0.0f, height: 0.0f); break; } return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: new List <Widget> { mark, new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes)) } ) )); case "main": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "mark": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( color: Colors.black, background: this._getPaint(Colors.yellow) ) )); case "nav": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "noscript": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, alignment: WrapAlignment.start, children: this._parseNodeList(node.ChildNodes) ) )); case "ol": return(new Column( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.start )); case "p": return(new Padding( padding: EdgeInsets.only(top: this.blockSpacing, bottom: this.blockSpacing), child: new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, alignment: WrapAlignment.start, children: this._parseNodeList(node.ChildNodes) ) ) )); case "pre": return(new Padding( padding: EdgeInsets.all(this.blockSpacing), child: DefaultTextStyle.merge( child: new Text(node.InnerHtml), style: new TextStyle( fontFamily: "monospace" ) ) )); case "q": List <Widget> children = new List <Widget>(); children.Add(new Text("\"")); children.AddRange(this._parseNodeList(node.ChildNodes)); children.Add(new Text("\"")); return(DefaultTextStyle.merge( child: new Wrap( children: children ), style: new TextStyle( fontStyle: FontStyle.italic ) )); case "rp": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "rt": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "ruby": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "s": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( decoration: TextDecoration.lineThrough ) )); case "samp": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontFamily: "monospace" ) )); case "section": return(new Container( width: this.width, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "small": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontSize: 10.0f ) )); case "span": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "strike": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( decoration: TextDecoration.lineThrough ) )); case "strong": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontWeight: FontWeight.bold ) )); case "sub": case "sup": //Use builder to capture the parent font to inherit the font styles return(new Builder(builder: (BuildContext context) => { DefaultTextStyle parent = DefaultTextStyle.of(context); TextStyle parentStyle = parent.style; var painter = new TextPainter( text: new TextSpan( text: node.InnerText, style: parentStyle ), textDirection: TextDirection.ltr); painter.layout(); //print(painter.size); //Get the height from the default text var height = painter.size.height * 1.35f; //compute a higher height for the text to increase the offset of the Positioned text painter = new TextPainter( text: new TextSpan( text: node.InnerText, style: parentStyle.merge(new TextStyle( fontSize: parentStyle.fontSize * RichTextParserUtils.OFFSET_TAGS_FONT_SIZE_FACTOR)) ), textDirection: TextDirection.ltr); painter.layout(); //print(painter.size); //Get the width from the reduced/positioned text var width = painter.size.width; //print("Width: $width, Height: $height"); return DefaultTextStyle.merge( child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: new List <Widget> { new Stack( fit: StackFit.loose, children: new List <Widget> { //The Stack needs a non-positioned object for the next widget to respect the space so we create //a sized box to fill the required space new SizedBox( width: width, height: height ), DefaultTextStyle.merge( child: new Positioned( child: new Wrap(children: this._parseNodeList(node.ChildNodes)), bottom: node.Name == "sub" ? 0 : (int?)null, top: node.Name == "sub" ? (int?)null : 0 ), style: new TextStyle( fontSize: parentStyle.fontSize * RichTextParserUtils.OFFSET_TAGS_FONT_SIZE_FACTOR) ) } ) } ) ); })); case "table": return(new Column( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.start )); case "tbody": return(new Column( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.start )); case "td": int colspan = 1; if (node.Attributes["colspan"] != null) { int.TryParse(node.Attributes["colspan"].Value, out colspan); } return(new Expanded( flex: colspan, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: this._parseNodeList(node.ChildNodes) ) )); case "template": //Not usually displayed in HTML return(new Container()); case "tfoot": return(new Column( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.start )); case "th": int _colspan = 1; if (node.Attributes["colspan"] != null) { int.TryParse(node.Attributes["colspan"].Value, out _colspan); } return(DefaultTextStyle.merge( child: new Expanded( flex: _colspan, child: new Wrap( crossAxisAlignment: WrapCrossAlignment.center, alignment: WrapAlignment.center, children: this._parseNodeList(node.ChildNodes) ) ), style: new TextStyle( fontWeight: FontWeight.bold ) )); case "thead": return(new Column( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.start )); case "time": return(new Wrap( children: this._parseNodeList(node.ChildNodes) )); case "tr": return(new Row( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.center )); case "tt": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontFamily: "monospace" ) )); case "u": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( decoration: TextDecoration.underline ) )); case "ul": return(new Column( children: this._parseNodeList(node.ChildNodes), crossAxisAlignment: CrossAxisAlignment.start )); case "var": return(DefaultTextStyle.merge( child: new Wrap( children: this._parseNodeList(node.ChildNodes) ), style: new TextStyle( fontStyle: FontStyle.italic ) )); } } else if (node.NodeType is HtmlNodeType.Text) { //We don't need to worry about rendering extra whitespace if (node.InnerText.Trim() == "" && node.InnerText.IndexOf(" ") == -1) { return(new Wrap()); } if (node.InnerText.Trim() == "" && node.InnerText.IndexOf(" ") != -1) { (node as HtmlTextNode).Text = " "; } string finalText = this.trimStringHtml(node.InnerText); //Temp fix for https://github.com/flutter/flutter/issues/736 if (finalText.EndsWith(" ")) { return(new Container( padding: EdgeInsets.only(right: 2.0f), child: new Text(finalText))); } else { return(new Text(finalText)); } } return(new Wrap()); }
public override Widget build(BuildContext context) { var card = new Container( margin: EdgeInsets.only(right: 45), child: new Container( child: new Column( children: new List <Widget> { new Container( decoration: new BoxDecoration( color: CLColors.white, borderRadius: BorderRadius.only(topLeft: 3, topRight: 3) ), width: 200, height: 124, child: Image.network( this.imageSrc, fit: BoxFit.fill ) ), new Container( color: CLColors.white, width: 200, height: 86, padding: EdgeInsets.fromLTRB(14, 12, 14, 8), child: new Column( crossAxisAlignment: CrossAxisAlignment.baseline, children: new List <Widget> { new Container( height: 18, padding: EdgeInsets.only(top: 3), child: new Text(this.category, style: new TextStyle( fontSize: 11, color: CLColors.text5 ) ) ), new Container( height: 20, padding: EdgeInsets.only(top: 2), child: new Text(this.name, style: new TextStyle( fontSize: 14, color: CLColors.text6 ) ) ), new Container( height: 22, padding: EdgeInsets.only(top: 4), child: new Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: new List <Widget> { new Container( child: new Row( children: new List <Widget> { new Container( margin: EdgeInsets.only(right: 10), child: new Text( "$" + this.price, style: new TextStyle( fontSize: 14, color: CLColors.text7, decoration: TextDecoration.lineThrough ) ) ), new Container( child: new Text( "$" + this.priceDiscount, style: new TextStyle( fontSize: 14, color: CLColors.text8 ) ) ) }) ), this.showBadge ? new Container( width: 80, height: 18, color: CLColors.black, child: new Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: new List <Widget> { new Text( "Plus/Pro", style: new TextStyle( fontSize: 11, color: CLColors.white ) ) } ) ) : new Container() } ) ) } ) ) } ) ) ); return(card); }
Widget _buildBlogger(User user, string resetTitle) { UserType userType = UserType.unFollow; if (!this.isLoggedIn) { userType = UserType.unFollow; } else { if (UserInfoManager.getUserInfo().userId == user.id) { userType = UserType.me; } else if (user.followUserLoading ?? false) { userType = UserType.loading; } else if (this.followMap.ContainsKey(key: user.id)) { userType = UserType.follow; } } return(new GestureDetector( onTap: () => this.onPressItem?.Invoke(text: user.id), child: new Container( width: 160, margin: EdgeInsets.all(6), decoration: new BoxDecoration( color: CColors.White, borderRadius: BorderRadius.all(6), boxShadow: new List <BoxShadow> { new BoxShadow( CColors.Black.withOpacity(0.08f), blurRadius: 10, spreadRadius: 1.0f ) } ), child: new ClipRRect( borderRadius: BorderRadius.all(6), child: new Column( children: new List <Widget> { new Container( height: 88, color: CColorUtils.GetSpecificDarkColorFromId(id: user.id), child: new Stack( fit: StackFit.expand, children: new List <Widget> { user.coverImage.isNotEmpty() ? Image.network(user.coverImage, fit: BoxFit.fill) : Image.asset( "image/blogger-avatar-pattern", fit: BoxFit.fill ), Positioned.fill( new Center( child: Avatar.User(user: user, 64, true) ) ) } ) ), new Padding( padding: EdgeInsets.only(16, 16, 16, 4), child: new Text(data: user.fullName, style: CTextStyle.PXLargeMedium, maxLines: 1) ), new Text( $"粉丝{user.followCount ?? 0} • 文章{user.articleCount ?? 0}", style: CTextStyle.PSmallBody4 ), new Text(resetTitle ?? "", style: CTextStyle.PSmallBody4), new Padding( padding: EdgeInsets.only(top: 12), child: new FollowButton( userType: userType, () => this._onFollow(userType: userType, userId: user.id) ) ) } ) ) ) )); }
Widget _buildImage(string src) { string[] parts = src.Split('#'); if (parts.isEmpty()) return SizedBox.expand(); string path = parts.first(); float? width = null, height = null; if (parts.Length == 2) { var dimensions = parts.last().Split('x'); if (dimensions.Length == 2) { width = float.Parse(dimensions[0]); height = float.Parse(dimensions[1]); } } Uri uri; Widget child = null; if (Uri.TryCreate(src, UriKind.RelativeOrAbsolute, out uri) && uri.IsAbsoluteUri) { if (uri.Scheme == "http" || uri.Scheme == "https") { child = Image.network(src: uri.ToString(), scale: 1, width: width, height: height); } else if (uri.Scheme == "data") { child = _handleDataSchemeUri(uri, width, height); } else if (uri.Scheme == "resource") { child = Image.asset(path.Substring(9), scale: 1, width: width, height: height); } else if (uri.Scheme == "file") { child = Image.file(file: uri.ToString(), scale: 1, width: width, height: height); } } else { if (!string.IsNullOrEmpty(imageDirectory)) { if (imageDirectory.StartsWith("http")) { uri = new Uri(new Uri(imageDirectory), uri); child = Image.network(src: uri.ToString(), scale: 1, width: width, height: height); } else { child = Image.file(file: System.IO.Path.Combine(imageDirectory, uri.ToString()), scale: 1, width: width, height: height); } } else { child = Image.file(file: uri.ToString(), scale: 1, width: width, height: height); } } if (_linkHandlers.isNotEmpty()) { TapGestureRecognizer recognizer = _linkHandlers.last() as TapGestureRecognizer; return new GestureDetector(null, child, null, null, recognizer.onTap); } else { return child; } }