返回顶部
首页 > 资讯 > 前端开发 > html >分享Flutter入门指南
  • 347
分享到

分享Flutter入门指南

2024-04-02 19:04:59 347人浏览 八月长安
摘要

这篇文章主要讲解了“分享Flutter入门指南”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分享Flutter入门指南”吧!一、基础布局先来看看最常见的一些

这篇文章主要讲解了“分享Flutter入门指南”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分享Flutter入门指南”吧!

一、基础布局

先来看看最常见的一些 UI 布局操作。

1.1 文本样式与对齐

我们在 CSS 中设置的字体样式、大小以及其他文本属性,都是 Flutter 中一个 Text widget 子元素 TextStyle  中单独的属性。

In both html and Flutter, child elements or widgets are anchored at the top  left, by default.

不论是 HTML 还是 Flutter,子元素或者 widget 都默认锚定在左上方。

Web

<div class="greybox">     Lorem ipsum </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Georgia; }

Dart

var container = Container( // grey box   child: Text(     "Lorem ipsum",     style: TextStyle(       fontSize: 24.0,       fontWeight: FontWeight.w900,       fontFamily: "Georgia",     ),   ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

1.2 背景颜色

在 Flutter 中,你可以通过 Container 的 decoration 属性来设置背景颜色。

CSS 示例中我们使用等价的十六进制颜色表示。

Web

<div class="greybox">   Lorem ipsum </div>  .greybox {   background-color: #e0e0e0;     width: 320px;   height: 240px;   font: 900 24px Roboto; }

Dart

var container = Container( // grey box     child: Text(       "Lorem ipsum",       style: bold24Roboto,     ),     width: 320.0,     height: 240.0,     color: Colors.grey[300],   );

1.3 居中元素

在 Flutter 中,Center widget 可以将它的子元素水平和垂直居中。

要用 CSS 实现相似的效果,其父元素则需要使用一个 flex 或者 table-cell 显示布局。本节示例使用的是 flex 布局。

Web

<div class="greybox">   Lorem ipsum </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center;  }

Dart

var container = Container( // grey box   child:  Center(     child:  Text(       "Lorem ipsum",       style: bold24Roboto,     ),   ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

1.4 设置容器宽度

Container widget 的宽度可以用它的 width 属性指定,但需要注意的是,和 CSS 中的 max-width  属性用于指定容器可调整的***宽度值不同的是,这里指定的是一个固定宽度。要在 Flutter 中模拟 max-width 的效果,可以使用 Container 的  constraints 属性。新建一个带有 minWidth 和 maxWidth 属性的 BoxConstraints widget。 而对嵌套的  Container 来说,如果其父元素宽度小于子元素宽度,则子元素实际尺寸以父元素大小为准。

Web

<div class="greybox">   <div class="redbox">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;    height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   width: 100%;   max-width: 240px;  }

Dart

var container = Container( // grey box   child: Center(     child: Container( // red box       child: Text(         "Lorem ipsum",         style: bold24Roboto,       ),       decoration: BoxDecoration(         color: Colors.red[400],       ),       padding: EdgeInsets.all(16.0),       width: 240.0, //max-width is 240.0     ),   ),   width: 320.0,    height: 240.0,   color: Colors.grey[300], );

二、位置与大小

以下示例将展示如何对 widget 的位置、大小以及背景进行更复杂的操作。

2.1 绝对定位

默认情况下, widget 是相对于其父元素定位的。要通过 x-y 坐标指定一个 widget 的绝对位置,请把它嵌套在一个 Positioned  widget 中,而该 widget 则需被嵌套在一个 Stack widget 中。

Web

<div class="greybox">   <div class="redbox">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   position: relative;  } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   position: absolute;   top: 24px;   left: 24px;  }

Dart

var container = Container( // grey box   child: Stack(     children: [       Positioned( // red box         child:  Container(           child: Text(             "Lorem ipsum",             style: bold24Roboto,           ),           decoration: BoxDecoration(             color: Colors.red[400],           ),           padding: EdgeInsets.all(16.0),         ),         left: 24.0,         top: 24.0,       ),     ],   ),    width: 320.0,   height: 240.0,   color: Colors.grey[300], );

2.2 旋转

要旋转一个 widget,请将它嵌套在 TransfORM widget 中。其中,使用 Transform widget 的 alignment 和  origin 属性分别来指定转换原点的具体位置信息。

对于简单的 2D 旋转,widget 是依据弧度在 Z 轴上旋转的。(角度 &times; &pi; / 180)

Web 

<div class="greybox">   <div class="redbox">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   transform: rotate(15deg);  }

Dart

var container = Container( // gray box   child: Center(     child:  Transform(       child:  Container( // red box         child: Text(           "Lorem ipsum",           style: bold24Roboto,           textAlign: TextAlign.center,         ),         decoration: BoxDecoration(           color: Colors.red[400],         ),         padding: EdgeInsets.all(16.0),       ),       alignment: Alignment.center,       transform: Matrix4.identity()         ..rotateZ(15 * 3.1415927 / 180),     ),    ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

2.3 缩放元素

将元素嵌套在一个 Transform widget 中,可以实现缩放。使用 Transform widget 的 alignment 和 origin  属性分别来指定缩放原点的具体位置信息。

对于沿 x 轴的简单缩放操作,新建一个 Matrix4 标识对象并用它的 scale() 方法来指定缩放因系数。

当你缩放一个父 widget 时,它的子 widget 也会相应被缩放。

Web

<div class="greybox">   <div class="redbox">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   transform: scale(1.5);  }

Dart

var container = Container( // gray box   child: Center(     child:  Transform(       child:  Container( // red box         child: Text(           "Lorem ipsum",           style: bold24Roboto,           textAlign: TextAlign.center,         ),         decoration: BoxDecoration(           color: Colors.red[400],         ),         padding: EdgeInsets.all(16.0),       ),       alignment: Alignment.center,       transform: Matrix4.identity()         ..scale(1.5),      ),    width: 320.0,   height: 240.0,   color: Colors.grey[300], );

2.4 线性变换

将元素嵌套在一个 Container widget 中,可以将线性变换应用在 widget 的背景上。之后,再用 Container widget 的  decoration 属性生成一个 BoxDecoration 对象,然后使用 BoxDecoration 的 gradient  属性来变换背景填充内容。

变换“角度”基于 Alignment (x, y) 取值来定:

  • 如果开始和结束的 x 值相同,变换将是垂直的(0&deg;180&deg;)。

  • 如果开始和结束的 y 值相同,变换将是水平的(90&deg;270&deg;)。

这里,只展示垂直变换的代码差异:

Web 

<div class="greybox">   <div class="redbox">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redbox {   padding: 16px;   color: #ffffff;   background: linear-gradient(180deg, #ef5350, rgba(0, 0, 0, 0) 80%);  }

Dart

var container = Container( // grey box   child: Center(     child: Container( // red box       child: Text(         "Lorem ipsum",         style: bold24Roboto,       ),       decoration: BoxDecoration(         gradient: LinearGradient(           begin: const Alignment(0.0, -1.0),           end: const Alignment(0.0, 0.6),           colors: <Color>[             const Color(0xffef5350),             const Color(0x00ef5350)           ],         ),       ),        padding: EdgeInsets.all(16.0),     ),   ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

三、图形/形状

以下示例将展示如何新建和自定义图形。

3.1 圆角

在矩形上实现圆角,可以用 BoxDecoration 对象的 borderRadius 属性。新建一个 BorderRadius  对象来指定每个圆角的半径大小。

Web

<div class="greybox">   <div class="redbox">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   border-radius: 8px;  }

Dart

var container = Container( // grey box   child: Center(     child: Container( // red circle       child: Text(         "Lorem ipsum",         style: bold24Roboto,       ),       decoration: BoxDecoration(         color: Colors.red[400],         borderRadius: BorderRadius.all(           const Radius.circular(8.0),         ),        ),       padding: EdgeInsets.all(16.0),     ),   ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

3.2 阴影

在 CSS 中你可以通过 box-shadow 属性快速指定阴影偏移与模糊范围。比如如下两个盒阴影的属性设置:

  • xOffset: 0px, yOffset: 2px, blur: 4px, color: black @80% alpha

  • xOffset: 0px, yOffset: 06x, blur: 20px, color: black @50% alpha

在 Flutter 中,每个属性与其取值都是单独指定的。请使用 BoxDecoration 的 boxShadow 属性来生成一系列 BoxShadow  widget。你可以定义一个或多个 BoxShadow widget,这些 widget 共同用于设置阴影深度、颜色等等。

Web

<div class="greybox">   <div class="redbox">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   box-shadow: 0 2px 4px rgba(0, 0, 0, 0.8),               0 6px 20px rgba(0, 0, 0, 0.5); }

Dart

var container = Container( // grey box   child: Center(     child: Container( // red box       child: Text(         "Lorem ipsum",         style: bold24Roboto,       ),       decoration: BoxDecoration(         color: Colors.red[400],         boxShadow: <BoxShadow>[           BoxShadow (             color: const Color(0xcc000000),             offset: Offset(0.0, 2.0),             blurRadius: 4.0,           ),           BoxShadow (             color: const Color(0x80000000),             offset: Offset(0.0, 6.0),             blurRadius: 20.0,           ),         ],        ),       padding: EdgeInsets.all(16.0),     ),   ),   width: 320.0,   height: 240.0,   decoration: BoxDecoration(     color: Colors.grey[300],   ),   margin: EdgeInsets.only(bottom: 16.0), );

3.3 圆与椭圆

尽管 CSS 中有基础图形,CSS 中一个生成圆的变通方案是:将矩形的四边 border-radius 均设成50%。

虽然 BoxDecoration 的 borderRadius 属性支持这样设置,Flutter 为 BoxShape enum 提供一个 shape  属性也用于实现同样的目的。

Web 

<div class="greybox">   <div class="redcircle">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redcircle {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   text-align: center;   width: 160px;   height: 160px;   border-radius: 50%;  }

Dart

var container = Container( // grey box   child: Center(     child: Container( // red circle       child: Text(         "Lorem ipsum",         style: bold24Roboto,         textAlign: TextAlign.center,        ),       decoration: BoxDecoration(         color: Colors.red[400],         shape: BoxShape.circle,        ),       padding: EdgeInsets.all(16.0),       width: 160.0,       height: 160.0,      ),   ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

四、文本

以下示例展示了如何设置字体和其他文本属性,除此外还包括一些特性比如如何变换文本字符、自定义间距以及生成摘录。

4.1 文字间距

在 CSS 中你可以通过分别给 letter-spacing 和 Word-spacing  属性的长度赋值来指定每个字母以及每个单词间的空白距离。距离的单位可以是 px, pt, cm, em 等等。

在 Flutter 中,你可以在 Text widget 子元素 TextStyle 的 letterSpacing 与 wordSpacing  属性中将间距设置为逻辑像素(允许负值)。

Web 

<div class="greybox">   <div class="redbox">     Lorem ipsum   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   letter-spacing: 4px;  }

Dart

var container = Container( // grey box   child: Center(     child: Container( // red box       child: Text(         "Lorem ipsum",         style: TextStyle(           color: Colors.white,           fontSize: 24.0,           fontWeight: FontWeight.w900,           letterSpacing: 4.0,          ),       ),       decoration: BoxDecoration(         color: Colors.red[400],       ),       padding: EdgeInsets.all(16.0),     ),   ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

4.2 内联样式

一个 Text widget 可以展示同一类样式的文本。为了展现具有多种样式的文本,需要改用 RichText widget。它的 text  属性可以指定一个或多个可以单独设置样式的 TextSpan widget。

在下例中,”Lorem” 位于 TextSpan widget 中,具有默认(继承自其父元素)文本样式,”ipsum” 位于具有自定义样式、单独的一个  TextSpan 中。

Web 

<div class="greybox">   <div class="redbox">     Lorem <em>ipsum</em>    </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;    display: flex;   align-items: center;   justify-content: center; } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff; }  .redbox em {   font: 300 48px Roboto;   font-style: italic; }

Dart

var container = Container( // grey box   child: Center(     child: Container( // red box       child:  RichText(         text: TextSpan(           style: bold24Roboto,           children: <TextSpan>[             TextSpan(text: "Lorem "),             TextSpan(               text: "ipsum",               style: TextStyle(                 fontWeight: FontWeight.w300,                 fontStyle: FontStyle.italic,                 fontSize: 48.0,               ),             ),           ],         ),       ),        decoration: BoxDecoration(         backgroundColor: Colors.red[400],       ),       padding: EdgeInsets.all(16.0),     ),   ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

4.3 文本摘要

WEB 中,我们常用省略号处理溢出的文本内容,且在 HTML/CSS 中,摘要不能超过一行。 如果要在多行之后进行截断,那么就需要  javascript 的帮助了。

在 Flutter 中,使用 Text widget 的 maxLines 属性来指定包含在摘要中的行数,以及 overflow  属性来处理溢出文本。

Web 

<div class="greybox">   <div class="redbox">     Lorem ipsum dolor sit amet, consec etur   </div> </div>  .greybox {   background-color: #e0e0e0;    width: 320px;   height: 240px;   font: 900 24px Roboto;   display: flex;   align-items: center;   justify-content: center; } .redbox {   background-color: #ef5350;    padding: 16px;   color: #ffffff;   overflow: hidden;   text-overflow: ellipsis;   white-space: nowrap;  }

Dart

var container = Container( // grey box   child: Center(     child: Container( // red box       child: Text(         "Lorem ipsum dolor sit amet, consec etur",         style: bold24Roboto,         overflow: TextOverflow.ellipsis,         maxLines: 1,        ),       decoration: BoxDecoration(         backgroundColor: Colors.red[400],       ),       padding: EdgeInsets.all(16.0),     ),   ),   width: 320.0,   height: 240.0,   color: Colors.grey[300], );

感谢各位的阅读,以上就是“分享Flutter入门指南”的内容了,经过本文的学习后,相信大家对分享Flutter入门指南这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 分享Flutter入门指南

本文链接: https://lsjlt.com/news/85630.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 分享Flutter入门指南
    这篇文章主要讲解了“分享Flutter入门指南”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分享Flutter入门指南”吧!一、基础布局先来看看最常见的一些...
    99+
    2024-04-02
  • Android Flutter异步编程指南分享
    目录1 Dart 中的事件循环模型1.1 向 microtask 队列中添加任务1.2 向 event 队列中添加任务2 Dart 中的异步实现2.1 Future()2.2 Fut...
    99+
    2023-05-14
    Android Flutter异步编程 Flutter异步编程 Flutter异步
  • PHP入门指南:共享内存
    在Web开发领域中,PHP是一种非常流行的编程语言。它被广泛应用于动态网站的开发,也用于开发各种类型的框架和应用程序。在这个快速发展的行业中,学习PHP编程语言可以为您打开许多机会。在本篇文章中,我们将分享共享内存的相关知识,以帮助初学者掌...
    99+
    2023-05-20
    PHP 入门指南 共享内存
  • SpringMVC入门指南
    目录 前言 一、什么是SpringMVC 二、MVC架构模式 三、SpringMVC的工作流程 四、SpringMVC核心组件 五、SpringMVC的优势 六、SpringMVC的配置与常用注解 七、SpringMvc请求处理流程、 控...
    99+
    2023-09-05
    spring mybatis java intellij-idea maven servlet
  • LangChain入门指南
    LangChain入门 什么是LangChain如何使用 LangChain?LangChain的模型LangChain 的主要特点使用示例构建语言模型应用程序:LLMPrompt Templ...
    99+
    2023-09-04
    人工智能
  • MongoDB入门指南
    目录组件结构核心进程数据库工具数据逻辑结构数据库集合文档数据库文件命令行工具使用技巧执行脚本创建 .mongorc.js 文件定制提示信息编辑复杂变量不便使用的集合名称组件结构 核心...
    99+
    2022-12-26
    mongodb入门教程 MongoDB 基础教程 mongodb入门经典
  • MongoDB 入门指南
    目录组件结构核心进程数据库工具数据逻辑结构数据库集合文档数据库文件命令行工具使用技巧执行脚本创建 .mongorc.js 文件定制提示信息编辑复杂变量不便使用的集合名称组件结构 核心进程 在 MongoDB 中,核心进程...
    99+
    2022-12-26
    mongodb入门教程 MongoDB基础教程 mongodb入门经典
  • PHP入门指南:分布式系统
    PHP入门指南:分布式系统随着互联网技术的飞速发展,分布式系统已经成为了大规模应用的必备选择。而PHP语言能够在Web开发中发挥出色的作用,为分布式系统的构建提供了可靠的基础。本文将带领读者了解PHP语言在分布式系统中的应用,并提供相关的入...
    99+
    2023-05-20
    PHP 分布式系统 入门指南
  • PHP入门指南:前后端分离
    作为一门非常流行的编程语言,PHP 在互联网开发中扮演着重要的角色。而随着近年来前后端分离的趋势愈发明显,越来越多的 PHP 开发者也在思考如何更好地进行前后端分离开发。本文将为大家介绍 PHP 入门指南,教你如何进行前后端分离。1、前后端...
    99+
    2023-05-23
    PHP 前后端分离 入门指南
  • PHP入门指南:信号量和共享内存
    PHP作为一种脚本语言,在网络应用中有着广泛的应用。一般而言,PHP不是一个与系统底层操作相关的语言,但在一些特殊的场景下,如并发编程、多进程编程、进程间通信等,还是需要对系统底层有一定的了解。本文将介绍两个与进程间通信相关的底层知识:信号...
    99+
    2023-05-20
    PHP 信号量(Semaphore) 共享内存(Shared memory)
  • Spring Boot 入门指南
    目录0x0 前言0x1 简介0x2 Hello World0x3 文件解析pom.xml应用入口类0x4 进阶项目目录编写单元测试开发环境的调试0x5 参考0x0 前言 记得当初放...
    99+
    2024-04-02
  • PHP入门指南:composer
    PHP是一种流行的编程语言,被广泛用于Web开发项目。在使用PHP进行项目开发时,我们经常需要使用许多第三方库和软件包。手动下载和安装这些软件包会变得非常繁琐和困难,这时Composer就派上用场了。Composer是一个PHP的依赖管理工...
    99+
    2023-05-20
    PHP Composer 入门指南
  • MySQL分库分表与分区的入门指南
    前言 关系型数据库比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限,当数据量和并发量起来之后,就必须对数据库进行切分了。 数据切分(sharding)的手段就是分库分表。...
    99+
    2024-04-02
  • PHP入门指南:SQL注入
    PHP入门指南:SQL注入随着互联网的快速发展,Web应用程序越来越普及,其安全性也成为了人们极为关注的问题。SQL注入是 Web应用程序中的一种常见攻击方式,它可以导致严重的安全问题,从而对 Web应用程序的正常运行造成影响。在学习和使用...
    99+
    2023-05-20
    PHP sql注入 入门指南
  • Flutter LinearProgressIndicator使用指南分析
    目录正文创建基本的进度条设置进度条的外观自定义进度条的外观总结正文 LinearProgressIndicator 是 Flutter 中用于创建线性进度指示器的 widget。它...
    99+
    2023-03-20
    Flutter LinearProgressIndicator Flutter LinearProgressIndicator使用
  • Flutter LinearProgressIndicator使用指南分析
    Flutter中的LinearProgressIndicator是一个线性进度指示器,可以用于显示当前操作的进度。使用LinearP...
    99+
    2023-08-14
    Flutter
  • PHP入门指南:数组
    PHP是一种服务器端脚本语言,适用于Web开发,它可以通过处理HTML表单、访问数据库和使用Cookies等方式来创建动态交互性Web页面。在PHP中,数组是一种非常重要的数据类型,本篇文章将为您带来PHP数组的入门指南,并将解释如何在您的...
    99+
    2023-05-20
    PHP 数组 入门指南
  • PHP入门指南:多态
    PHP是一种常用的编程语言,具有易学、可扩展和开源等优点。其中,多态作为面向对象编程的一个重要概念,在PHP中也占据着十分重要的地位。本文将为大家介绍PHP中的多态概念、实现方法以及其应用。一、多态的概念多态是面向对象编程中的一种重要概念,...
    99+
    2023-05-20
    PHP 多态 入门指南
  • vue转react入门指南
    目录设计组件通信生命周期事件处理class和styleclassstyle条件渲染列表渲染组件嵌套获取DOM文档结构路由动态路由&路由传参嵌套路由路由跳转路由守卫(登录验证,...
    99+
    2024-04-02
  • 敲开 Python 数据分析之门:新手入门指南
    先决条件 计算机基础知识 基本编程概念(例如变量、数据类型和条件语句) 安装 Python 和必要的库(例如 Pandas、NumPy 和 Matplotlib) 步骤 1:数据导入和探索 使用 Pandas 库读取 CSV、Exc...
    99+
    2024-03-14
    数据分析
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作