From f88d10526ee165f72ff959817ecd81a3eccfcca7 Mon Sep 17 00:00:00 2001 From: hanxu317317 Date: Tue, 29 Jan 2019 15:43:57 +0800 Subject: [PATCH 01/28] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fd82b0eb..c2e08a9e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en. android下载地址: - + iphone下载地址: 暂无 From eb1842a08257d2503d60d9e5f83cec96fd4f0c62 Mon Sep 17 00:00:00 2001 From: hanxu317317 Date: Tue, 29 Jan 2019 15:50:22 +0800 Subject: [PATCH 02/28] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fd82b0eb..fe09e8c9 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ flutter优点主要包括: ### app 预览 - + ### Core Team From d7114b149d9944f8d30752a51da865e9ee38a22a Mon Sep 17 00:00:00 2001 From: "yifeng.yl" Date: Tue, 29 Jan 2019 16:39:24 +0800 Subject: [PATCH 03/28] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Flutter_Go 代码开发规范.md | 679 +++++++++++++++++++++++++++++++ lib/views/first_page/home.dart | 2 +- 2 files changed, 680 insertions(+), 1 deletion(-) create mode 100644 Flutter_Go 代码开发规范.md diff --git a/Flutter_Go 代码开发规范.md b/Flutter_Go 代码开发规范.md new file mode 100644 index 00000000..6a152ae3 --- /dev/null +++ b/Flutter_Go 代码开发规范.md @@ -0,0 +1,679 @@ +# Flutter_Go 代码开发规范 + +## 代码风格 + +### 标识符三种类型 + +#### 大驼峰 +类、枚举、typedef和类型参数 + +``` + class SliderMenu { ... } + + class HttpRequest { ... } + + typedef Predicate = bool Function(T value); +``` + +包括用于元数据注释的类 + +``` + class Foo { + const Foo([arg]); + } + + @Foo(anArg) + class A { ... } + + @Foo() + class B { ... } +``` + +#### 使用小写加下划线来命名库和源文件 + +``` + library peg_parser.source_scanner; + + import 'file_system.dart'; + import 'slider_menu.dart'; +``` + +不推荐如下写法: + +``` + library pegparser.SourceScanner; + + import 'file-system.dart'; + import 'SliderMenu.dart'; +``` + + +#### 使用小写加下划线来命名导入前缀 + +``` + import 'dart:math' as math; + import 'package:angular_components/angular_components' + as angular_components; + import 'package:js/js.dart' as js; +``` + +不推荐如下写法: + +``` + import 'dart:math' as Math; + import 'package:angular_components/angular_components' + as angularComponents; + import 'package:js/js.dart' as JS; +``` + +#### 使用小驼峰法命名其他标识符 + +``` + var item; + + HttpRequest httpRequest; + + void align(bool clearItems) { + // ... + } +``` + +#### 优先使用小驼峰法作为常量命名 + +``` + const pi = 3.14; + const defaultTimeout = 1000; + final urlScheme = RegExp('^([a-z]+):'); + + class Dice { + static final numberGenerator = Random(); + } +``` + +不推荐如下写法: + +``` + const PI = 3.14; + const DefaultTimeout = 1000; + final URL_SCHEME = RegExp('^([a-z]+):'); + + class Dice { + static final NUMBER_GENERATOR = Random(); + } +``` + +#### 不使用前缀字母 +因为Dart可以告诉您声明的类型、范围、可变性和其他属性,所以没有理由将这些属性编码为标识符名称。 + +``` + defaultTimeout +``` + +不推荐如下写法: + +``` + kDefaultTimeout +``` + +### 排序 + +为了使你的文件前言保持整洁,我们有规定的命令,指示应该出现在其中。每个“部分”应该用空行分隔。 + +#### 在其他引入之前引入所需的dart库 + +``` + import 'dart:async'; + import 'dart:html'; + + import 'package:bar/bar.dart'; + import 'package:foo/foo.dart'; +``` + +#### 在相对引入之前先引入在包中的库 + +``` + import 'package:bar/bar.dart'; + import 'package:foo/foo.dart'; + + import 'util.dart'; +``` + +#### 第三方包的导入先于其他包 + +``` + import 'package:bar/bar.dart'; + import 'package:foo/foo.dart'; + + import 'package:my_package/util.dart'; +``` + +#### 在所有导入之后,在单独的部分中指定导出 + +``` + import 'src/error.dart'; + import 'src/foo_bar.dart'; + + export 'src/error.dart'; +``` + +不推荐如下写法: + +``` + import 'src/error.dart'; + export 'src/error.dart'; + import 'src/foo_bar.dart'; +``` + + +### 所有流控制结构,请使用大括号 + +这样做可以避免悬浮的else问题 + +``` + if (isWeekDay) { + print('Bike to work!'); + } else { + print('Go dancing or read a book!'); + } +``` + +#### 例外 +一个if语句没有else子句,其中整个if语句和then主体都适合一行。在这种情况下,如果你喜欢的话,你可以去掉大括号 + +``` + if (arg == null) return defaultValue; +``` + +如果流程体超出了一行需要分划请使用大括号: + +``` + if (overflowChars != other.overflowChars) { + return overflowChars < other.overflowChars; + } +``` + +不推荐如下写法: + +``` + if (overflowChars != other.overflowChars) + return overflowChars < other.overflowChars; +``` + +## 注释 + +### 要像句子一样格式化 +除非是区分大小写的标识符,否则第一个单词要大写。以句号结尾(或“!”或“?”)。对于所有的注释都是如此:doc注释、内联内容,甚至TODOs。即使是一个句子片段。 + +``` + greet(name) { + // Assume we have a valid name. + print('Hi, $name!'); + } +``` + +不推荐如下写法: + +``` + greet(name) { + /* Assume we have a valid name. */ + print('Hi, $name!'); + } +``` + +可以使用块注释(/…/)临时注释掉一段代码,但是所有其他注释都应该使用// + +### Doc注释 +使用///文档注释来记录成员和类型。 + +使用doc注释而不是常规注释,可以让dartdoc找到并生成文档。 + +``` + /// The number of characters in this chunk when unsplit. + int get length => ... +``` + +> 由于历史原因,达特茅斯学院支持道格评论的两种语法:///(“C#风格”)和/**…* /(“JavaDoc风格”)。我们更喜欢/// 因为它更紧凑。/**和*/在多行文档注释中添加两个无内容的行。在某些情况下,///语法也更容易阅读,例如文档注释包含使用*标记列表项的项目符号列表。 + +### 考虑为私有api编写文档注释 + +Doc注释并不仅仅针对库的公共API的外部使用者。它们还有助于理解从库的其他部分调用的私有成员 + +#### 用一句话总结开始doc注释 + +以简短的、以用户为中心的描述开始你的文档注释,以句号结尾。 + +``` +/// Deletes the file at [path] from the file system. +void delete(String path) { + ... +} +``` + +不推荐如下写法: + +``` + /// Depending on the state of the file system and the user's permissions, + /// certain operations may or may not be possible. If there is no file at + /// [path] or it can't be accessed, this function throws either [IOError] + /// or [PermissionError], respectively. Otherwise, this deletes the file. + void delete(String path) { + ... + } +``` + +#### “doc注释”的第一句话分隔成自己的段落 + +在第一个句子之后添加一个空行,把它分成自己的段落 + +``` + /// Deletes the file at [path]. + /// + /// Throws an [IOError] if the file could not be found. Throws a + /// [PermissionError] if the file is present but could not be deleted. + void delete(String path) { + ... + } +``` + +## Flutter_Go 使用参考 + +### 库的引用 + +flutter go 中,导入lib下文件库,统一指定报名,避免过多的```../../``` +``` +package:flutter_go/ +``` + +### 字符串的使用 + +#### 使用相邻字符串连接字符串文字 +如果有两个字符串字面值(不是值,而是实际引用的字面值),则不需要使用+连接它们。就像在C和c++中,简单地把它们放在一起就能做到。这是创建一个长字符串很好的方法但是不适用于单独一行。 + +``` +raiseAlarm( + 'ERROR: Parts of the spaceship are on fire. Other ' + 'parts are overrun by martians. Unclear which are which.'); +``` + +不推荐如下写法: + +``` +raiseAlarm('ERROR: Parts of the spaceship are on fire. Other ' + + 'parts are overrun by martians. Unclear which are which.'); +``` + +#### 优先使用模板字符串 +``` +'Hello, $name! You are ${year - birth} years old.'; +``` + +#### 在不需要的时候,避免使用花括号 + +``` + 'Hi, $name!' + "Wear your wildest $decade's outfit." +``` + +不推荐如下写法: + +``` + 'Hello, ' + name + '! You are ' + (year - birth).toString() + ' y...'; +``` + +不推荐如下写法: + +``` + 'Hi, ${name}!' + "Wear your wildest ${decade}'s outfit." +``` + +### 集合 + +#### 尽可能使用集合字面量 + +如果要创建一个不可增长的列表,或者其他一些自定义集合类型,那么无论如何,都要使用构造函数。 + +``` + var points = []; + var addresses = {}; + var lines = []; +``` + +不推荐如下写法: + +``` + var points = List(); + var addresses = Map(); +``` + +#### 不要使用.length查看集合是否为空 + +``` +if (lunchBox.isEmpty) return 'so hungry...'; +if (words.isNotEmpty) return words.join(' '); +``` + +不推荐如下写法: + +``` + if (lunchBox.length == 0) return 'so hungry...'; + if (!words.isEmpty) return words.join(' '); +``` + +#### 考虑使用高阶方法转换序列 + +如果有一个集合,并且希望从中生成一个新的修改后的集合,那么使用.map()、.where()和Iterable上的其他方便的方法通常更短,也更具有声明性 + +``` + var aquaticNames = animals + .where((animal) => animal.isAquatic) + .map((animal) => animal.name); +``` +#### 避免使用带有函数字面量的Iterable.forEach() + +在Dart中,如果你想遍历一个序列,惯用的方法是使用循环。 + +``` +for (var person in people) { + ... +} +``` + +不推荐如下写法: + +``` + people.forEach((person) { + ... + }); +``` + +#### 不要使用List.from(),除非打算更改结果的类型 + +给定一个迭代,有两种明显的方法可以生成包含相同元素的新列表 + +``` +var copy1 = iterable.toList(); +var copy2 = List.from(iterable); +``` + +明显的区别是第一个比较短。重要的区别是第一个保留了原始对象的类型参数 + +``` +// Creates a List: +var iterable = [1, 2, 3]; + +// Prints "List": +print(iterable.toList().runtimeType); +``` + +``` +// Creates a List: +var iterable = [1, 2, 3]; + +// Prints "List": +print(List.from(iterable).runtimeType); +``` + +### 参数的使用 + +#### 使用=将命名参数与其默认值分割开 + +由于遗留原因,Dart均允许“:”和“=”作为指定参数的默认值分隔符。为了与可选的位置参数保持一致,使用“=”。 + +``` + void insert(Object item, {int at = 0}) { ... } +``` + +不推荐如下写法: + +``` + void insert(Object item, {int at: 0}) { ... } +``` + +#### 不要使用显式默认值null + +如果参数是可选的,但没有给它一个默认值,则语言隐式地使用null作为默认值,因此不需要编写它 + +``` +void error([String message]) { + stderr.write(message ?? '\n'); +} +``` + +不推荐如下写法: + +``` +void error([String message = null]) { + stderr.write(message ?? '\n'); +} +``` + +### 变量 + +#### 不要显式地将变量初始化为空 +在Dart中,未显式初始化的变量或字段自动被初始化为null。不要多余赋值null + +``` + int _nextId; + + class LazyId { + int _id; + + int get id { + if (_nextId == null) _nextId = 0; + if (_id == null) _id = _nextId++; + + return _id; + } + } +``` + +不推荐如下写法: + +``` + int _nextId = null; + + class LazyId { + int _id = null; + + int get id { + if (_nextId == null) _nextId = 0; + if (_id == null) _id = _nextId++; + + return _id; + } + } +``` + +#### 避免储存你能计算的东西 + +在设计类时,您通常希望将多个视图公开到相同的底层状态。通常你会看到在构造函数中计算所有视图的代码,然后存储它们: + +应该避免的写法: + +``` + class Circle { + num radius; + num area; + num circumference; + + Circle(num radius) + : radius = radius, + area = pi * radius * radius, + circumference = pi * 2.0 * radius; + } +``` + +如上代码问题: + +- 浪费内存 +- 缓存的问题是无效——如何知道何时缓存过期需要重新计算? + +推荐的写法如下: + +``` + class Circle { + num radius; + + Circle(this.radius); + + num get area => pi * radius * radius; + num get circumference => pi * 2.0 * radius; + } +``` + +### 类成员 + +#### 不要把不必要地将字段包装在getter和setter中 + +不推荐如下写法: + +``` + class Box { + var _contents; + get contents => _contents; + set contents(value) { + _contents = value; + } + } +``` + +#### 优先使用final字段来创建只读属性 + +尤其对于 ```StatelessWidget``` + +#### 在不需要的时候不要用this + +不推荐如下写法: + +``` + class Box { + var value; + + void clear() { + this.update(null); + } + + void update(value) { + this.value = value; + } + } +``` + +推荐如下写法: + +``` + class Box { + var value; + + void clear() { + update(null); + } + + void update(value) { + this.value = value; + } + } +``` + +### 构造函数 + +#### 尽可能使用初始化的形式 + +不推荐如下写法: + +``` + class Point { + num x, y; + Point(num x, num y) { + this.x = x; + this.y = y; + } + } +``` + +推荐如下写法: + +``` +class Point { + num x, y; + Point(this.x, this.y); +} +``` + +#### 不要使用new + +Dart2使new 关键字可选 + +推荐写法: + +``` + Widget build(BuildContext context) { + return Row( + children: [ + RaisedButton( + child: Text('Increment'), + ), + Text('Click!'), + ], + ); + } +``` + +不推荐如下写法: + +``` + Widget build(BuildContext context) { + return new Row( + children: [ + new RaisedButton( + child: new Text('Increment'), + ), + new Text('Click!'), + ], + ); + } +``` + +### 异步 + +#### 优先使用async/await代替原始的futures + +async/await语法提高了可读性,允许你在异步代码中使用所有Dart控制流结构。 + +``` + Future countActivePlayers(String teamName) async { + try { + var team = await downloadTeam(teamName); + if (team == null) return 0; + + var players = await team.roster; + return players.where((player) => player.isActive).length; + } catch (e) { + log.error(e); + return 0; + } + } +``` + +#### 当异步没有任何用处时,不要使用它 + +如果可以在不改变函数行为的情况下省略异步,那么就这样做。、 + +``` + Future afterTwoThings(Future first, Future second) { + return Future.wait([first, second]); + } +``` + +不推荐写法: + +``` + Future afterTwoThings(Future first, Future second) async { + return Future.wait([first, second]); + } +``` + + + + diff --git a/lib/views/first_page/home.dart b/lib/views/first_page/home.dart index f82b5e77..03a974af 100644 --- a/lib/views/first_page/home.dart +++ b/lib/views/first_page/home.dart @@ -17,7 +17,7 @@ import 'package:flutter_go/views/widget_page/widget_page.dart'; import 'package:flutter_go/views/welcome_page/fourth_page.dart'; import 'package:flutter_go/views/collection_page/collection_page.dart'; import 'package:flutter_go/routers/application.dart'; -import 'package:flutter_go/utils//provider.dart'; +import 'package:flutter_go/utils/provider.dart'; import 'package:flutter_go/model/widget.dart'; import 'package:flutter_go/widgets/index.dart'; import 'package:flutter_go/components/search_input.dart'; From 9ac45f2fbf50171c32e74f5c9761a2953b8a9ec8 Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 16:44:40 +0800 Subject: [PATCH 04/28] =?UTF-8?q?add:=E6=B7=BB=E5=8A=A0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add:添加版本号 --- Flutter_Go 代码开发规范.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flutter_Go 代码开发规范.md b/Flutter_Go 代码开发规范.md index 6a152ae3..f68a3562 100644 --- a/Flutter_Go 代码开发规范.md +++ b/Flutter_Go 代码开发规范.md @@ -1,4 +1,4 @@ -# Flutter_Go 代码开发规范 +# Flutter_Go 代码开发规范 0.1.0 版 ## 代码风格 From f9f077d0d941eae5272a17bc9843c9b7f01ca544 Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 19:50:25 +0800 Subject: [PATCH 05/28] =?UTF-8?q?add:=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add:版本更新历史链接 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 31bedbc7..5df22c1e 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en. > 帮助开发者快速上手 Flutter **内部测试中,1.0 正式版将于 2月 20日 发布。** +## 版本更新历史:[地址](https://github.com/alibaba/flutter-go/blob/develop/CHANGE-LOG.md) ## Release安装包下载地址 From 6471d621c2eebbdc3a662c67d216617376f416e2 Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 19:51:10 +0800 Subject: [PATCH 06/28] up up --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5df22c1e..162328e9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,8 @@ Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en. > 帮助开发者快速上手 Flutter **内部测试中,1.0 正式版将于 2月 20日 发布。** -## 版本更新历史:[地址](https://github.com/alibaba/flutter-go/blob/develop/CHANGE-LOG.md) +## 版本更新历史: +[地址](https://github.com/alibaba/flutter-go/blob/develop/CHANGE-LOG.md) ## Release安装包下载地址 From 66d634ec819cf8b3a38cab5ae0efbb60a770434c Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 19:51:32 +0800 Subject: [PATCH 07/28] up up --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 162328e9..901e5926 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en. > 帮助开发者快速上手 Flutter **内部测试中,1.0 正式版将于 2月 20日 发布。** -## 版本更新历史: +## 版本更新历史 [地址](https://github.com/alibaba/flutter-go/blob/develop/CHANGE-LOG.md) ## Release安装包下载地址 From dccc986697dfe307c2ba4103deae334605283299 Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 20:03:18 +0800 Subject: [PATCH 08/28] =?UTF-8?q?add:=E5=BC=80=E5=8F=91=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add:开发规范 --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 901e5926..eaecd413 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,15 @@ Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en. > 帮助开发者快速上手 Flutter **内部测试中,1.0 正式版将于 2月 20日 发布。** ## 版本更新历史 +> 展示重要的提交更新内容 + [地址](https://github.com/alibaba/flutter-go/blob/develop/CHANGE-LOG.md) +## 开发规范 +> 由于类似 javascript, java, object-c,等开发者的语言习惯不同而产生歧义,我们依据官方提供的 [dart 语言规范](https://www.dartlang.org) 定制。 + +[<< FlutterGo 开发规范第一版 >>](https://github.com/alibaba/flutter-go/blob/develop/Flutter_Go%20%E4%BB%A3%E7%A0%81%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.md) + ## Release安装包下载地址 android下载地址: From 2afc7675117a6d768c7228165afb65b7fa6a550f Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 20:06:19 +0800 Subject: [PATCH 09/28] up up --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eaecd413..20fe03db 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en. > 帮助开发者快速上手 Flutter **内部测试中,1.0 正式版将于 2月 20日 发布。** ## 版本更新历史 -> 展示重要的提交更新内容 +> 按时间顺序,展示重要的提交更新内容。 [地址](https://github.com/alibaba/flutter-go/blob/develop/CHANGE-LOG.md) @@ -50,7 +50,7 @@ flutter优点主要包括: ### app 预览 - + ### Core Team From df1ce529f6f3e6e01054c15fb935cc5891c0a572 Mon Sep 17 00:00:00 2001 From: ryan Date: Tue, 29 Jan 2019 20:40:59 +0800 Subject: [PATCH 10/28] =?UTF-8?q?fix:=20=E4=B8=80=E4=BA=9B=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=9A=84code=E6=BC=94=E7=A4=BA=E6=89=93=E4=B8=8D?= =?UTF-8?q?=E5=BC=80=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一些页面的code演示打不开的问题 --- ios/Runner.xcodeproj/project.pbxproj | 4 ++++ .../components/Bar/BottomAppBar/index.dart | 2 +- .../components/Bar/SliverAppBar/index.dart | 2 +- .../components/Bar/SnackBar/index.dart | 2 +- .../components/LIst/AnimatedList/index.dart | 2 +- .../components/LIst/ListView/index.dart | 2 +- .../elements/Form/CheckBox/Checkbox/demo.dart | 4 ++-- .../Cupertino/CupertinoColors/index.dart | 2 +- .../Cupertino/CupertinoIcons/index.dart | 2 +- pubspec.yaml | 20 +++++++++++++++---- 10 files changed, 29 insertions(+), 13 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 4f77e0fd..bb4e86ed 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 333E5DAE7FC10AC69FEC26C0 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA792F029EDD7A11295D192 /* libPods-Runner.a */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; }; 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; @@ -40,6 +41,7 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 2D5378251FAA1A9400D5DBA9 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = Flutter/flutter_assets; sourceTree = SOURCE_ROOT; }; 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -90,6 +92,7 @@ children = ( 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 2D5378251FAA1A9400D5DBA9 /* flutter_assets */, 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, @@ -206,6 +209,7 @@ files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); diff --git a/lib/widgets/components/Bar/BottomAppBar/index.dart b/lib/widgets/components/Bar/BottomAppBar/index.dart index 18c2d159..080c278e 100644 --- a/lib/widgets/components/Bar/BottomAppBar/index.dart +++ b/lib/widgets/components/Bar/BottomAppBar/index.dart @@ -38,7 +38,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'BottomAppBar', - codeUrl: 'componentss/Bar/BottomAppBar/demo.dart', + codeUrl: 'components/Bar/BottomAppBar/demo.dart', contentList: [allDomes(context, this)], docUrl: 'https://docs.flutter.io/flutter/material/BottomAppBar-class.html', ); diff --git a/lib/widgets/components/Bar/SliverAppBar/index.dart b/lib/widgets/components/Bar/SliverAppBar/index.dart index 367b5216..742f6894 100644 --- a/lib/widgets/components/Bar/SliverAppBar/index.dart +++ b/lib/widgets/components/Bar/SliverAppBar/index.dart @@ -40,7 +40,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'SliverAppBar', - codeUrl: 'componentss/Bar/SliverAppBar/demo.dart', + codeUrl: 'components/Bar/SliverAppBar/demo.dart', contentList:[allDomes(context, this)], docUrl: 'https://docs.flutter.io/flutter/widgets/SliverAppBar-class.html', ); diff --git a/lib/widgets/components/Bar/SnackBar/index.dart b/lib/widgets/components/Bar/SnackBar/index.dart index 2047f783..ff1d31ad 100644 --- a/lib/widgets/components/Bar/SnackBar/index.dart +++ b/lib/widgets/components/Bar/SnackBar/index.dart @@ -40,7 +40,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'SnackBar', - codeUrl: 'componentss/Bar/SnackBar/demo.dart', + codeUrl: 'components/Bar/SnackBar/demo.dart', contentList: [allDomes(context, this)], docUrl: 'https://docs.flutter.io/flutter/material/SnackBar-class.html', ); diff --git a/lib/widgets/components/LIst/AnimatedList/index.dart b/lib/widgets/components/LIst/AnimatedList/index.dart index 2392ab46..05cae395 100644 --- a/lib/widgets/components/LIst/AnimatedList/index.dart +++ b/lib/widgets/components/LIst/AnimatedList/index.dart @@ -32,7 +32,7 @@ const String _Text1 = class Demo extends StatefulWidget { - static const String routeName = '/components//List/AnimatedList'; + static const String routeName = '/components/List/AnimatedList'; @override _DemoState createState() => _DemoState(); diff --git a/lib/widgets/components/LIst/ListView/index.dart b/lib/widgets/components/LIst/ListView/index.dart index 1bbebf52..c43ff044 100644 --- a/lib/widgets/components/LIst/ListView/index.dart +++ b/lib/widgets/components/LIst/ListView/index.dart @@ -67,7 +67,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'ListView', - codeUrl: '/componentss/List/ListView/demo.dart', + codeUrl: 'components/List/ListView/demo.dart', contentList: [allCheckboxs(context, this)], docUrl: 'https://docs.flutter.io/flutter/widgets/ListView-class.html', ); diff --git a/lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart b/lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart index 60ebf8c8..c34d10af 100644 --- a/lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart +++ b/lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart @@ -12,7 +12,7 @@ import 'package:flutter/material.dart'; /* * Checkbox 默认的实例 * index 当前checkbox 的索引值 -* */ +*/ class CheckboxDefault extends StatefulWidget{ final int index; final parent; @@ -41,7 +41,7 @@ class _CheckboxDefault extends State { /* * Checkbox 默认的实例 * index 当前checkbox 的索引值 -* */ +*/ class CheckboxSelect extends StatelessWidget { final int index; final widget; diff --git a/lib/widgets/themes/Cupertino/CupertinoColors/index.dart b/lib/widgets/themes/Cupertino/CupertinoColors/index.dart index d8f5e6ca..412619d7 100644 --- a/lib/widgets/themes/Cupertino/CupertinoColors/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoColors/index.dart @@ -36,7 +36,7 @@ class _DemoState extends State { ], title: 'CupertinoColors', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoColors-class.html', - codeUrl: '/themes/Cupertino/CupertinoColor/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoColors/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoIcons/index.dart b/lib/widgets/themes/Cupertino/CupertinoIcons/index.dart index 93b60c1d..ef3fbf23 100644 --- a/lib/widgets/themes/Cupertino/CupertinoIcons/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoIcons/index.dart @@ -38,7 +38,7 @@ class _DemoState extends State { ], title: 'CupertinoIcons', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoIcons-class.html', - codeUrl: '/themes/Cupertino/CupertinoColor/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoIcons/demo.dart' ); } } \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index 8c5619c0..b929ba36 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -72,9 +72,9 @@ flutter: - lib/widgets/components/Grid/GridTile/demo.dart - lib/widgets/components/Grid/GridTileBar/demo.dart - lib/widgets/components/Grid/GridView/demo.dart - - lib/widgets/components/LIst/AnimatedList/demo.dart - - lib/widgets/components/LIst/ListBody/demo.dart - - lib/widgets/components/LIst/ListView/demo.dart + - lib/widgets/components/List/AnimatedList/demo.dart + - lib/widgets/components/List/ListBody/demo.dart + - lib/widgets/components/List/ListView/demo.dart - lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart - lib/widgets/components/Menu/DropdownMenuItem/demo.dart - lib/widgets/components/Menu/PopupMenuButton/demo.dart @@ -164,12 +164,24 @@ flutter: - lib/widgets/themes/Material/MaterialColor/demo.dart - lib/widgets/themes/Material/MaterialPageRoute/demo.dart - lib/widgets/themes/Material/MergeableMaterialItem/demo.dart + - lib/widgets/themes/Cupertino/CupertinoApp/demo.dart + - lib/widgets/themes/Cupertino/CupertinoButton/demo.dart + - lib/widgets/themes/Cupertino/CupertinoColors/demo.dart + - lib/widgets/themes/Cupertino/CupertinoIcons/demo.dart + - lib/widgets/themes/Cupertino/CupertinoNavigationBar/demo.dart + - lib/widgets/themes/Cupertino/CupertinoPageRoute/demo.dart + - lib/widgets/themes/Cupertino/CupertinoPageScaffold/demo.dart + - lib/widgets/themes/Cupertino/CupertinoPicker/demo.dart + - lib/widgets/themes/Cupertino/CupertinoPopupSurface/demo.dart - lib/widgets/themes/Cupertino/CupertinoScrollbar/demo.dart - - lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart - lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart + - lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart + - lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/demo.dart - lib/widgets/themes/Cupertino/CupertinoSwitch/demo.dart - lib/widgets/themes/Cupertino/CupertinoTabBar/demo.dart + - lib/widgets/themes/Cupertino/CupertinoTabScaffold/demo.dart - lib/widgets/themes/Cupertino/CupertinoTabView/demo.dart + - lib/widgets/themes/Cupertino/CupertinoTimerPicker/demo.dart - assets/app.db - assets/images/ - assets/fonts/ From b4c387569fdde75a64df811817e6a1177c7c6282 Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 20:44:11 +0800 Subject: [PATCH 11/28] up up --- Flutter_Go 代码开发规范.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flutter_Go 代码开发规范.md b/Flutter_Go 代码开发规范.md index f68a3562..747ea201 100644 --- a/Flutter_Go 代码开发规范.md +++ b/Flutter_Go 代码开发规范.md @@ -1,4 +1,4 @@ -# Flutter_Go 代码开发规范 0.1.0 版 +# FlutterGo 代码开发规范 0.1.0 版 ## 代码风格 From 70ede1756b5d4bf827198bf132d82f4f1cc68301 Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 20:45:00 +0800 Subject: [PATCH 12/28] doc:up doc:up --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20fe03db..6ce6df65 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en. ## 开发规范 > 由于类似 javascript, java, object-c,等开发者的语言习惯不同而产生歧义,我们依据官方提供的 [dart 语言规范](https://www.dartlang.org) 定制。 -[<< FlutterGo 开发规范第一版 >>](https://github.com/alibaba/flutter-go/blob/develop/Flutter_Go%20%E4%BB%A3%E7%A0%81%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.md) +[<< Flutter Go 开发规范第一版 >>](https://github.com/alibaba/flutter-go/blob/develop/Flutter_Go%20%E4%BB%A3%E7%A0%81%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.md) ## Release安装包下载地址 From ccae9ff82944ab018f70dcb6774ed4e71321e736 Mon Sep 17 00:00:00 2001 From: ryan730 Date: Tue, 29 Jan 2019 20:45:22 +0800 Subject: [PATCH 13/28] doc:up doc:up --- Flutter_Go 代码开发规范.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flutter_Go 代码开发规范.md b/Flutter_Go 代码开发规范.md index 747ea201..d62e8d1c 100644 --- a/Flutter_Go 代码开发规范.md +++ b/Flutter_Go 代码开发规范.md @@ -1,4 +1,4 @@ -# FlutterGo 代码开发规范 0.1.0 版 +# Flutter Go 代码开发规范 0.1.0 版 ## 代码风格 From 588c17ca1090170ca8277da977e9d0596e45439f Mon Sep 17 00:00:00 2001 From: "yifeng.yl" Date: Wed, 30 Jan 2019 12:35:50 +0800 Subject: [PATCH 14/28] fix:code url --- assets/app.db | Bin 53248 -> 53248 bytes lib/routers/application.dart | 2 +- .../components/Bar/BottomAppBar/index.dart | 2 +- .../components/Bar/SnackBar/index.dart | 2 +- .../components/Dialog/AlertDialog/demo.dart | 12 +++++++----- .../components/Grid/SliverGrid/index.dart | 2 +- .../components/LIst/ListView/index.dart | 2 +- .../components/Menu/PopupMenuEntry/index.dart | 2 +- .../components/Menu/PopupMenuItem/index.dart | 2 +- .../CircularProgressIndicator/index.dart | 2 +- .../LinearProgressIndicator/index.dart | 2 +- .../RefreshProgressIndicator/index.dart | 2 +- .../elements/Form/Switch/Switch/index.dart | 2 +- .../elements/Form/Text/Text/index.dart | 2 +- .../Media/Image/DecorationImage/index.dart | 2 +- .../Media/Image/MemoryImage/index.dart | 2 +- .../Media/Image/NetworkImage/index.dart | 2 +- .../themes/Cupertino/CupertinoApp/index.dart | 2 +- .../Cupertino/CupertinoButton/index.dart | 2 +- .../Cupertino/CupertinoColors/index.dart | 2 +- .../Cupertino/CupertinoIcons/index.dart | 2 +- .../CupertinoNavigationBar/index.dart | 2 +- .../Cupertino/CupertinoPageRoute/index.dart | 2 +- .../CupertinoPageScaffold/index.dart | 2 +- .../Cupertino/CupertinoPicker/index.dart | 2 +- .../CupertinoPopupSurface/index.dart | 2 +- .../Cupertino/CupertinoScrollbar/index.dart | 2 +- .../CupertinoSegmentedControl/index.dart | 2 +- .../Cupertino/CupertinoSlider/index.dart | 2 +- .../CupertinoSliverNavigationBar/index.dart | 2 +- .../Cupertino/CupertinoSwitch/index.dart | 2 +- .../Cupertino/CupertinoTabBar/index.dart | 2 +- .../Cupertino/CupertinoTabScaffold/index.dart | 2 +- .../Cupertino/CupertinoTabView/index.dart | 2 +- .../Cupertino/CupertinoTimerPicker/index.dart | 2 +- .../Material/MaterialAccentColor/index.dart | 2 +- .../themes/Material/MaterialApp/index.dart | 2 +- .../themes/Material/MaterialButton/index.dart | 2 +- .../themes/Material/MaterialColor/index.dart | 2 +- .../Material/MaterialPageRoute/index.dart | 2 +- .../Material/MergeableMaterialItem/index.dart | 2 +- pubspec.yaml | 10 +++++++--- 42 files changed, 53 insertions(+), 47 deletions(-) diff --git a/assets/app.db b/assets/app.db index 0955a802a146bf786621e0b33b67bdfa3f433ff7..ad03d945c6d45cff7323fe3ec69d5be6143be510 100644 GIT binary patch delta 66 zcmV-I0KNZ!paX!Q1CSd5(UBZO0nxEwx?chUjk6qJIsySYlUHIk0y1Wk1Q9Ef{cH!b Y!D0^y0t~{F(rfSp4f+5=v&L*XV-9~9CIA2c delta 108 zcmZozz}&Ead4e?Kg^4oGj2AX0?22dNIkZ_O!HS77Z*q8&nMtECCxf!GxUeXrq;FzL zYEfolj(cJO5;HS5F+DXUKRG2eH(%$;j)tf0D>ffY;^$=I{WbYg_6HV+G){)i$8xNa E0r@E>{r~^~ diff --git a/lib/routers/application.dart b/lib/routers/application.dart index 0005b856..35587d4d 100644 --- a/lib/routers/application.dart +++ b/lib/routers/application.dart @@ -4,7 +4,7 @@ class Application { static Router router; static TabController controller; static Map github = { - 'widgetsURL':'https://github.com/alibaba-paimai-frontend/flutter-common-widgets-app/tree/develop/lib/widgets/', + 'widgetsURL':'https://github.com/alibaba/flutter-go/blob/develop/lib/widgets/', //'develop':'https://github.com/alibaba-paimai-frontend/flutter-common-widgets-app/tree/develop/lib/widgets/', //'master':'https://github.com/alibaba-paimai-frontend/flutter-common-widgets-app/tree/master/lib/widgets/' }; diff --git a/lib/widgets/components/Bar/BottomAppBar/index.dart b/lib/widgets/components/Bar/BottomAppBar/index.dart index 18c2d159..080c278e 100644 --- a/lib/widgets/components/Bar/BottomAppBar/index.dart +++ b/lib/widgets/components/Bar/BottomAppBar/index.dart @@ -38,7 +38,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'BottomAppBar', - codeUrl: 'componentss/Bar/BottomAppBar/demo.dart', + codeUrl: 'components/Bar/BottomAppBar/demo.dart', contentList: [allDomes(context, this)], docUrl: 'https://docs.flutter.io/flutter/material/BottomAppBar-class.html', ); diff --git a/lib/widgets/components/Bar/SnackBar/index.dart b/lib/widgets/components/Bar/SnackBar/index.dart index 2047f783..ff1d31ad 100644 --- a/lib/widgets/components/Bar/SnackBar/index.dart +++ b/lib/widgets/components/Bar/SnackBar/index.dart @@ -40,7 +40,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'SnackBar', - codeUrl: 'componentss/Bar/SnackBar/demo.dart', + codeUrl: 'components/Bar/SnackBar/demo.dart', contentList: [allDomes(context, this)], docUrl: 'https://docs.flutter.io/flutter/material/SnackBar-class.html', ); diff --git a/lib/widgets/components/Dialog/AlertDialog/demo.dart b/lib/widgets/components/Dialog/AlertDialog/demo.dart index 8d68c838..44e707c4 100644 --- a/lib/widgets/components/Dialog/AlertDialog/demo.dart +++ b/lib/widgets/components/Dialog/AlertDialog/demo.dart @@ -10,12 +10,9 @@ import 'package:flutter/material.dart'; -class AlertDialogDemo extends StatefulWidget { - _Demo createState() => _Demo(); -} +class AlertDialogDemo extends StatelessWidget{ + // _Demo createState() => _Demo(); -class _Demo extends State { - void showAlertDialog(BuildContext context) { showDialog( context: context, @@ -141,3 +138,8 @@ class _Demo extends State { }); } } + +// class _Demo extends State { + + +// } diff --git a/lib/widgets/components/Grid/SliverGrid/index.dart b/lib/widgets/components/Grid/SliverGrid/index.dart index 926387af..cfdc138a 100644 --- a/lib/widgets/components/Grid/SliverGrid/index.dart +++ b/lib/widgets/components/Grid/SliverGrid/index.dart @@ -40,7 +40,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'SliverGrid', - codeUrl: 'components/Grid/GridPaper/demo.dart', + codeUrl: 'components/Grid/SliverGrid/demo.dart', contentList: [ _Text0, SliverGridDemo(), diff --git a/lib/widgets/components/LIst/ListView/index.dart b/lib/widgets/components/LIst/ListView/index.dart index 1bbebf52..c43ff044 100644 --- a/lib/widgets/components/LIst/ListView/index.dart +++ b/lib/widgets/components/LIst/ListView/index.dart @@ -67,7 +67,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'ListView', - codeUrl: '/componentss/List/ListView/demo.dart', + codeUrl: 'components/List/ListView/demo.dart', contentList: [allCheckboxs(context, this)], docUrl: 'https://docs.flutter.io/flutter/widgets/ListView-class.html', ); diff --git a/lib/widgets/components/Menu/PopupMenuEntry/index.dart b/lib/widgets/components/Menu/PopupMenuEntry/index.dart index e5c46fe9..6443f446 100644 --- a/lib/widgets/components/Menu/PopupMenuEntry/index.dart +++ b/lib/widgets/components/Menu/PopupMenuEntry/index.dart @@ -34,7 +34,7 @@ class _DemoState extends State { PopupMenuDividerDemo() ], docUrl: 'https://docs.flutter.io/flutter/material/PopupMenuEntry-class.html', - codeUrl: 'components/Menu/PopupMenuEntry/demo.dart', + codeUrl: 'components/Menu/PopupMenuDivider/demo.dart', title: 'PopupMenuEntry', ); } diff --git a/lib/widgets/components/Menu/PopupMenuItem/index.dart b/lib/widgets/components/Menu/PopupMenuItem/index.dart index f8b8e315..1e1705b9 100644 --- a/lib/widgets/components/Menu/PopupMenuItem/index.dart +++ b/lib/widgets/components/Menu/PopupMenuItem/index.dart @@ -34,7 +34,7 @@ class _DemoState extends State { PopupMenuDividerDemo() ], docUrl: "https://docs.flutter.io/flutter/material/PopupMenuItem-class.html", - codeUrl: 'components/Menu/PopupMenuEntry/demo.dart', + codeUrl: 'components/Menu/PopupMenuDivider/demo.dart', title: 'PopupMenuItem', ); } diff --git a/lib/widgets/components/Progress/CircularProgressIndicator/index.dart b/lib/widgets/components/Progress/CircularProgressIndicator/index.dart index 5a44e5e7..a90ddc2d 100644 --- a/lib/widgets/components/Progress/CircularProgressIndicator/index.dart +++ b/lib/widgets/components/Progress/CircularProgressIndicator/index.dart @@ -38,7 +38,7 @@ class _DemoState extends State { content1, CircularDemo(), ], - codeUrl: '/components/Progress/CircularProgressIndicator/demo.dart', + codeUrl: 'components/Progress/CircularProgressIndicator/demo.dart', docUrl: 'https://docs.flutter.io/flutter/material/LinearProgressIndicator-class.html', title: 'CircularProgressIndicator'); diff --git a/lib/widgets/components/Progress/LinearProgressIndicator/index.dart b/lib/widgets/components/Progress/LinearProgressIndicator/index.dart index 9d2c1a32..4d8d635f 100644 --- a/lib/widgets/components/Progress/LinearProgressIndicator/index.dart +++ b/lib/widgets/components/Progress/LinearProgressIndicator/index.dart @@ -38,7 +38,7 @@ class _DemoState extends State { content1, LinearProgressIndicatorDemo(), ], - codeUrl: '/components/Progress/LinearProgressIndicator/demo.dart', + codeUrl: 'components/Progress/LinearProgressIndicator/demo.dart', docUrl: 'https://docs.flutter.io/flutter/material/LinearProgressIndicator-class.html', title: 'LinearProgressIndicator'); diff --git a/lib/widgets/components/Progress/RefreshProgressIndicator/index.dart b/lib/widgets/components/Progress/RefreshProgressIndicator/index.dart index bd447cc9..b9c436fb 100644 --- a/lib/widgets/components/Progress/RefreshProgressIndicator/index.dart +++ b/lib/widgets/components/Progress/RefreshProgressIndicator/index.dart @@ -35,7 +35,7 @@ class _DemoState extends State { content1, // LinearProgressIndicatorDemo(), ], - codeUrl: '/components/Progress/RefreshProgressIndicator/demo.dart', + codeUrl: 'components/Progress/RefreshProgressIndicator/demo.dart', docUrl:'https://docs.flutter.io/flutter/material/RefreshProgressIndicator-class.html', title: 'RefreshProgressIndicator'); } diff --git a/lib/widgets/elements/Form/Switch/Switch/index.dart b/lib/widgets/elements/Form/Switch/Switch/index.dart index ce55a73a..afd390e7 100644 --- a/lib/widgets/elements/Form/Switch/Switch/index.dart +++ b/lib/widgets/elements/Form/Switch/Switch/index.dart @@ -83,7 +83,7 @@ class _Demo extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'Switch', - codeUrl: '', + codeUrl: 'elements/Form/Switch/Switch/demo.dart', contentList: [ contentA, SwitchDemo(), diff --git a/lib/widgets/elements/Form/Text/Text/index.dart b/lib/widgets/elements/Form/Text/Text/index.dart index d51aa94c..962aeec2 100644 --- a/lib/widgets/elements/Form/Text/Text/index.dart +++ b/lib/widgets/elements/Form/Text/Text/index.dart @@ -38,7 +38,7 @@ class _Demo extends State { return WidgetDemo( title: "Text", docUrl: 'flutter/widgets/Text-class.html', - codeUrl: 'elements/Form/Text/Text/index.dart', + codeUrl: 'elements/Form/Text/Text/demo.dart', contentList: [ intro, TextDemo(), diff --git a/lib/widgets/elements/Media/Image/DecorationImage/index.dart b/lib/widgets/elements/Media/Image/DecorationImage/index.dart index 25d40d4c..8fadb96b 100644 --- a/lib/widgets/elements/Media/Image/DecorationImage/index.dart +++ b/lib/widgets/elements/Media/Image/DecorationImage/index.dart @@ -38,7 +38,7 @@ class _DemoState extends State { contentText1, DecorationImageDemo(), ], - codeUrl: 'elements/Media/Image/DecorationImage/index.dart?1542705856254', + codeUrl: 'elements/Media/Image/DecorationImage/decorationImage_demo.dart', docUrl: 'https://docs.flutter.io/flutter/painting/DecorationImage-class.html', title: 'DecorationImage', diff --git a/lib/widgets/elements/Media/Image/MemoryImage/index.dart b/lib/widgets/elements/Media/Image/MemoryImage/index.dart index a7d42d87..b81c9587 100644 --- a/lib/widgets/elements/Media/Image/MemoryImage/index.dart +++ b/lib/widgets/elements/Media/Image/MemoryImage/index.dart @@ -40,7 +40,7 @@ class _DemoState extends State { // desc: 'MemoryImage 使用介绍', docUrl: 'https://docs.flutter.io/flutter/painting/MemoryImage-class.html', codeUrl: - 'elements/Media/Image/MemoryImage/index.dart?1542777213280', + 'elements/Media/Image/MemoryImage/index.dart', ); } } diff --git a/lib/widgets/elements/Media/Image/NetworkImage/index.dart b/lib/widgets/elements/Media/Image/NetworkImage/index.dart index b417e84c..4f488956 100644 --- a/lib/widgets/elements/Media/Image/NetworkImage/index.dart +++ b/lib/widgets/elements/Media/Image/NetworkImage/index.dart @@ -34,7 +34,7 @@ class _DemoState extends State { contentText1, NetworkImageDemo(), ], - codeUrl: '', + codeUrl: 'elements/Media/Image/NetworkImage/network_image_demo.dart', docUrl: 'https://docs.flutter.io/flutter/painting/NetworkImage-class.html', title: 'NetworkImage', ); diff --git a/lib/widgets/themes/Cupertino/CupertinoApp/index.dart b/lib/widgets/themes/Cupertino/CupertinoApp/index.dart index 124c1658..4fd0f923 100644 --- a/lib/widgets/themes/Cupertino/CupertinoApp/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoApp/index.dart @@ -47,7 +47,7 @@ class _DemoState extends State { ], title: 'CupertinoApp', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoApp-class.html', - codeUrl: '/themes/Cupertino/CupertinoApp/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoApp/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoButton/index.dart b/lib/widgets/themes/Cupertino/CupertinoButton/index.dart index 4f69f315..71a6ce57 100644 --- a/lib/widgets/themes/Cupertino/CupertinoButton/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoButton/index.dart @@ -39,7 +39,7 @@ class _DemoState extends State { ], title: 'CupertinoButton', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoButton-class.html', - codeUrl: '/themes/Cupertino/CupertinoButton/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoButton/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoColors/index.dart b/lib/widgets/themes/Cupertino/CupertinoColors/index.dart index d8f5e6ca..6215b60c 100644 --- a/lib/widgets/themes/Cupertino/CupertinoColors/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoColors/index.dart @@ -36,7 +36,7 @@ class _DemoState extends State { ], title: 'CupertinoColors', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoColors-class.html', - codeUrl: '/themes/Cupertino/CupertinoColor/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoColor/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoIcons/index.dart b/lib/widgets/themes/Cupertino/CupertinoIcons/index.dart index 93b60c1d..ef378cc7 100644 --- a/lib/widgets/themes/Cupertino/CupertinoIcons/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoIcons/index.dart @@ -38,7 +38,7 @@ class _DemoState extends State { ], title: 'CupertinoIcons', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoIcons-class.html', - codeUrl: '/themes/Cupertino/CupertinoColor/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoColor/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoNavigationBar/index.dart b/lib/widgets/themes/Cupertino/CupertinoNavigationBar/index.dart index 939e791c..85ded637 100644 --- a/lib/widgets/themes/Cupertino/CupertinoNavigationBar/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoNavigationBar/index.dart @@ -48,7 +48,7 @@ class _DemoState extends State { ], title: 'CupertinoNavigationBar', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoNavigationBar-class.html', - codeUrl: '/themes/Cupertino/CupertinoNavigationBar/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoNavigationBar/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoPageRoute/index.dart b/lib/widgets/themes/Cupertino/CupertinoPageRoute/index.dart index e61ebc04..b492204b 100644 --- a/lib/widgets/themes/Cupertino/CupertinoPageRoute/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoPageRoute/index.dart @@ -41,7 +41,7 @@ class _DemoState extends State { ], title: 'CupertinoPageRoute', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoPageRoute-class.html', - codeUrl: '/themes/Cupertino/CupertinoPageRoute/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoPageRoute/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoPageScaffold/index.dart b/lib/widgets/themes/Cupertino/CupertinoPageScaffold/index.dart index 4e1808de..4c22b429 100644 --- a/lib/widgets/themes/Cupertino/CupertinoPageScaffold/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoPageScaffold/index.dart @@ -39,7 +39,7 @@ class _DemoState extends State { ], title: 'CupertinoPageScaffold', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoPageScaffold-class.html', - codeUrl: '/themes/Cupertino/CupertinoPageScaffold/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoPageScaffold/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoPicker/index.dart b/lib/widgets/themes/Cupertino/CupertinoPicker/index.dart index 24e93819..58e8328c 100644 --- a/lib/widgets/themes/Cupertino/CupertinoPicker/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoPicker/index.dart @@ -39,7 +39,7 @@ class _DemoState extends State { ], title: 'CupertinoPicker', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoPicker-class.html', - codeUrl: '/themes/Cupertino/CupertinoPicker/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoPicker/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoPopupSurface/index.dart b/lib/widgets/themes/Cupertino/CupertinoPopupSurface/index.dart index 24d5a09a..a4030a16 100644 --- a/lib/widgets/themes/Cupertino/CupertinoPopupSurface/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoPopupSurface/index.dart @@ -38,7 +38,7 @@ class _DemoState extends State { ], title: 'CupertinoPopupSurface', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoPopupSurface-class.html', - codeUrl: '/themes/Cupertino/CupertinoPopupSurface/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoPopupSurface/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoScrollbar/index.dart b/lib/widgets/themes/Cupertino/CupertinoScrollbar/index.dart index 8e598703..229566e6 100644 --- a/lib/widgets/themes/Cupertino/CupertinoScrollbar/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoScrollbar/index.dart @@ -27,7 +27,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoScrollbar', - codeUrl: '/themes/Cupertino/CupertinoScrollbar/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoScrollbar/demo.dart', docUrl: 'https://docs.flutter.io/flutter/material/MaterialAccentColor-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/index.dart b/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/index.dart index 2eb2d7c8..1fef5c8f 100644 --- a/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/index.dart @@ -32,7 +32,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoSegmentedControl', - codeUrl: '/themes/Cupertino/CupertinoSegmentedControl/demo.dart', + codeUrl: '/hemes/Cupertino/CupertinoSegmentedControl/demo.dart', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoSegmentedControl-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Cupertino/CupertinoSlider/index.dart b/lib/widgets/themes/Cupertino/CupertinoSlider/index.dart index a3b73bd0..a0c82e86 100644 --- a/lib/widgets/themes/Cupertino/CupertinoSlider/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoSlider/index.dart @@ -27,7 +27,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoSlider', - codeUrl: '/themes/Cupertino/CupertinoSlider/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoSlider/demo.dart', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoSlider-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/index.dart b/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/index.dart index 6b48e1c5..11c13344 100644 --- a/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/index.dart @@ -24,7 +24,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoSlider', - codeUrl: '/themes/Cupertino/CupertinoSliverNavigationBar/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoSliverNavigationBar/demo.dart', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoSliverNavigationBar-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Cupertino/CupertinoSwitch/index.dart b/lib/widgets/themes/Cupertino/CupertinoSwitch/index.dart index b86d294a..d5f315b1 100644 --- a/lib/widgets/themes/Cupertino/CupertinoSwitch/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoSwitch/index.dart @@ -25,7 +25,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoSlider', - codeUrl: '/themes/Cupertino/CupertinoSwitch/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoSwitch/demo.dart', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoSwitch-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Cupertino/CupertinoTabBar/index.dart b/lib/widgets/themes/Cupertino/CupertinoTabBar/index.dart index ee63deea..641f8d96 100644 --- a/lib/widgets/themes/Cupertino/CupertinoTabBar/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoTabBar/index.dart @@ -33,7 +33,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoTabBar', - codeUrl: '/themes/Cupertino/CupertinoTabBar/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoTabBar/demo.dart', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoTabBar-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Cupertino/CupertinoTabScaffold/index.dart b/lib/widgets/themes/Cupertino/CupertinoTabScaffold/index.dart index 5dcd85e9..ee25a4e7 100644 --- a/lib/widgets/themes/Cupertino/CupertinoTabScaffold/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoTabScaffold/index.dart @@ -39,7 +39,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoTabScaffold', - codeUrl: '/themes/Cupertino/CupertinoTabScaffold/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoTabScaffold/demo.dart', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoTabScaffold-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Cupertino/CupertinoTabView/index.dart b/lib/widgets/themes/Cupertino/CupertinoTabView/index.dart index 5cdb8516..214b7897 100644 --- a/lib/widgets/themes/Cupertino/CupertinoTabView/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoTabView/index.dart @@ -42,7 +42,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoTabView', - codeUrl: '/themes/Cupertino/CupertinoTabView/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoTabView/demo.dart', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoTabView-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Cupertino/CupertinoTimerPicker/index.dart b/lib/widgets/themes/Cupertino/CupertinoTimerPicker/index.dart index 6c882cfa..799db8a0 100644 --- a/lib/widgets/themes/Cupertino/CupertinoTimerPicker/index.dart +++ b/lib/widgets/themes/Cupertino/CupertinoTimerPicker/index.dart @@ -40,7 +40,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'CupertinoTimerPicker', - codeUrl: '/themes/Cupertino/CupertinoTimerPicker/demo.dart', + codeUrl: 'themes/Cupertino/CupertinoTimerPicker/demo.dart', docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoTimerPicker-class.html', contentList: [ Text0, diff --git a/lib/widgets/themes/Material/MaterialAccentColor/index.dart b/lib/widgets/themes/Material/MaterialAccentColor/index.dart index 3e29db7d..8f25f82d 100644 --- a/lib/widgets/themes/Material/MaterialAccentColor/index.dart +++ b/lib/widgets/themes/Material/MaterialAccentColor/index.dart @@ -28,7 +28,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'MaterialAccentColor', - codeUrl: 'elements/themes/Material/MaterialAccentColor', + codeUrl: 'themes/Material/MaterialColor/demo.dart', docUrl: 'https://docs.flutter.io/flutter/material/MaterialAccentColor-class.html', contentList: [ diff --git a/lib/widgets/themes/Material/MaterialApp/index.dart b/lib/widgets/themes/Material/MaterialApp/index.dart index d6a9918b..907f21c9 100644 --- a/lib/widgets/themes/Material/MaterialApp/index.dart +++ b/lib/widgets/themes/Material/MaterialApp/index.dart @@ -47,7 +47,7 @@ class _DemoState extends State { ], title: 'MaterialApp', docUrl: 'https://docs.flutter.io/flutter/material/MaterialApp-class.html', - codeUrl: '../main.dart', + codeUrl: 'themes/Material/MaterialApp/demo.dart', ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Material/MaterialButton/index.dart b/lib/widgets/themes/Material/MaterialButton/index.dart index 7716f8a5..4efa8c79 100644 --- a/lib/widgets/themes/Material/MaterialButton/index.dart +++ b/lib/widgets/themes/Material/MaterialButton/index.dart @@ -39,7 +39,7 @@ class _DemoState extends State { MaterialButtonDemo(), ], title: 'MaterialButton', - codeUrl: 'Material/MaterialButton/demo.dart', + codeUrl: 'themes/Material/MaterialButton/demo.dart', docUrl: 'https://docs.flutter.io/flutter/material/MaterialButton-class.html', ); diff --git a/lib/widgets/themes/Material/MaterialColor/index.dart b/lib/widgets/themes/Material/MaterialColor/index.dart index 2d115912..5789c94d 100644 --- a/lib/widgets/themes/Material/MaterialColor/index.dart +++ b/lib/widgets/themes/Material/MaterialColor/index.dart @@ -36,7 +36,7 @@ class _DemoState extends State { ColorDemo(), ], title: "MaterialColor", - codeUrl: 'Material/MaterialColor/demo.dart', + codeUrl: 'themes/Material/MaterialColor/demo.dart', docUrl: 'https://docs.flutter.io/flutter/material/MaterialColor-class.html', ); diff --git a/lib/widgets/themes/Material/MaterialPageRoute/index.dart b/lib/widgets/themes/Material/MaterialPageRoute/index.dart index f4060185..a93a03eb 100644 --- a/lib/widgets/themes/Material/MaterialPageRoute/index.dart +++ b/lib/widgets/themes/Material/MaterialPageRoute/index.dart @@ -27,7 +27,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'MaterialPageRoute', - codeUrl: 'elements/themes/Material/MaterialPageRoute', + codeUrl: 'themes/Material/MaterialPageRoute/demo.dart', docUrl: 'https://docs.flutter.io/flutter/material/MaterialPageRoute-class.html', contentList: [ diff --git a/lib/widgets/themes/Material/MergeableMaterialItem/index.dart b/lib/widgets/themes/Material/MergeableMaterialItem/index.dart index 291de1f0..63d3682f 100644 --- a/lib/widgets/themes/Material/MergeableMaterialItem/index.dart +++ b/lib/widgets/themes/Material/MergeableMaterialItem/index.dart @@ -37,7 +37,7 @@ class _DemoState extends State { MergeableMaterialItemDemo(), ], title: "MergeableMaterialItem", - codeUrl: 'Material/MergeableMaterialItem/demo.dart', + codeUrl: 'themes/Material/MergeableMaterialItem/demo.dart', docUrl: 'https://docs.flutter.io/flutter/material/MergeableMaterialItem-class.html', ); diff --git a/pubspec.yaml b/pubspec.yaml index 8c5619c0..70beef7c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -72,9 +72,11 @@ flutter: - lib/widgets/components/Grid/GridTile/demo.dart - lib/widgets/components/Grid/GridTileBar/demo.dart - lib/widgets/components/Grid/GridView/demo.dart - - lib/widgets/components/LIst/AnimatedList/demo.dart - - lib/widgets/components/LIst/ListBody/demo.dart - - lib/widgets/components/LIst/ListView/demo.dart + - lib/widgets/components/Grid/GridPaper/demo.dart + - lib/widgets/components/Grid/SliverGrid/demo.dart + - lib/widgets/components/List/AnimatedList/demo.dart + - lib/widgets/components/List/ListBody/demo.dart + - lib/widgets/components/List/ListView/demo.dart - lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart - lib/widgets/components/Menu/DropdownMenuItem/demo.dart - lib/widgets/components/Menu/PopupMenuButton/demo.dart @@ -130,6 +132,8 @@ flutter: - lib/widgets/elements/Frame/Box/SizeBox/demo.dart - lib/widgets/elements/Frame/Box/SizedOverflowBox/demo.dart - lib/widgets/elements/Frame/Box/TextBox/demo.dart + - lib/widgets/elements/Form/Text/Text/demo.dart + - lib/widgets/elements/Form/Text/RichText/index.dart - lib/widgets/elements/Frame/Box/UnconstrainedBox/demo.dart - lib/widgets/elements/Frame/Expanded/Expanded/expanded_demo.dart - lib/widgets/elements/Frame/Layout/Center/demo.dart From 587f2ac183db7bcd0b2622b10e00ca044ef1e792 Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 30 Jan 2019 21:31:14 +0800 Subject: [PATCH 15/28] =?UTF-8?q?feat(add=C2=A0=E8=BF=99=E4=BA=9B=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=9A1.canvas=202.=20cricleProgressBarPainter=203.?= =?UTF-8?q?PainterPath=204.=20PainterSketch):=20add=C2=A0=E8=BF=99?= =?UTF-8?q?=E4=BA=9B=E7=BB=84=E4=BB=B6=EF=BC=9A1.canva?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add 这些组件:1.canvas 2. cricleProgressBarPainter 3.PainterPath 4. PainterSketch --- assets/app.db | Bin 53248 -> 53248 bytes assets/images/painterImg.jpeg | Bin 0 -> 189512 bytes lib/components/full_screen_code_dialog.dart | 1 + lib/resources/widget_name_to_icon.dart | 3 + lib/utils/provider.dart | 1 + .../elements/Media/Canvas/Canvas/demo.dart | 203 +++++++++++++++++ .../elements/Media/Canvas/Canvas/index.dart | 90 ++++++++ .../Canvas/CircleProgressBarPainter/demo.dart | 103 +++++++++ .../CircleProgressBarPainter/index.dart | 37 +++ .../Media/Canvas/PainterPath/demo.dart | 180 +++++++++++++++ .../Media/Canvas/PainterPath/index.dart | 65 ++++++ .../Media/Canvas/PainterSketch/demo.dart | 213 ++++++++++++++++++ .../Media/Canvas/PainterSketch/index.dart | 37 +++ lib/widgets/elements/Media/Canvas/index.dart | 32 ++- lib/widgets/elements/Media/index.dart | 2 + pubspec.yaml | 4 + 16 files changed, 970 insertions(+), 1 deletion(-) create mode 100644 assets/images/painterImg.jpeg create mode 100644 lib/widgets/elements/Media/Canvas/Canvas/demo.dart create mode 100644 lib/widgets/elements/Media/Canvas/Canvas/index.dart create mode 100644 lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/demo.dart create mode 100644 lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/index.dart create mode 100644 lib/widgets/elements/Media/Canvas/PainterPath/demo.dart create mode 100644 lib/widgets/elements/Media/Canvas/PainterPath/index.dart create mode 100644 lib/widgets/elements/Media/Canvas/PainterSketch/demo.dart create mode 100644 lib/widgets/elements/Media/Canvas/PainterSketch/index.dart diff --git a/assets/app.db b/assets/app.db index 0955a802a146bf786621e0b33b67bdfa3f433ff7..5e5ef44d2c6f0bdc93f218d4910da8bbef7c74e4 100644 GIT binary patch delta 404 zcmZozz}&Ead4e?Km5DOWj8`@$ERtsvV(8}KVB5^0AjrsS!E=JQX0x2)7cMql0|qu` z=E)K|3LNarOiT>h7`9Dz(CL71wli#>d_iY5Ckt3=2g8odExKt!j5{{Jwzp)~Gh*gs zP*xTf7G;zSNX*PDNi7OUEXhD(X67cQr>5j5r=;fQ%We*G-o(QwIhi#;pNlJ(Q;(;P z<1)wPjg3<|CSQ*5auZ=NHwPQ#Tw0J?RFauz)M!qM@lSR%JexUxb8;jzqZJo}yF1V< zpGGrI23uQ*shLH|IjI3f`RPTe#l=pEK&OIT?2IZtIUrkc^tw)_4>vb|6%}oOn;;R delta 330 zcmZozz}&Ead4e?Kg^4oGj2AX0ERtsvVCdlCVA;%}Ajrtd!2^Vwlfm3vTv(J*(z&!CwWuUBFFz!sG&d9>j5d)B?(V3XgL5*=Qj3C8(~44yGo17DN{aGx;D(?`PWFnH t+Po)fBcr)5gS9oPDFKP;sUby)dBvF}nfZBe{iwo|1>=P`Z;$aT1_0QiZY%%* diff --git a/assets/images/painterImg.jpeg b/assets/images/painterImg.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b602c1b425df3a4b39a2ac42c5cf4aff04f45d96 GIT binary patch literal 189512 zcmeFY2UJsA_bOT@op7A;692{LlHmd&mEcci+4Jd&hWhe4DZM`Z4#~bI-Xl*IIL~J@@hZ z<3)hm!qnUpprZqT%d|h>m;n4@f`H!y04pm%9sqz709_&+V5A{h6F`(!0D%5?`oAdj zb-y$Gh3PteUOe6ew6FSyM1+L?`KR#-3MgVW#F+O#Tpx{k_-i+qdYs0U#(iBFxsz=(Mwo>uDAeO&WTD z4G;hzUOwTsFJ8TROc7ZecGG;Lv~<7=_jwh$^UbJ=Z0^%4^8>2wC3J7!hM2h zxS3YEeQt+E000B60FqG=w}0ZtG|V4H6Oe}Meqz5r@vEQM`%gUiM;m)vV_KUPTKBSh zd4>4_0NW0Ye)^7&AB_(?KMkJ`z5x%W;Y&1Z=;QBogN7f{uwqb9$WQ!?hGo6~g^%CA zU@tH4zj=Cj`TdRm)P;5@?ZKDe;kR#j-TmXA|H@O)tw>sb{c)V7o!R}vF5A*-L0X?x z2ZmVwjf1_dVSmx#G>!hk{*jj*{=z=t#B;1TBb zf8nqY+rRk--?IK`AAiW;?`!@y_6;|&`-^@PZfgD)j`p{A`U~HIJ6ivR!vpR9mLb~T z_-}exr0w4_-wZSTTgRYq+MWOLTpzE0J}biCo;KG0l*c#R`EPk{_+B#kn;z`&w`{i~ zjQ-|%`_><}{)aBUx6J;ghu^XL``(B!`@iV{UKT%X_mB3sBd-44Kfoox1h_)`I}Ka~ zQ~`D10c3 zkFiB3c;cTl-*Ny@*Qfp7O8=z!zXgDoJOIEW{!f}LZIHO$|=_2Wnba8a4bXjx-bft6{x<mA;35h<=KGk$#eXVn|`gV|dEYz|g@k$S}dM$gsiigOQn$kMT64 z5~CjDWkv@^AI4Bd6k{4=0b?~|D`Owy1S5fw%y`7a!6eS4z@*D$&g9JG#}vhsz?8>S z$<)Hs&osrf#I(oE%q++(!>q-8nc0OofcYMC8gnr-miZO)7&D1^mxYBzghheHfCa|l z#S+1i!19Epjs?du&a%V;o?trxIiY&O^n~k);1jVY@=ny8=sq!iV)?|uN$!(UCv{K4 zPTn|q_hjbD@{=7WM^7%DJYeNvm0>ktwPy`reZcydwSl#t^&{&x8ynkMHXSw_HaOd_ zY>(NVvHgRM!1jZkmtCISnEe`iBzp#X75gjpS@vxX4i0IKUpQPjA~-TQFdTS}c@B`1 zk5ie`obv`}3}+!{E9W@pSFV#>Qd}3gJh-B{^0=C~M!7b)PjX9h8*_VcqqqyX+qq}B zcX{}DF7Uv3f_Tz+YIt7rtnjk%O7oiV-r#-6TgHp$CGj!vN%9%<`S8W@mGkxUE%7t+ z%kZ1?2k@uz*Yl6?lLdGM)CC*`5CVk)T>^`O41&^v=7P5bGXWcpMQuc*L`y{bMK{Fw#q`8{ z#8Skbi_MACi_44Kir*726MrkddrIPz*{R#7o}9v;+K>>G_(dW>B1fWIVim#%F@(S& zIS?FV?XGg$etf#`H2IA9nagJ)&y=1SIdgDU=B&fn*t6KPpCnl&wIy##=1BHR zlFvcTS)D_kt35X-by7-O%3ms9YEbICw2ZWqbfR>d^ooqIjJZs-Os&jESq@pKY^dy0 z*-1HOIc>Q>xnj9@^7Qf=^8WIL@}mm$3YrRVg<^#=N*9&xDAg(v zlm(TqD90+dDSuTtr{b#eNM%sv=)A`HTj$Hqf4IPV!Qw*fg^ml~ROMBDR0~xn)i~5l z)ne3Ms8Q4v)P2=U)Zc6HX;^6_YV>LxYHDeQX*OuCYMs-%u2rNpqs^~n1Me>&$zf}IRd{ORVz{R?YUyaTig&DONeK*!MzHj{M62m34ODUH|On6NkObSfq zP0yP8nbw+;%{0vJnZ3HqblLLqqsueqr_6oKG3I0oEsOgWeU|K&c9sQ}#4GYw!me~! z(OX$qWm|o;ma-1EZi4|Zb67U)(^Z+Pp;uqpFxyAKVPn(I_AnAcOUU2k*mB5$&fu}{9w`i)<1 z
  • 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 ~1>bT1$Nv_gw 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%0AxyXkQm(OT928(ux1hOaQ0PvjiO#k~#!HFCEEV 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 j{jV+0U%SEoZ#T-e|7pVK|HE { @override void didChangeDependencies() { + print('widget.filePath=======${widget.filePath}'); getExampleCode(context,'${widget.filePath}', DefaultAssetBundle.of(context)) .then((String code) { if (mounted) { diff --git a/lib/resources/widget_name_to_icon.dart b/lib/resources/widget_name_to_icon.dart index 95dff598..644d145d 100644 --- a/lib/resources/widget_name_to_icon.dart +++ b/lib/resources/widget_name_to_icon.dart @@ -78,6 +78,9 @@ class WidgetName2Icon { "IconData":Icons.date_range, "IconThemeData":Icons.insert_comment, "Canvas":Icons.edit, + "PainterPath":Icons.gesture, + "CircleProgressBarPainter":Icons.av_timer, + "PainterSketch":Icons.touch_app, "Material":Icons.android, "MaterialApp":Icons.android, "MaterialButton":Icons.speaker, diff --git a/lib/utils/provider.dart b/lib/utils/provider.dart index 35a354c7..643addfa 100644 --- a/lib/utils/provider.dart +++ b/lib/utils/provider.dart @@ -59,6 +59,7 @@ class Provider { //Get a location using getDatabasesPath String databasesPath = await getDatabasesPath(); String path = join(databasesPath, 'flutter.db'); + print(path); try { db = await openDatabase(path); } catch (e) { diff --git a/lib/widgets/elements/Media/Canvas/Canvas/demo.dart b/lib/widgets/elements/Media/Canvas/Canvas/demo.dart new file mode 100644 index 00000000..24b779af --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/Canvas/demo.dart @@ -0,0 +1,203 @@ +/** + * Created with Android Studio. + * User: ryan + * Date: 2019/1/20 + * Time: 上午11:34 + * email: zhu.yan@alibaba-inc.com + * tartget: Canvas 的示例 + */ +import 'package:flutter/material.dart'; +import 'dart:ui'; +import 'dart:ui' as ui; +import 'dart:typed_data'; +import 'package:flutter/services.dart' show rootBundle; + +CustomPaint graph; +var image; + +class CustomViewPage extends StatefulWidget { + + final String type; + CustomViewPage({this.type='drawLine'}) : super(); + + @override + State createState() => CustomViewPageState(); +} + +class CustomViewPageState extends State + with SingleTickerProviderStateMixin { + + static Future getImage(String asset) async { + ByteData data = await rootBundle.load(asset); + Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List()); + FrameInfo fi = await codec.getNextFrame(); + return fi.image; + } + + @override + void initState() { + super.initState(); + getImage("assets/images/painterImg.jpeg").then((data) { + setState(() { + image = data; + }); + }); + } + + @override + Widget build(BuildContext context) { + graph = CustomPaint( + painter: DrawPainter(type:widget.type) + ); + return Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.width * 0.6, + margin: EdgeInsets.all(10.0), + //padding: EdgeInsets.all(10.0), + child: graph + //child:Center(child: graph) + ); + } + + + @override + void reassemble() { + super.reassemble(); + } + + @override + void dispose() { + super.dispose(); + } +} + +///新建类继承于CustomPainter并且实现CustomPainter里面的paint()和shouldRepaint方法 +class DrawPainter extends CustomPainter { + Paint painter; + final type; + + DrawPainter ({this.type}){ + // Paint painter = Paint() + // ..color = Colors.blueAccent //画笔颜色 + // ..strokeCap = StrokeCap.round //画笔笔触类型 + // ..isAntiAlias = true //是否启动抗锯齿 + // ..blendMode = BlendMode.exclusion //颜色混合模式 + // ..style = PaintingStyle.fill //绘画风格,默认为填充 + // ..colorFilter = ColorFilter.mode(Colors.blueAccent,BlendMode.exclusion) //颜色渲染模式,一般是矩阵效果来改变的,但是flutter中只能使用颜色混合模式 + // ..maskFilter = MaskFilter.blur(BlurStyle.inner, 3.0) //模糊遮罩效果,flutter中只有这个 + // ..filterQuality = FilterQuality.high //颜色渲染模式的质量 + // ..strokeWidth = 15.0 ;//画笔的宽度 + + painter = new Paint() + ..color = Colors.blueAccent + ..strokeCap = StrokeCap.round + ..isAntiAlias = true + ..strokeWidth = 5.0 + ..filterQuality = FilterQuality.high + ..style = PaintingStyle.stroke; + } + ///Flutter中负责View绘制的地方,使用传递来的canvas和size即可完成对目标View的绘制 + + @override + void paint(Canvas canvas, Size size) { + switch(type) { + case 'drawPoints': + const List points1 = [Offset(20.0, 0.0), Offset(100.0, 50.0), Offset(150.0, 0.0),Offset(300.0, 0.0)]; + const List points2 = [Offset(20.0, 100.0), Offset(100.0, 100.0), Offset(150.0, 100.0), Offset(300.0, 100.0)]; + const List points3 = [Offset(20.0, 150.0), Offset(100.0, 150.0), Offset(150.0, 180.0), Offset(300.0, 150.0)]; + //绘制点 + canvas.drawPoints( + ///PointMode的枚举类型有三个,points(点),lines(线,隔点连接),polygon(线,相邻连接) + PointMode.points, + points1, + painter..color = Colors.redAccent // 这里可以追加修改 painter 属性 + ..strokeWidth = 10.0 + ); + canvas.drawPoints( + ///PointMode的枚举类型有三个,points(点),lines(线,隔点连接),polygon(线,相邻连接) + PointMode.lines, + points2, + painter..color = Colors.orange // 这里可以追加修改 painter 属性 + ..strokeWidth = 10.0 + ); + canvas.drawPoints( + ///PointMode的枚举类型有三个,points(点),lines(线,隔点连接),polygon(线,相邻连接) + PointMode.polygon, + points3, + painter..color = Colors.blue // 这里可以追加修改 painter 属性 + ..strokeWidth = 10.0 + ); + break; + case 'drawLine': + //绘制直线 + canvas.drawLine(Offset(20.0, 0.0), Offset(size.width*0.8, 200), painter ..color = Colors.redAccent); + break; + case 'rawCircle': + //绘制圆 参数(圆心,半径,画笔) + canvas.drawCircle( + Offset(size.width/2, 100.0), + 100.0, + painter + ..color = Colors.greenAccent + ..style = PaintingStyle.stroke //绘画风格改为stroke + ); + break; + case 'drawOval': + // 绘制椭圆 + // 使用左上和右下角坐标来确定矩形的大小和位置,椭圆是在这个矩形之中内切的形状 + Rect rect1 = Rect.fromPoints(Offset(0.0, 0.0), Offset(size.width, 200.0)); + canvas.drawOval(rect1, painter ..color = Colors.indigo); + break; + case 'drawArc': + // 绘制圆弧 + // Rect来确认圆弧的位置,还需要开始的弧度、结束的弧度、是否使用中心点绘制、以及paint弧度 + const PI = 3.1415926; + Rect rect1 = Rect.fromCircle(center: Offset(20, 50.0), radius: 100.0); + canvas.drawArc(rect1, 0.0, PI / 2, false, painter ..color = Colors.pink); + + Rect rect2 = Rect.fromCircle(center: Offset(size.width*0.6, 50.0), radius: 100.0); + canvas.drawArc(rect2, 0.0, PI / 2, true, painter ..color = Colors.deepPurple); + break; + case 'drawRRect': + /// fromPoints(Offset a, Offset b) + /// 使用左上和右下角坐标来确定矩形的大小和位置 + /// fromCircle({ Offset center, double radius }) + /// 使用圆的圆心点坐标和半径和确定外切矩形的大小和位置 + /// fromLTRB(double left, double top, double right, double bottom) + /// 使用矩形左边的X坐标、矩形顶部的Y坐标、矩形右边的X坐标、矩形底部的Y坐标来确定矩形的大小和位置 + /// fromLTWH(double left, double top, double width, double height) + /// 使用矩形左边的X坐标、矩形顶部的Y坐标矩形的宽高来确定矩形的大小和位置 + // 用Rect构建一个边长50,中心点坐标为50,100的矩形 + Rect rect1 = Rect.fromCircle(center: Offset(80.0, 100.0), radius: 50.0); + Rect rect2 = Rect.fromCircle(center: Offset(250.0, 100.0), radius: 50.0); + // 根据上面的矩形,构建一个圆角矩形 + RRect rrect1 = RRect.fromRectAndRadius(rect1, Radius.circular(0.0)); + canvas.drawRRect(rrect1, painter); + RRect rrect2 = RRect.fromRectAndRadius(rect2, Radius.circular(20.0)); + canvas.drawRRect(rrect2, painter); + break; + case 'drawDRRect': + //绘制两个矩形 + Rect rect1 = Rect.fromCircle(center: Offset(size.width/2, 100.0), radius: 60.0); + Rect rect2 = Rect.fromCircle(center: Offset(size.width/2, 100.0), radius: 40.0); + //分别绘制外部圆角矩形和内部的圆角矩形 + RRect outer = RRect.fromRectAndRadius(rect1, Radius.circular(30.0)); + RRect inner = RRect.fromRectAndRadius(rect2, Radius.circular(5.0)); + canvas.drawDRRect(outer, inner, painter ..color = Colors.lime); + break; + case 'drawImage': + // canvas.drawImage(image, Offset(0.0, 0.0), painter); + final src = Rect.fromLTWH(0.0, 0.0, 684.0, 442.0); + final dst = Rect.fromLTWH(0.0, 0.0, size.width, size.height); + canvas.drawImageRect(image, src, dst, painter); + break; + } + //canvas.drawColor(Colors.red, BlendMode.colorDodge); + } + + ///控制自定义View是否需要重绘的,返回false代表这个View在构建完成后不需要重绘。 + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} diff --git a/lib/widgets/elements/Media/Canvas/Canvas/index.dart b/lib/widgets/elements/Media/Canvas/Canvas/index.dart new file mode 100644 index 00000000..c56588c6 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/Canvas/index.dart @@ -0,0 +1,90 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBoxs; + +const Text = ''' +### **简介** +> 用于操作图形的界面; +- canvas 对象用于创建图片对象,这些对象本身可以与 SceneBuilder 一起用于构建场景; +'''; +const Text1 = ''' +### **基本用法** +- 它可以使用“平移”、“缩放”、“旋转”、“倾斜”和“变换”方法进行修改; +- 可以使用 clipRect、clipCorrect 和 clipPath 方法进行修改; +- 可以使用由 save、savelayer和 restore 方法管理的堆栈来保存和还原当前的转换和剪辑。 +- 以下是绘制点,线,面的基本用法 +'''; + +const Text2 = ''' +> 绘制点 +- 绘制点有三种模式, points(点),lines(线,隔点连接),polygon(线,相邻连接) +'''; + +const Text3 = ''' +> 绘制直线 +'''; + +const Text4 = ''' +> 绘制圆 +'''; + +const Text5 = ''' +> 绘制椭圆 +- 使用左上和右下角坐标来确定矩形的大小和位置,椭圆是在这个矩形之中内切的形状 +'''; + +const Text6 = ''' +> 绘制圆弧 +- Rect 来确认圆弧的位置,还需要开始的弧度、结束的弧度、是否使用中心点绘制、以及 paint 弧度 +'''; + +const Text7 = ''' +> 绘制矩形,圆角矩形 +- 用 Rect构建矩形 +- 根据上面的矩形,构建一个圆角矩形 +'''; + +const Text8 = ''' +> 绘制两个相套矩形 +'''; + +const Text9 = ''' +> 绘制图片到canvas +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/element/Media/Canvas/PainterPath'; + + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'Canvas', + codeUrl: 'elements/Media/Canvas/Canvas/demo.dart', + contentList: [ + Text, + Text1, + Text2, + demoBoxs.CustomViewPage(type:'drawPoints'), + Text3, + demoBoxs.CustomViewPage(type:'drawLine'), + Text4, + demoBoxs.CustomViewPage(type:'rawCircle'), + Text5, + demoBoxs.CustomViewPage(type:'drawOval'), + Text6, + demoBoxs.CustomViewPage(type:'drawArc'), + Text7, + demoBoxs.CustomViewPage(type:'drawRRect'), + Text8, + demoBoxs.CustomViewPage(type:'drawDRRect'), + Text9, + demoBoxs.CustomViewPage(type:'drawImage') + ], + docUrl: 'https://docs.flutter.io/flutter/dart-ui/Canvas-class.html', + ); + } +} diff --git a/lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/demo.dart b/lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/demo.dart new file mode 100644 index 00000000..ce87e4cc --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/demo.dart @@ -0,0 +1,103 @@ +/** + * Created with Android Studio. + * User: ryan + * Date: 2019/1/20 + * Time: 上午11:34 + * email: zhu.yan@alibaba-inc.com + * tartget: CircleProgressBarPainter 的示例 + */ +import 'dart:ui'; +import 'package:flutter/material.dart'; + +class CustomViewPage extends StatefulWidget { + @override + State createState() => CustomViewPageState(); +} + +class CustomViewPageState extends State + with SingleTickerProviderStateMixin { + Animation _doubleAnimation; + AnimationController _controller; + CurvedAnimation curvedAnimation; + + @override + void initState() { + super.initState(); + _controller = + AnimationController(vsync: this, duration: Duration(seconds: 2)); + curvedAnimation = + CurvedAnimation(parent: _controller, curve: Curves.decelerate); + _doubleAnimation = Tween(begin: 0.0, end: 360.0).animate(_controller); + + _controller.addListener(() { + this.setState(() {}); + }); + onAnimationStart(); + } + + @override + Widget build(BuildContext context) { + return Container( + width: 100.0, + height: 100.0, + margin: EdgeInsets.all(8.0), + child: CustomPaint( + child: Center( + child: Text((_doubleAnimation.value / 3.6).round().toString())), + painter: CircleProgressBarPainter(_doubleAnimation.value) + ), + ); + } + + void onAnimationStart() { + _controller.forward(from: 0.0); + } + + @override + void reassemble() { + super.reassemble(); + onAnimationStart(); + } + + @override + void dispose() { + super.dispose(); + _controller.dispose(); + } +} + +class CircleProgressBarPainter extends CustomPainter { + Paint _paintBackground; + Paint _paintFore; + final double pi = 3.1415926; + var jindu; + + CircleProgressBarPainter(this.jindu) { + _paintBackground = Paint() + ..color = Colors.grey + ..strokeCap = StrokeCap.round + ..style = PaintingStyle.stroke + ..strokeWidth = 10.0 + ..isAntiAlias = true; + _paintFore = Paint() + ..color = Colors.red + ..strokeCap = StrokeCap.round + ..style = PaintingStyle.stroke + ..strokeWidth = 10.0 + ..isAntiAlias = true; + } + @override + void paint(Canvas canvas, Size size) { + canvas.drawCircle(Offset(size.width / 2, size.height / 2), size.width / 2,_paintBackground); + Rect rect = Rect.fromCircle( + center: Offset(size.width / 2, size.height / 2), + radius: size.width / 2, + ); + canvas.drawArc(rect, 0.0, jindu * 3.14 / 180, false, _paintFore); + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} \ No newline at end of file diff --git a/lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/index.dart b/lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/index.dart new file mode 100644 index 00000000..df054258 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/index.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBoxs; + +const Text = ''' +### **简介** +> 操作图形的界面; + +'''; +const Text1 = ''' +### **基本用法** +- canvas + Animation 实现一个 loading 效果; +'''; + + +class Demo extends StatefulWidget { + static const String routeName = '/element/Media/Canvas/CircleProgressBarPainter'; + + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'Canvas', + codeUrl: 'elements/Media/Canvas/CircleProgressBarPainter/demo.dart', + contentList: [ + Text, + Text1, + demoBoxs.CustomViewPage() + ], + docUrl: 'https://docs.flutter.io/flutter/dart-ui/Canvas-class.html', + ); + } +} + diff --git a/lib/widgets/elements/Media/Canvas/PainterPath/demo.dart b/lib/widgets/elements/Media/Canvas/PainterPath/demo.dart new file mode 100644 index 00000000..150da6b2 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/PainterPath/demo.dart @@ -0,0 +1,180 @@ +/** + * Created with Android Studio. + * User: ryan + * Date: 2019/1/20 + * Time: 上午11:34 + * email: zhu.yan@alibaba-inc.com + * tartget: PainterPath 的示例 + */ +import 'dart:ui'; +import 'package:flutter/material.dart'; +CustomPaint graph; + +class CustomViewPage extends StatefulWidget { + + final String type; + CustomViewPage({this.type='simpleline'}) : super(); + + @override + State createState() => CustomViewPageState(); +} + +class CustomViewPageState extends State + with SingleTickerProviderStateMixin { + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + graph = CustomPaint( + painter: DrawPainter(type:widget.type) + ); + return Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.width * 0.6, + margin: EdgeInsets.all(50.0), + //padding: EdgeInsets.all(10.0), + child: graph + //child:Center(child: graph) + ); + } + + + @override + void reassemble() { + super.reassemble(); + } + + @override + void dispose() { + super.dispose(); + } +} + +///新建类继承于CustomPainter并且实现CustomPainter里面的paint()和shouldRepaint方法 +class DrawPainter extends CustomPainter { + Paint painter; + final type; + + DrawPainter ({this.type}){ + // Paint painter = Paint() + // ..color = Colors.blueAccent //画笔颜色 + // ..strokeCap = StrokeCap.round //画笔笔触类型 + // ..isAntiAlias = true //是否启动抗锯齿 + // ..blendMode = BlendMode.exclusion //颜色混合模式 + // ..style = PaintingStyle.fill //绘画风格,默认为填充 + // ..colorFilter = ColorFilter.mode(Colors.blueAccent,BlendMode.exclusion) //颜色渲染模式,一般是矩阵效果来改变的,但是flutter中只能使用颜色混合模式 + // ..maskFilter = MaskFilter.blur(BlurStyle.inner, 3.0) //模糊遮罩效果,flutter中只有这个 + // ..filterQuality = FilterQuality.high //颜色渲染模式的质量 + // ..strokeWidth = 15.0 ;//画笔的宽度 + + painter = new Paint() + ..color = Colors.blueAccent + ..strokeCap = StrokeCap.round + ..isAntiAlias = true + ..strokeWidth = 5.0 + ..style = PaintingStyle.stroke; + } + ///Flutter中负责View绘制的地方,使用传递来的canvas和size即可完成对目标View的绘制 + + @override + void paint(Canvas canvas, Size size) { + //canvas.drawColor(Colors.red, BlendMode.colorDodge); + Path path = new Path(); + drawThisPath(canvas, size, path); + path.close(); + canvas.drawPath(path, painter); + } + + void drawThisPath(Canvas canvas, Size size, Path path,) { + switch(type) { + case 'simpleline': + //新建了一个path,然后将路径起始点移动到坐标(100,100)的位置 + Path path = new Path()..moveTo(0.0, 0.0); + path.lineTo(200.0, 200.0); + canvas.drawPath(path, painter); + break; + case 'polyline': + Path path = new Path()..moveTo(100.0, 10.0); + + path.lineTo(200.0, 150.0); + path.lineTo(100.0, 200.0); + + canvas.drawPath(path, painter); + break; + case 'Besizerline2': + Path path = new Path()..moveTo(0.0, 0.0); + Rect rect1 = Rect.fromCircle(center: Offset(50.0, 100.0), radius: 60.0); + path.arcTo(rect1, 0.0, 3.14, false); + canvas.drawPath(path, painter); + + Rect rect2 = Rect.fromCircle(center: Offset(200.0, 100.0), radius: 60.0); + path.arcTo(rect2, 0.0, 3.14*2, true); + canvas.drawPath(path, painter); + break; + case 'Besizerline3': + var width = size.width; + var height = 300; + Path path = new Path()..moveTo(width / 2, height / 4); + path.cubicTo((width * 6) / 7, height / 9, (width * 13) / 13, + (height * 2) / 5, width / 2, (height * 7) / 12); + canvas.drawPath(path, painter + // ..style = PaintingStyle.fill + // ..color = Colors.red + ); + + Path path2 = new Path(); + path2.moveTo(width / 2, height / 4); + path2.cubicTo(width / 7, height / 9, width / 21, (height * 2) / 5, + width / 2, (height * 7) / 12); + canvas.drawPath(path2, painter); + break; + case 'drawArc': + // 绘制圆弧 + // Rect来确认圆弧的位置,还需要开始的弧度、结束的弧度、是否使用中心点绘制、以及paint弧度 + const PI = 3.1415926; + Rect rect1 = Rect.fromCircle(center: Offset(size.width/2, 0.0), radius: 100.0); + canvas.drawArc(rect1, 0.0, PI / 2, false, painter ..color = Colors.pink); + + Rect rect2 = Rect.fromCircle(center: Offset(size.width/2, 150.0), radius: 100.0); + canvas.drawArc(rect2, 0.0, PI / 2, true, painter ..color = Colors.deepPurple); + break; + case 'drawRRect': + /// fromPoints(Offset a, Offset b) + /// 使用左上和右下角坐标来确定矩形的大小和位置 + /// fromCircle({ Offset center, double radius }) + /// 使用圆的圆心点坐标和半径和确定外切矩形的大小和位置 + /// fromLTRB(double left, double top, double right, double bottom) + /// 使用矩形左边的X坐标、矩形顶部的Y坐标、矩形右边的X坐标、矩形底部的Y坐标来确定矩形的大小和位置 + /// fromLTWH(double left, double top, double width, double height) + /// 使用矩形左边的X坐标、矩形顶部的Y坐标矩形的宽高来确定矩形的大小和位置 + // 用Rect构建一个边长50,中心点坐标为50,100的矩形 + Rect rect1 = Rect.fromCircle(center: Offset(50.0, 50.0), radius: 50.0); + Rect rect2 = Rect.fromCircle(center: Offset(200.0, 50.0), radius: 50.0); + // 根据上面的矩形,构建一个圆角矩形 + RRect rrect1 = RRect.fromRectAndRadius(rect1, Radius.circular(0.0)); + canvas.drawRRect(rrect1, painter); + RRect rrect2 = RRect.fromRectAndRadius(rect2, Radius.circular(20.0)); + canvas.drawRRect(rrect2, painter); + break; + case 'drawDRRect': + //绘制两个矩形 + Rect rect1 = Rect.fromCircle(center: Offset(size.width/2, 100.0), radius: 60.0); + Rect rect2 = Rect.fromCircle(center: Offset(size.width/2, 100.0), radius: 40.0); + //分别绘制外部圆角矩形和内部的圆角矩形 + RRect outer = RRect.fromRectAndRadius(rect1, Radius.circular(30.0)); + RRect inner = RRect.fromRectAndRadius(rect2, Radius.circular(5.0)); + canvas.drawDRRect(outer, inner, painter ..color = Colors.lime); + break; + } + } + + ///控制自定义View是否需要重绘的,返回false代表这个View在构建完成后不需要重绘。 + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} diff --git a/lib/widgets/elements/Media/Canvas/PainterPath/index.dart b/lib/widgets/elements/Media/Canvas/PainterPath/index.dart new file mode 100644 index 00000000..ae837e31 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/PainterPath/index.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBoxs; + +//const Text = ''' +//### **简介** +//> 在 canvas 上绘制时使用的样式说明; +//- canvas 上的大多数API都使用一个绘画对象来描述用于该操作的样式。 +//'''; +const Text = ''' +### **简介** +> 在 canvas 上绘制的图案; +- canvas + paint 的应用。 +'''; + +const Text1 = ''' +### **基本用法** +- canvas 的 painter 的自定义绘制线的方法; +'''; + +const Text2 = ''' +> 绘制简单直线 +'''; + +const Text3 = ''' +> 绘制折线 +'''; + +const Text4 = ''' +> 二阶贝塞尔曲线 +'''; + +const Text5 = ''' +> 三阶贝塞尔曲线 +'''; + + +class Demo extends StatefulWidget { + static const String routeName = '/element/Media/Canvas/Canvas'; + + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'PainterPath', + codeUrl: 'elements/Media/Canvas/PainterPath/demo.dart', + contentList: [ + Text, + Text1, + Text2, + demoBoxs.CustomViewPage(type:'simpleline'), + Text3, + demoBoxs.CustomViewPage(type:'polyline'), + Text4, + demoBoxs.CustomViewPage(type:'Besizerline2'), + Text5, + demoBoxs.CustomViewPage(type:'Besizerline3'), + ], + docUrl: 'https://docs.flutter.io/flutter/dart-ui/Paint-class.html', + ); + } +} diff --git a/lib/widgets/elements/Media/Canvas/PainterSketch/demo.dart b/lib/widgets/elements/Media/Canvas/PainterSketch/demo.dart new file mode 100644 index 00000000..52b5f856 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/PainterSketch/demo.dart @@ -0,0 +1,213 @@ +/** + * Created with Android Studio. + * User: ryan + * Date: 2019/1/20 + * Time: 上午11:34 + * email: zhu.yan@alibaba-inc.com + * tartget: PainterSketchDome 的示例 + */ + +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; + +class PainterSketchDome extends StatefulWidget { + PainterSketchDome({Key key, this.title}) : super(key: key); + + final String title; + + @override + _PainterSketchDomeState createState() => new _PainterSketchDomeState(); +} + +class _PainterSketchDomeState extends State { + + List lines = []; + List nowPoints = []; + Color nowColor = Colors.redAccent; + + void moveGestureDetector(DragUpdateDetails detail){ + RenderBox box = context.findRenderObject(); + final Offset xy = box.globalToLocal(detail.globalPosition);// 重要需要转换以下坐标位置 + Offset p = Offset(xy.dx, xy.dy - 60); + //Offset p = Offset(detail.globalPosition.dx, detail.globalPosition.dy - 60); + setState(() { + nowPoints.add(p); + }); + } + + void newGestureDetector(DragStartDetails detail) { + if (nowPoints.length != 0) { + LinePoints l = LinePoints(new List.from(nowPoints), nowColor); + lines.add(l); + nowPoints.clear(); + } + RenderBox box = context.findRenderObject(); + final Offset xy = box.globalToLocal(detail.globalPosition);// 重要需要转换以下坐标位置 + Offset p = Offset(xy.dx, xy.dy - 60); + //Offset p = Offset(detail.globalPosition.dx, detail.globalPosition.dy - 60); + setState(() { + nowPoints.add(p); + }); + } + + void changeColor (Color c){ + if (nowPoints.length != 0) { + LinePoints l = LinePoints(new List.from(nowPoints), nowColor); + lines.add(l); + } + setState(() { + nowPoints.clear(); + nowColor = c; + }); + } + + List colors = [ + Colors.redAccent, + Colors.pink, + Colors.greenAccent, + Colors.blueAccent, + Colors.amber, + Colors.purpleAccent, + Colors.deepPurpleAccent, + Colors.lightBlueAccent, + Colors.lightGreenAccent, + Colors.cyanAccent,]; + + void _tapClear(){ + setState(() { + lines.clear(); + nowPoints.clear(); + }); + } + + @override + Widget build(BuildContext context) { + List pallet = []; + for (int i = 0; i < colors.length; i++) { + Color c = colors[i]; + pallet.add(ColorPallet(color: c,changeColor: changeColor,isSelect: c==nowColor,)); + } + + return SizedBox( + width: MediaQuery.of(context).size.width * 0.9, + height: MediaQuery.of(context).size.height * 0.6, + child:new Scaffold( + primary: false, + body: new Container( + decoration: BoxDecoration( + color: Colors.white + ), + child:new Flex( + direction: Axis.vertical, + children: [ + Container( + decoration:BoxDecoration( + color: Colors.black12 + ), + child: ListView( + scrollDirection: Axis.horizontal, + children: pallet + , + ), + height: 60.0, + ), + Expanded( + child: AspectRatio( + aspectRatio: 1.0, + child: GestureDetector( + child: CustomPaint( + painter: PaintCanvas(lines,nowPoints,nowColor), + ), + onHorizontalDragUpdate: moveGestureDetector, + onVerticalDragUpdate: moveGestureDetector, + onHorizontalDragStart: newGestureDetector, + onVerticalDragStart: newGestureDetector, + ), + ), + ) + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: _tapClear, + backgroundColor: Colors.redAccent, + foregroundColor: Colors.white, + child: Icon(Icons.delete), + ), + ) + ); + } +} + +class PaintCanvas extends CustomPainter{ + + final List lines; + final List nowPoints; + final Color nowColor; + + PaintCanvas(this.lines, this.nowPoints, this.nowColor); + + @override + void paint(Canvas canvas, Size size) { + Paint p = new Paint() + ..color = Colors.redAccent + ..strokeCap = StrokeCap.round + ..strokeWidth = 5.0; + canvas.save(); + for (int i = 0; i < lines.length; i++) { + LinePoints l = lines[i]; + for (int j = 1; j < l.points.length; j++){ + Offset p1 = l.points[j - 1]; + Offset p2 = l.points[j]; + p.color = l.lineColor; + canvas.drawLine(p1, p2, p); + } + } + for (int i = 1; i < nowPoints.length; i++){ + Offset p1 = nowPoints[i - 1]; + Offset p2 = nowPoints[i]; + p.color = nowColor; + canvas.drawLine(p1, p2, p); + } + + canvas.restore(); + } + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return true; + } +} + +class LinePoints{ + final List points; + final Color lineColor; + LinePoints(this.points, this.lineColor); +} + +class ColorPallet extends StatelessWidget { + final Color color; + final Function changeColor; + const ColorPallet({Key key, this.color, this.changeColor, this.isSelect}) : super(key: key); + final bool isSelect; + + void onPressed(){ + changeColor(color); + } + + @override + Widget build(BuildContext context) { + return new RawMaterialButton( + onPressed: onPressed, + constraints: BoxConstraints(minWidth: 60.0,minHeight: 50.0), + child: new Container( + margin: EdgeInsets.only(top: 5.0,bottom: 5.0), + width: 50.0, + height: 50.0, + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.all(Radius.circular(25.0)), + border: Border.all(color: Colors.white,width: isSelect?3.0:0.0) + ), + )) ; + } +} \ No newline at end of file diff --git a/lib/widgets/elements/Media/Canvas/PainterSketch/index.dart b/lib/widgets/elements/Media/Canvas/PainterSketch/index.dart new file mode 100644 index 00000000..f6a744e8 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/PainterSketch/index.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBoxs; + +const Text = ''' +### **简介** +> 操作图形的界面; + +'''; +const Text1 = ''' +### **基本用法** +- canvas + paint + GestureDetector 实现一个 简易的画板; +'''; + + +class Demo extends StatefulWidget { + static const String routeName = '/element/Media/Canvas/PainterSketch'; + + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'Canvas', + codeUrl: 'elements/Media/Canvas/PainterSketch/demo.dart', + contentList: [ + Text, + Text1, + demoBoxs.PainterSketchDome() + ], + docUrl: 'https://docs.flutter.io/flutter/dart-ui/Paint-class.html', + ); + } +} + diff --git a/lib/widgets/elements/Media/Canvas/index.dart b/lib/widgets/elements/Media/Canvas/index.dart index e3e60ec0..d3c73227 100644 --- a/lib/widgets/elements/Media/Canvas/index.dart +++ b/lib/widgets/elements/Media/Canvas/index.dart @@ -1 +1,31 @@ -// import 'package:flutter/material.dart'; +import 'package:flutter_go/model/widget.dart'; +import "package:flutter/material.dart"; + +import 'PainterSketch/index.dart' as PainterSketch; +import 'Canvas/index.dart' as Canvas; +import 'PainterPath/index.dart' as PainterPath; +import 'CircleProgressBarPainter/index.dart' as CircleProgressBarPainter; + + +List widgetPoints = [ + WidgetPoint( + name: 'PainterSketch', + routerName: PainterSketch.Demo.routeName, + buildRouter: (BuildContext context) => PainterSketch.Demo(), + ), + WidgetPoint( + name: 'Canvas', + routerName: Canvas.Demo.routeName, + buildRouter: (BuildContext context) => Canvas.Demo(), + ), + WidgetPoint( + name: 'PainterPath', + routerName: PainterPath.Demo.routeName, + buildRouter: (BuildContext context) => PainterPath.Demo(), + ), + WidgetPoint( + name: 'CircleProgressBarPainter', + routerName: CircleProgressBarPainter.Demo.routeName, + buildRouter: (BuildContext context) => CircleProgressBarPainter.Demo(), + ) +]; diff --git a/lib/widgets/elements/Media/index.dart b/lib/widgets/elements/Media/index.dart index c11673ed..3933301f 100644 --- a/lib/widgets/elements/Media/index.dart +++ b/lib/widgets/elements/Media/index.dart @@ -6,10 +6,12 @@ */ import 'Image/index.dart' as Image; import 'Icon/index.dart' as Icon; +import 'Canvas/index.dart' as Canvas; List getWidgets() { List result = []; result.addAll(Image.widgetPoints); result.addAll(Icon.widgetPoints); + result.addAll(Canvas.widgetPoints); return result; } \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index b929ba36..80a965eb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -159,6 +159,10 @@ flutter: - lib/widgets/elements/Media/Image/paintImage/paint_image_demo.dart - lib/widgets/elements/Media/Image/precacheImage/precache_image_demo.dart - lib/widgets/elements/Media/Image/RawImage/raw_image_demo.dart + - lib/widgets/elements/Media/Canvas/Canvas/demo.dart + - lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/demo.dart + - lib/widgets/elements/Media/Canvas/PainterPath/demo.dart + - lib/widgets/elements/Media/Canvas/PainterSketch/demo.dart - lib/widgets/themes/Material/MaterialApp/demo.dart - lib/widgets/themes/Material/MaterialButton/demo.dart - lib/widgets/themes/Material/MaterialColor/demo.dart From b341ca0edae854d3d50bf06328d84dcf5f13b335 Mon Sep 17 00:00:00 2001 From: "yifeng.yl" Date: Thu, 31 Jan 2019 11:15:19 +0800 Subject: [PATCH 16/28] fix:remote file in pubspec --- pubspec.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 8a8587ab..0a4b52ba 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -189,8 +189,6 @@ flutter: - assets/app.db - assets/images/ - assets/fonts/ - - lib/utils/example_code_parser.dart - - lib/utils/syntax_highlighter.dart fonts: - family: FlamanteRoma From 95a54fed17873c1a4d15d5847aeff5cd7b36f9e0 Mon Sep 17 00:00:00 2001 From: "yifeng.yl" Date: Thu, 31 Jan 2019 11:20:20 +0800 Subject: [PATCH 17/28] feat:modified db,add widget --- assets/app.db | Bin 53248 -> 53248 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/app.db b/assets/app.db index ad03d945c6d45cff7323fe3ec69d5be6143be510..b5b6f0ab6d1e1bed94bba6c46097613517a62157 100644 GIT binary patch delta 329 zcmZozz}&Ead4e?Km5DOWj8`@$ER<*AHDKu8%&H*5$SS~N!E<7>oZ=@g4t8cHCWdVc z+a^osC_p&d8MaS$(CL71b};PNd_hM_m~qGE*Y=VEjFOXC1N6B#wYb`OgE=m9T;A9? zm1FYd2roAQ26J<9VNpg&=hA{yvqm#c26c5XKOiwPuOzi7I6Ji@IRk~0nVXoNnv$QK zlA4<@`(#JMvzhZZCr2_fGOA2Yk5Vu-YBc9$P*z4ZBp|T_W(0_d&44{oT}%!F48Fc_ v$M`f_a5C81Lim|Q$vLS3MfvGPsl~-kiA7KcIireC4#*Z|l-)chHl+vvf>CJk delta 242 zcmZozz}&Ead4e?K#fdV`j2Aa1ER<*A5n$-p%&H*5$jZS3gq!6QKXGyJSTJxfY+=|k zSwcsFgXaX0vz}r7WCxuN4qgKwXEDR#%@=f}gc-MPer+!)z$iAEH9((><1!3xY@Et5 z`ErDpu_uGMxwx<>qoi|bL26M+W?p_sMrm$RKw@TINoo;R!O4Nq!kd#LnHd=)C#Od# zu;!H%<>yS!kCK?|6D_fMPgEBZOFV Date: Thu, 31 Jan 2019 17:18:16 +0800 Subject: [PATCH 18/28] fix:code --- lib/widgets/404.dart | 2 +- lib/widgets/components/Bar/AppBar/demo.dart | 42 +++---- lib/widgets/components/Bar/AppBar/index.dart | 4 +- .../components/Bar/BottomAppBar/demo.dart | 2 +- .../components/Bar/BottomAppBar/index.dart | 2 +- .../components/Bar/ButtonBar/demo.dart | 4 +- .../components/Bar/ButtonBar/index.dart | 2 +- .../Bar/FlexibleSpaceBar/index.dart | 2 +- .../components/Bar/SliverAppBar/demo.dart | 18 +-- .../components/Bar/SliverAppBar/index.dart | 4 +- lib/widgets/components/Bar/SnackBar/demo.dart | 22 ++-- .../components/Bar/SnackBar/index.dart | 4 +- .../components/Bar/SnackBarAction/demo.dart | 22 ++-- lib/widgets/components/Bar/TabBar/demo.dart | 30 ++--- lib/widgets/components/Card/Card/demo.dart | 4 +- lib/widgets/components/Card/Card/index.dart | 2 +- .../components/Dialog/AboutDialog/demo.dart | 12 +- .../components/Dialog/AlertDialog/demo.dart | 8 +- .../components/Dialog/Dialog/demo.dart | 18 +-- .../components/Dialog/SimpleDialog/demo.dart | 20 +-- .../components/Grid/GridPaper/demo.dart | 30 ++--- .../components/Grid/GridTile/demo.dart | 32 ++--- .../components/Grid/GridTileBar/demo.dart | 32 ++--- .../components/Grid/GridView/demo.dart | 32 ++--- .../components/Grid/SliverGrid/demo.dart | 20 +-- .../components/LIst/AnimatedList/demo.dart | 22 ++-- .../components/LIst/AnimatedList/index.dart | 2 +- .../components/LIst/AnimatedList/model.dart | 2 +- .../components/LIst/ListBody/index.dart | 2 +- .../components/LIst/ListView/index.dart | 4 +- .../Menu/CheckedPopupMenuItem/demo.dart | 4 +- .../components/Menu/PopupMenuButton/demo.dart | 4 +- .../Menu/PopupMenuDivider/demo.dart | 2 +- .../Menu/PopupMenuDivider/index.dart | 2 +- .../Navigation/BottomNavigationBar/demo.dart | 12 +- .../Navigation/BottomNavigationBar/index.dart | 4 +- .../BottomNavigationBarItem/demo.dart | 30 ++--- .../BottomNavigationBarItem/index.dart | 4 +- .../components/Pick/DayPicker/demo.dart | 22 ++-- .../components/Pick/MonthPicker/demo.dart | 12 +- .../components/Pick/ShowdatePicker/demo.dart | 22 ++-- .../components/Pick/YearPicker/demo.dart | 12 +- .../components/Scaffold/Scaffold/demo.dart | 4 +- .../components/Scaffold/Scaffold/index.dart | 2 +- .../Scaffold/ScaffoldState/demo.dart | 4 +- .../components/Scroll/ScrollPhysics/demo.dart | 16 +-- .../Form/Button/DropdownButton/demo.dart | 62 ++++----- .../Form/Button/DropdownButton/index.dart | 8 +- .../elements/Form/Button/FlatButton/demo.dart | 4 +- .../Form/Button/FlatButton/index.dart | 18 +-- .../Button/FloatingActionButton/demo.dart | 6 +- .../Button/FloatingActionButton/index.dart | 18 +-- .../elements/Form/Button/IconButton/demo.dart | 2 +- .../Form/Button/IconButton/index.dart | 10 +- .../Form/Button/OutlineButton/demo.dart | 4 +- .../Form/Button/OutlineButton/index.dart | 18 +-- .../Form/Button/PopupMenuButton/demo.dart | 18 +-- .../Form/Button/PopupMenuButton/index.dart | 2 +- .../Form/Button/RaisedButton/demo.dart | 4 +- .../Form/Button/RaisedButton/index.dart | 18 +-- .../Form/Button/RawMaterialButton/demo.dart | 2 +- .../Form/Button/RawMaterialButton/index.dart | 18 +-- .../Form/CheckBox/Checkbox/index.dart | 6 +- .../Form/CheckBox/CheckboxListTile/demo.dart | 26 ++-- .../Form/CheckBox/CheckboxListTile/index.dart | 4 +- .../Form/Input/TextField/text_field_demo.dart | 4 +- .../elements/Form/Radio/Radio/demo.dart | 10 +- .../elements/Form/Radio/Radio/index.dart | 4 +- .../Form/Radio/RadioListTile/demo.dart | 2 +- .../Form/Radio/RadioListTile/index.dart | 2 +- .../elements/Form/Slider/Slider/demo.dart | 20 +-- .../elements/Form/Slider/Slider/index.dart | 6 +- .../Form/Slider/SliderTheme/demo.dart | 18 +-- .../Form/Slider/SliderTheme/index.dart | 4 +- .../Form/Slider/SliderThemeData/demo.dart | 18 +-- .../Form/Slider/SliderThemeData/index.dart | 2 +- .../Form/Switch/AnimatedSwitcher/index.dart | 2 +- .../elements/Form/Switch/Switch/demo.dart | 6 +- .../elements/Form/Switch/Switch/index.dart | 2 +- .../Form/Switch/SwitchListTile/demo.dart | 2 +- .../elements/Form/Text/RichText/index.dart | 2 +- .../elements/Form/Text/Text/index.dart | 2 +- .../elements/Frame/Align/Align/demo.dart | 12 +- .../elements/Frame/Align/Align/index.dart | 14 +-- .../Frame/Box/ConstrainedBox/demo.dart | 4 +- .../elements/Frame/Box/DecoratedBox/demo.dart | 6 +- .../Frame/Box/DecoratedBox/index.dart | 2 +- .../elements/Frame/Box/Fittedbox/demo.dart | 4 +- .../elements/Frame/Box/Fittedbox/index.dart | 21 ++-- .../elements/Frame/Box/OverflowBox/demo.dart | 26 ++-- .../elements/Frame/Box/OverflowBox/index.dart | 6 +- .../elements/Frame/Box/RenderBox/demo.dart | 22 ---- .../elements/Frame/Box/RenderBox/index.dart | 62 --------- .../elements/Frame/Box/SizeBox/index.dart | 6 +- .../Frame/Box/SizedOverflowBox/demo.dart | 10 +- .../Frame/Box/SizedOverflowBox/index.dart | 20 +-- .../elements/Frame/Box/TextBox/demo.dart | 1 - .../elements/Frame/Box/TextBox/index.dart | 49 -------- .../Frame/Box/UnconstrainedBox/demo.dart | 2 +- lib/widgets/elements/Frame/Box/index.dart | 6 - .../Expanded/Expanded/expanded_demo.dart | 32 ++--- .../elements/Frame/Layout/Column/demo.dart | 48 ++++--- .../elements/Frame/Layout/Row/demo.dart | 47 ++++--- .../elements/Frame/Layout/Row/index.dart | 2 +- .../SliverPadding/sliverpadding_demo.dart | 6 +- .../Frame/Stack/IndexedStack/demo.dart | 18 +-- .../Frame/Stack/IndexedStack/index.dart | 15 ++- .../elements/Frame/Stack/Stack/demo.dart | 40 +++--- .../elements/Frame/Stack/Stack/index.dart | 22 ++-- .../elements/Media/Icon/Icon/demo.dart | 2 +- .../elements/Media/Icon/IconData/demo.dart | 6 +- .../elements/Media/Icon/IconTheme/demo.dart | 19 +-- .../Media/Icon/IconThemeData/demo.dart | 14 +-- .../elements/Media/Icon/ImageIcon/demo.dart | 4 +- lib/widgets/elements/Media/Icon/index.dart | 8 +- .../Image/FadeInImage/fade_in_image_demo.dart | 10 +- .../Image/FileImage/file_image_demo.dart | 8 +- .../Image/MemoryImage/memory_image_demo.dart | 6 +- .../themes/Cupertino/CupertinoApp/demo.dart | 118 ++++++++++-------- .../Cupertino/CupertinoButton/demo.dart | 2 +- .../CupertinoSegmentedControl/demo.dart | 2 +- .../Cupertino/CupertinoSlider/demo.dart | 2 +- .../Cupertino/CupertinoTimerPicker/demo.dart | 2 +- .../Material/MaterialAccentColor/index.dart | 2 +- .../themes/Material/MaterialApp/demo.dart | 6 +- .../themes/Material/MaterialApp/index.dart | 2 +- .../themes/Material/MaterialColor/demo.dart | 7 +- .../Material/MaterialPageRoute/demo.dart | 28 ++--- .../Material/MergeableMaterialItem/demo.dart | 21 ++-- pubspec.yaml | 2 - 130 files changed, 773 insertions(+), 913 deletions(-) delete mode 100644 lib/widgets/elements/Frame/Box/RenderBox/demo.dart delete mode 100644 lib/widgets/elements/Frame/Box/RenderBox/index.dart delete mode 100644 lib/widgets/elements/Frame/Box/TextBox/demo.dart delete mode 100644 lib/widgets/elements/Frame/Box/TextBox/index.dart diff --git a/lib/widgets/404.dart b/lib/widgets/404.dart index 1ca56170..156b043e 100644 --- a/lib/widgets/404.dart +++ b/lib/widgets/404.dart @@ -9,7 +9,7 @@ class WidgetNotFound extends StatelessWidget { title: Text("widget not found"), ), body: Container( - child: new Text("widget not found") + child: Text("widget not found") ) ); } diff --git a/lib/widgets/components/Bar/AppBar/demo.dart b/lib/widgets/components/Bar/AppBar/demo.dart index c17eb6e0..3a21d086 100644 --- a/lib/widgets/components/Bar/AppBar/demo.dart +++ b/lib/widgets/components/Bar/AppBar/demo.dart @@ -30,8 +30,8 @@ class _AppBarLessDefaultComplex extends State with SingleTickerProviderStateMixi @override void initState() { super.initState(); - _scrollViewController = new ScrollController(); - _tabController = new TabController(vsync: this, length: 6);// 和下面的 TabBar.tabs 数量对应 + _scrollViewController = ScrollController(); + _tabController = TabController(vsync: this, length: 6);// 和下面的 TabBar.tabs 数量对应 } @override @@ -46,26 +46,26 @@ class _AppBarLessDefaultComplex extends State with SingleTickerProviderStateMixi // 如果省略了 leading ,但 AppBar 在带有 Drawer 的 Scaffold 中,则会插入一个 button 以打开 Drawer。 // 否则,如果最近的 Navigator 具有任何先前的 router ,则会插入BackButton。 // 这种行为可以通过设置来关闭automaticallyImplyLeading 为false。在这种情况下,空的 leading widget 将导致 middle/title widget 拉伸开始。 - return new SizedBox( + return SizedBox( height: 500, - child:new AppBar( // 大量配置属性参考 SliverAppBar 示例 - title: new Text('title'), - leading: new Icon(Icons.home), + child: AppBar( // 大量配置属性参考 SliverAppBar 示例 + title: Text('title'), + leading: Icon(Icons.home), backgroundColor: Colors.amber[500], centerTitle: true, actions: [ - new IconButton( - icon: new Icon(Icons.add_alarm), + IconButton( + icon: Icon(Icons.add_alarm), tooltip: 'Add Alarm', onPressed: () { // do nothing }), - new PopupMenuButton( + PopupMenuButton( itemBuilder: (BuildContext context) => >[ - new PopupMenuItem( - value: "price", child: new Text('Sort by price')), - new PopupMenuItem( - value: "time", child: new Text('Sort by time')), + PopupMenuItem( + value: "price", child: Text('Sort by price')), + PopupMenuItem( + value: "time", child: Text('Sort by time')), ], onSelected: (String action) { switch (action) { @@ -78,16 +78,16 @@ class _AppBarLessDefaultComplex extends State with SingleTickerProviderStateMixi } }) ], - bottom: new TabBar( + bottom: TabBar( isScrollable: true, controller: _tabController, tabs: [ - new Tab(text: "Tabs 1"), - new Tab(text: "Tabs 2"), - new Tab(text: "Tabs 3"), - new Tab(text: "Tabs 4"), - new Tab(text: "Tabs 5"), - new Tab(text: "Tabs 6"), + Tab(text: "Tabs 1"), + Tab(text: "Tabs 2"), + Tab(text: "Tabs 3"), + Tab(text: "Tabs 4"), + Tab(text: "Tabs 5"), + Tab(text: "Tabs 6"), ], ), ), @@ -107,7 +107,7 @@ class AppBarLessDefaultSimple extends StatelessWidget { @override Widget build(BuildContext context) { - return new SizedBox( + return SizedBox( height: 200, child:AppBar( title: Text('My Fancy Dress'), diff --git a/lib/widgets/components/Bar/AppBar/index.dart b/lib/widgets/components/Bar/AppBar/index.dart index 82bdf8c1..0816bc41 100644 --- a/lib/widgets/components/Bar/AppBar/index.dart +++ b/lib/widgets/components/Bar/AppBar/index.dart @@ -62,7 +62,7 @@ class _DemoState extends State { */ Widget allDomes(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -84,7 +84,7 @@ Widget allDomes(BuildContext context, _DemoState that) { * 带align的text * */ Widget textAlignBar(String txt) { - return new Align( + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ diff --git a/lib/widgets/components/Bar/BottomAppBar/demo.dart b/lib/widgets/components/Bar/BottomAppBar/demo.dart index cea79ea4..e5bf902f 100644 --- a/lib/widgets/components/Bar/BottomAppBar/demo.dart +++ b/lib/widgets/components/Bar/BottomAppBar/demo.dart @@ -21,7 +21,7 @@ class AppBarLessDefaultSimple extends StatelessWidget { @override Widget build(BuildContext context) { - return new SizedBox( + return SizedBox( height: 100, child: Scaffold( //appBar: AppBar(title: const Text('Bottom App Bar')), diff --git a/lib/widgets/components/Bar/BottomAppBar/index.dart b/lib/widgets/components/Bar/BottomAppBar/index.dart index 18c2d159..e21ab78a 100644 --- a/lib/widgets/components/Bar/BottomAppBar/index.dart +++ b/lib/widgets/components/Bar/BottomAppBar/index.dart @@ -52,7 +52,7 @@ class _DemoState extends State { */ Widget allDomes(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/widgets/components/Bar/ButtonBar/demo.dart b/lib/widgets/components/Bar/ButtonBar/demo.dart index 0ce89f0b..6ffb3d2d 100644 --- a/lib/widgets/components/Bar/ButtonBar/demo.dart +++ b/lib/widgets/components/Bar/ButtonBar/demo.dart @@ -44,9 +44,9 @@ class ButtonBarLessDefault extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - margin: new EdgeInsets.symmetric(vertical: 0.0), + margin: EdgeInsets.symmetric(vertical: 0.0), height: 100.0, - child: new Scrollbar(child:ListView( + child: Scrollbar(child:ListView( scrollDirection: Axis.horizontal, // 水平listView children: [ ButtonBar( diff --git a/lib/widgets/components/Bar/ButtonBar/index.dart b/lib/widgets/components/Bar/ButtonBar/index.dart index 8c9de1ff..f5fc37fb 100644 --- a/lib/widgets/components/Bar/ButtonBar/index.dart +++ b/lib/widgets/components/Bar/ButtonBar/index.dart @@ -55,7 +55,7 @@ class _DemoState extends State { */ Widget allDomes(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/widgets/components/Bar/FlexibleSpaceBar/index.dart b/lib/widgets/components/Bar/FlexibleSpaceBar/index.dart index 80f27150..0d3b7c77 100644 --- a/lib/widgets/components/Bar/FlexibleSpaceBar/index.dart +++ b/lib/widgets/components/Bar/FlexibleSpaceBar/index.dart @@ -54,7 +54,7 @@ class _DemoState extends State { */ Widget allDomes(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/widgets/components/Bar/SliverAppBar/demo.dart b/lib/widgets/components/Bar/SliverAppBar/demo.dart index 705f0dbe..058a25aa 100644 --- a/lib/widgets/components/Bar/SliverAppBar/demo.dart +++ b/lib/widgets/components/Bar/SliverAppBar/demo.dart @@ -44,9 +44,9 @@ class SliverAppBarLessDefault extends StatelessWidget { @override Widget build(BuildContext context) { for (int i = 0; i < 20; i++) { - listData.add(new ListItem("我是测试标题$i", Icons.cake)); + listData.add( ListItem("我是测试标题$i", Icons.cake)); } - return new SizedBox( + return SizedBox( height: 500.0, child: NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { @@ -89,7 +89,7 @@ class SliverAppBarLessDefault extends StatelessWidget { // SliverPersistentHeader( // delegate: _SliverAppBarDelegate( // TabBar( - // controller: new TabController(length: 2, vsync: this), + // controller: TabController(length: 2, vsync: this), // labelColor: Colors.black87, // unselectedLabelColor: Colors.grey, // tabs: [ @@ -101,10 +101,10 @@ class SliverAppBarLessDefault extends StatelessWidget { ]; }, body: Center( - child: new ListView.builder( + child: ListView.builder( shrinkWrap: true, itemBuilder: (BuildContext context, int index) { - return new ListItemWidget(listData[index]); + return ListItemWidget(listData[index]); }, itemCount: listData.length, ), @@ -127,10 +127,10 @@ class ListItemWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return new InkWell( - child: new ListTile( - leading: new Icon(listItem.iconData), - title: new Text(listItem.title), + return InkWell( + child: ListTile( + leading: Icon(listItem.iconData), + title: Text(listItem.title), ), onTap: () {}, ); diff --git a/lib/widgets/components/Bar/SliverAppBar/index.dart b/lib/widgets/components/Bar/SliverAppBar/index.dart index 367b5216..8a770f23 100644 --- a/lib/widgets/components/Bar/SliverAppBar/index.dart +++ b/lib/widgets/components/Bar/SliverAppBar/index.dart @@ -54,7 +54,7 @@ class _DemoState extends State { */ Widget allDomes(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -71,7 +71,7 @@ Widget allDomes(BuildContext context, _DemoState that) { * 带align的text * */ Widget textAlignBar(String txt) { - return new Align( + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ diff --git a/lib/widgets/components/Bar/SnackBar/demo.dart b/lib/widgets/components/Bar/SnackBar/demo.dart index d4413982..5ba66467 100644 --- a/lib/widgets/components/Bar/SnackBar/demo.dart +++ b/lib/widgets/components/Bar/SnackBar/demo.dart @@ -23,15 +23,15 @@ class SnackBarLessDefault extends StatelessWidget { @override Widget build(BuildContext context) { // 当BuildContext在Scaffold之前时,调用Scaffold.of(context)会报错。这时可以通过Builder Widget来解决 - return new Center( - child: new Column( + return Center( + child: Column( children: [ - new GestureDetector( + GestureDetector( onTap: () { - final snackBar = new SnackBar( - content: new Text('这是一个SnackBar, 右侧有SnackBarAction'), + final snackBar = SnackBar( + content: Text('这是一个SnackBar, 右侧有SnackBarAction'), backgroundColor:Colors.red, - action: new SnackBarAction( // 提示信息上添加一个撤消的按钮 + action: SnackBarAction( // 提示信息上添加一个撤消的按钮 textColor:Colors.black, label: '撤消', onPressed: () { @@ -43,19 +43,19 @@ class SnackBarLessDefault extends StatelessWidget { ); Scaffold.of(context).showSnackBar(snackBar); }, - child: new Text('显示SnackBar'), + child: Text('显示SnackBar'), ), - new GestureDetector( + GestureDetector( onTap: () { - final snackBar = new SnackBar( - content: new Text('右侧无SnackBarAction'), + final snackBar = SnackBar( + content: Text('右侧无SnackBarAction'), backgroundColor:Colors.red, duration:Duration(minutes: 1),// 持续时间 //animation, ); Scaffold.of(context).showSnackBar(snackBar); }, - child: new Text('显示无SnackBarAction的SnackBar'), + child: Text('显示无SnackBarAction的SnackBar'), ), ], ) diff --git a/lib/widgets/components/Bar/SnackBar/index.dart b/lib/widgets/components/Bar/SnackBar/index.dart index 2047f783..45843295 100644 --- a/lib/widgets/components/Bar/SnackBar/index.dart +++ b/lib/widgets/components/Bar/SnackBar/index.dart @@ -54,7 +54,7 @@ class _DemoState extends State { */ Widget allDomes(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -72,7 +72,7 @@ Widget allDomes(BuildContext context, _DemoState that) { * 带align的text * */ Widget textAlignBar(String txt) { - return new Align( + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ diff --git a/lib/widgets/components/Bar/SnackBarAction/demo.dart b/lib/widgets/components/Bar/SnackBarAction/demo.dart index e4c4547f..58d245e1 100644 --- a/lib/widgets/components/Bar/SnackBarAction/demo.dart +++ b/lib/widgets/components/Bar/SnackBarAction/demo.dart @@ -16,15 +16,15 @@ class SnackBarActionDemo extends StatefulWidget { class _Demo extends State { Widget build(BuildContext context) { - return new Center( - child: new Column( + return Center( + child: Column( children: [ - new GestureDetector( + GestureDetector( onTap: () { - final snackBar = new SnackBar( - content: new Text('这是一个SnackBar, 右侧有SnackBarAction, 3秒后消失'), + final snackBar = SnackBar( + content: Text('这是一个SnackBar, 右侧有SnackBarAction, 3秒后消失'), backgroundColor:Color(0xffc91b3a), - action: new SnackBarAction( // 提示信息上添加一个撤消的按钮 + action: SnackBarAction( // 提示信息上添加一个撤消的按钮 textColor:Colors.white, label: '撤消', onPressed: () { @@ -37,19 +37,19 @@ class _Demo extends State { Scaffold.of(context).showSnackBar(snackBar); }, - child: new Text('点我显示有action的SnackBar'), + child: Text('点我显示有action的SnackBar'), ), - new GestureDetector( + GestureDetector( onTap: () async { - final snackBar = new SnackBar( - content: new Text('右侧无SnackBarAction, 3秒后消失'), + final snackBar = SnackBar( + content: Text('右侧无SnackBarAction, 3秒后消失'), backgroundColor:Color(0xffc91b3a), duration:Duration(seconds: 3),// 持续时间 //animation, ); Scaffold.of(context).showSnackBar(snackBar); }, - child: new Text('点我显示无SnackBarAction的SnackBar'), + child: Text('点我显示无SnackBarAction的SnackBar'), ), ], ) diff --git a/lib/widgets/components/Bar/TabBar/demo.dart b/lib/widgets/components/Bar/TabBar/demo.dart index 83caba93..1e8e5972 100644 --- a/lib/widgets/components/Bar/TabBar/demo.dart +++ b/lib/widgets/components/Bar/TabBar/demo.dart @@ -26,8 +26,8 @@ class _TabBarDemo extends State with SingleTickerProviderStateMixin { @override void initState() { super.initState(); - _scrollViewController = new ScrollController(); - _tabController = new TabController(vsync: this, length: 6);// 和下面的 TabBar.tabs 数量对应 + _scrollViewController = ScrollController(); + _tabController = TabController(vsync: this, length: 6);// 和下面的 TabBar.tabs 数量对应 } @override @@ -42,27 +42,27 @@ class _TabBarDemo extends State with SingleTickerProviderStateMixin { // 如果省略了 leading ,但 AppBar 在带有 Drawer 的 Scaffold 中,则会插入一个 button 以打开 Drawer。 // 否则,如果最近的 Navigator 具有任何先前的 router ,则会插入BackButton。 // 这种行为可以通过设置来关闭automaticallyImplyLeading 为false。在这种情况下,空的 leading widget 将导致 middle/title widget 拉伸开始。 - return new SizedBox( + return SizedBox( height: 500, - child:new Scaffold( - appBar: new AppBar( // 大量配置属性参考 SliverAppBar 示例 - title: new Text('TabBar'), - leading: new Icon(Icons.home), + child: Scaffold( + appBar: AppBar( // 大量配置属性参考 SliverAppBar 示例 + title: Text('TabBar'), + leading: Icon(Icons.home), backgroundColor: Colors.amber[1000], - bottom: new TabBar( + bottom: TabBar( isScrollable: true, controller: _tabController, tabs: [ - new Tab(text: "Tabs 1"), - new Tab(text: "Tabs 2"), - new Tab(text: "Tabs 3"), - new Tab(text: "Tabs 4"), - new Tab(text: "Tabs 5"), - new Tab(text: "Tabs 6"), + Tab(text: "Tabs 1"), + Tab(text: "Tabs 2"), + Tab(text: "Tabs 3"), + Tab(text: "Tabs 4"), + Tab(text: "Tabs 5"), + Tab(text: "Tabs 6"), ], ), ), - body: new TabBarView(controller: _tabController, children: [ + body: TabBarView(controller: _tabController, children: [ Text('TabsView 1'), Text('TabsView 2'), Text('TabsView 3'), diff --git a/lib/widgets/components/Card/Card/demo.dart b/lib/widgets/components/Card/Card/demo.dart index 107a6bd5..7e9de10b 100644 --- a/lib/widgets/components/Card/Card/demo.dart +++ b/lib/widgets/components/Card/Card/demo.dart @@ -50,9 +50,9 @@ class CardLessDefault extends StatelessWidget { margin:EdgeInsets.all(20.0), // margin: EdgeInsetsDirectional.only(bottom: 30.0, top: 30.0, start: 30.0),// 边距 semanticContainer:true, // 表示单个语义容器,还是false表示单个语义节点的集合,接受单个child,但该child可以是Row,Column或其他包含子级列表的widget -// shape:new Border.all( +// shape: Border.all( // color: Colors.indigo, width: 1.0, style: BorderStyle.solid), // 卡片材质的形状,以及边框 - shape:RoundedRectangleBorder(borderRadius: new BorderRadius.circular(20.0)), // 圆角 + shape:RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)), // 圆角 //borderRadius: BorderRadius.all(Radius.circular(8.0)), child: Column( //card里面的子控件 mainAxisSize: MainAxisSize.min, diff --git a/lib/widgets/components/Card/Card/index.dart b/lib/widgets/components/Card/Card/index.dart index 5ee1fbb5..ea59f5ca 100644 --- a/lib/widgets/components/Card/Card/index.dart +++ b/lib/widgets/components/Card/Card/index.dart @@ -52,7 +52,7 @@ class _DemoState extends State { */ Widget allDomes(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/widgets/components/Dialog/AboutDialog/demo.dart b/lib/widgets/components/Dialog/AboutDialog/demo.dart index df03d3a2..7d7f235e 100644 --- a/lib/widgets/components/Dialog/AboutDialog/demo.dart +++ b/lib/widgets/components/Dialog/AboutDialog/demo.dart @@ -19,9 +19,9 @@ class _Demo extends State { void showAlertDialog(BuildContext context) { showDialog( context: context, - builder: (_) => new AboutDialog( + builder: (_) => AboutDialog( applicationName: '名称', - applicationIcon: new Icon(Icons.ac_unit), + applicationIcon: Icon(Icons.ac_unit), applicationVersion: 'V1.0', children: [ Text('我是一个关于的dialog') @@ -29,12 +29,12 @@ class _Demo extends State { )); } Widget build(BuildContext context) { - return new RaisedButton( - padding: new EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), + return RaisedButton( + padding: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), //padding - child: new Text( + child: Text( 'show aboutDialog', - style: new TextStyle( + style: TextStyle( fontSize: 18.0, //textsize color: Colors.white, // textcolor ), diff --git a/lib/widgets/components/Dialog/AlertDialog/demo.dart b/lib/widgets/components/Dialog/AlertDialog/demo.dart index 8d68c838..857961e3 100644 --- a/lib/widgets/components/Dialog/AlertDialog/demo.dart +++ b/lib/widgets/components/Dialog/AlertDialog/demo.dart @@ -122,12 +122,12 @@ class _Demo extends State { ); } Widget build(BuildContext context) { - return new RaisedButton( - padding: new EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), + return RaisedButton( + padding: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), //padding - child: new Text( + child: Text( '点我显示 AlertDialog', - style: new TextStyle( + style: TextStyle( fontSize: 18.0, //textsize color: Colors.white, // textcolor ), diff --git a/lib/widgets/components/Dialog/Dialog/demo.dart b/lib/widgets/components/Dialog/Dialog/demo.dart index 4f7f3818..c68ab35b 100644 --- a/lib/widgets/components/Dialog/Dialog/demo.dart +++ b/lib/widgets/components/Dialog/Dialog/demo.dart @@ -42,12 +42,12 @@ class _Demo extends State { ); } Widget build(BuildContext context) { - return new RaisedButton( - padding: new EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), + return RaisedButton( + padding: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), //padding - child: new Text( + child: Text( '点我显示 Dialog', - style: new TextStyle( + style: TextStyle( fontSize: 18.0, //textsize color: Colors.white, // textcolor ), @@ -108,14 +108,14 @@ class _DialogMoreDemo extends State { ); } Widget build(BuildContext context) { - return new Column( + return Column( children: [ - new RaisedButton( - padding: new EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), + RaisedButton( + padding: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), //padding - child: new Text( + child: Text( '点我显示Dialog', - style: new TextStyle( + style: TextStyle( fontSize: 18.0, //textsize color: Colors.white, // textcolor ), diff --git a/lib/widgets/components/Dialog/SimpleDialog/demo.dart b/lib/widgets/components/Dialog/SimpleDialog/demo.dart index 9e9b002a..870d46c0 100644 --- a/lib/widgets/components/Dialog/SimpleDialog/demo.dart +++ b/lib/widgets/components/Dialog/SimpleDialog/demo.dart @@ -20,17 +20,17 @@ class _Demo extends State { showDialog( context: context, builder: (BuildContext context) { - return new SimpleDialog( - title: new Text('选择'), + return SimpleDialog( + title: Text('选择'), children: [ - new SimpleDialogOption( - child: new Text('选项 1'), + SimpleDialogOption( + child: Text('选项 1'), onPressed: () { Navigator.of(context).pop(); }, ), - new SimpleDialogOption( - child: new Text('选项 2'), + SimpleDialogOption( + child: Text('选项 2'), onPressed: () { Navigator.of(context).pop(); }, @@ -41,12 +41,12 @@ class _Demo extends State { ); } Widget build(BuildContext context) { - return new RaisedButton( - padding: new EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), + return RaisedButton( + padding: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0), //padding - child: new Text( + child: Text( 'show SimpleDialog', - style: new TextStyle( + style: TextStyle( fontSize: 18.0, //textsize color: Colors.white, // textcolor ), diff --git a/lib/widgets/components/Grid/GridPaper/demo.dart b/lib/widgets/components/Grid/GridPaper/demo.dart index 5a0f17e8..a1bf85c5 100644 --- a/lib/widgets/components/Grid/GridPaper/demo.dart +++ b/lib/widgets/components/Grid/GridPaper/demo.dart @@ -21,7 +21,7 @@ class _Demo extends State { return Container( height: 400, color: Color(0xffc91b3a), - child: new GridView.count( + child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 10.0, crossAxisSpacing: 4.0, @@ -40,21 +40,21 @@ class _Demo extends State { ), GridPaper( color: Colors.red, - child: new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + child: Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), ), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), ], ) ); diff --git a/lib/widgets/components/Grid/GridTile/demo.dart b/lib/widgets/components/Grid/GridTile/demo.dart index 2936e155..17a0e048 100644 --- a/lib/widgets/components/Grid/GridTile/demo.dart +++ b/lib/widgets/components/Grid/GridTile/demo.dart @@ -21,7 +21,7 @@ class _Demo extends State { return Container( height: 400, color: Color(0xffc91b3a), - child: new GridView.count( + child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 10.0, crossAxisSpacing: 4.0, @@ -36,21 +36,21 @@ class _Demo extends State { ), footer: Text("GridTile footer", style: TextStyle(color: Colors.white)), ), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), ], ) ); diff --git a/lib/widgets/components/Grid/GridTileBar/demo.dart b/lib/widgets/components/Grid/GridTileBar/demo.dart index adf85f36..b5e5ad98 100644 --- a/lib/widgets/components/Grid/GridTileBar/demo.dart +++ b/lib/widgets/components/Grid/GridTileBar/demo.dart @@ -21,7 +21,7 @@ class _Demo extends State { return Container( height: 400, color: Color(0xffc91b3a), - child: new GridView.count( + child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 10.0, crossAxisSpacing: 4.0, @@ -38,21 +38,21 @@ class _Demo extends State { child: Container(), ), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), ], ) ); diff --git a/lib/widgets/components/Grid/GridView/demo.dart b/lib/widgets/components/Grid/GridView/demo.dart index adf85f36..b5e5ad98 100644 --- a/lib/widgets/components/Grid/GridView/demo.dart +++ b/lib/widgets/components/Grid/GridView/demo.dart @@ -21,7 +21,7 @@ class _Demo extends State { return Container( height: 400, color: Color(0xffc91b3a), - child: new GridView.count( + child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 10.0, crossAxisSpacing: 4.0, @@ -38,21 +38,21 @@ class _Demo extends State { child: Container(), ), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), - new Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), + Image.network('https://flutter.io/assets/homepage/news-2-599aefd56e8aa903ded69500ef4102cdd8f988dab8d9e4d570de18bdb702ffd4.png', scale: 1, fit: BoxFit.cover), ], ) ); diff --git a/lib/widgets/components/Grid/SliverGrid/demo.dart b/lib/widgets/components/Grid/SliverGrid/demo.dart index 8950e17f..6745c2cf 100644 --- a/lib/widgets/components/Grid/SliverGrid/demo.dart +++ b/lib/widgets/components/Grid/SliverGrid/demo.dart @@ -17,34 +17,34 @@ class SliverGridDemo extends StatefulWidget { class _Demo extends State { Widget showCustomScrollView() { - return new CustomScrollView( + return CustomScrollView( slivers: [ - new SliverGrid( - gridDelegate: new SliverGridDelegateWithMaxCrossAxisExtent( + SliverGrid( + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 200.0, mainAxisSpacing: 10.0, crossAxisSpacing: 10.0, childAspectRatio: 4.0, ), - delegate: new SliverChildBuilderDelegate( + delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { - return new Container( + return Container( alignment: Alignment.center, color: Colors.cyan[100 * (index % 5)], - child: new Text('grid item $index'), + child: Text('grid item $index'), ); }, childCount: 20, ), ), -// new SliverFixedExtentList( +// SliverFixedExtentList( // itemExtent: 100.0, -// delegate: new SliverChildBuilderDelegate( +// delegate: SliverChildBuilderDelegate( // (BuildContext context, int index) { -// return new Container( +// return Container( // alignment: Alignment.center, // color: Colors.lightBlue[100 * (index % 9)], -// child: new Text('list item $index'), +// child: Text('list item $index'), // ); // }, // ), diff --git a/lib/widgets/components/LIst/AnimatedList/demo.dart b/lib/widgets/components/LIst/AnimatedList/demo.dart index 78f457fb..f598b6eb 100644 --- a/lib/widgets/components/LIst/AnimatedList/demo.dart +++ b/lib/widgets/components/LIst/AnimatedList/demo.dart @@ -15,7 +15,7 @@ class AnimatedListFullDefault extends StatefulWidget { * AnimatedList 默认的实例,有状态 * */ class _AnimatedListFullDefault extends State { - final GlobalKey _listKey = new GlobalKey(); + final GlobalKey _listKey = GlobalKey(); ListModel _list; int _selectedItem; int _nextItem; // The next item inserted when the user presses the '+' button. @@ -26,7 +26,7 @@ class _AnimatedListFullDefault extends State { if (widget.parent is State) { widget.parent.animatedList = this; // 修改父级的对象引用 } - _list = new ListModel( + _list = ListModel( listKey: _listKey, initialItems: [0, 1, 2], removedItemBuilder: _buildRemovedItem, @@ -50,7 +50,7 @@ class _AnimatedListFullDefault extends State { } Widget _buildItem(BuildContext context, int index, Animation animation) { - return new CardItem( + return CardItem( animation: animation, item: _list[index], selected: _selectedItem == _list[index], @@ -63,7 +63,7 @@ class _AnimatedListFullDefault extends State { } Widget _buildRemovedItem(int item, BuildContext context, Animation animation) { - return new CardItem( + return CardItem( animation: animation, item: item, selected: false, @@ -107,20 +107,20 @@ class CardItem extends StatelessWidget { TextStyle textStyle = Theme.of(context).textTheme.display1; if (selected) textStyle = textStyle.copyWith(color: Colors.lightGreenAccent[400]); - return new Padding( + return Padding( padding: const EdgeInsets.all(2.0), - child: new SizeTransition( + child: SizeTransition( axis: Axis.vertical, sizeFactor: animation, - child: new GestureDetector( + child: GestureDetector( behavior: HitTestBehavior.opaque, onTap: onTap, - child: new SizedBox( + child: SizedBox( height: 128.0, - child: new Card( + child: Card( color: Colors.primaries[item % Colors.primaries.length], - child: new Center( - child: new Text('Item $item', style: textStyle), + child: Center( + child: Text('Item $item', style: textStyle), ), ), ), diff --git a/lib/widgets/components/LIst/AnimatedList/index.dart b/lib/widgets/components/LIst/AnimatedList/index.dart index 2392ab46..0d92a9fc 100644 --- a/lib/widgets/components/LIst/AnimatedList/index.dart +++ b/lib/widgets/components/LIst/AnimatedList/index.dart @@ -58,7 +58,7 @@ class _DemoState extends State { */ Widget allDemoBoxs(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/widgets/components/LIst/AnimatedList/model.dart b/lib/widgets/components/LIst/AnimatedList/model.dart index d990eb72..07b93853 100644 --- a/lib/widgets/components/LIst/AnimatedList/model.dart +++ b/lib/widgets/components/LIst/AnimatedList/model.dart @@ -25,7 +25,7 @@ class ListModel { Iterable initialItems, }) : assert(listKey != null), assert(removedItemBuilder != null), - _items = new List.from(initialItems ?? []); + _items = List.from(initialItems ?? []); final GlobalKey listKey; final dynamic removedItemBuilder; diff --git a/lib/widgets/components/LIst/ListBody/index.dart b/lib/widgets/components/LIst/ListBody/index.dart index 1699540b..f5ea6f0d 100644 --- a/lib/widgets/components/LIst/ListBody/index.dart +++ b/lib/widgets/components/LIst/ListBody/index.dart @@ -55,7 +55,7 @@ class _DemoState extends State { */ Widget allCheckboxs(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/widgets/components/LIst/ListView/index.dart b/lib/widgets/components/LIst/ListView/index.dart index 1bbebf52..5aa655dd 100644 --- a/lib/widgets/components/LIst/ListView/index.dart +++ b/lib/widgets/components/LIst/ListView/index.dart @@ -81,7 +81,7 @@ class _DemoState extends State { */ Widget allCheckboxs(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -107,7 +107,7 @@ Widget allCheckboxs(BuildContext context, _DemoState that) { * 带align的text * */ Widget textAlignBar(String txt) { - return new Align( + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ diff --git a/lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart b/lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart index 8bbe3dce..77e2f4ac 100644 --- a/lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart +++ b/lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart @@ -36,8 +36,8 @@ class _CheckedPopupMenuItemDemoState extends State { _checkedValues.add(value); } - Scaffold.of(context).showSnackBar(new SnackBar( - content: new Text('Checked $_checkedValues'))); + Scaffold.of(context).showSnackBar( SnackBar( + content: Text('Checked $_checkedValues'))); } @override diff --git a/lib/widgets/components/Menu/PopupMenuButton/demo.dart b/lib/widgets/components/Menu/PopupMenuButton/demo.dart index f992f0f1..0ed78204 100644 --- a/lib/widgets/components/Menu/PopupMenuButton/demo.dart +++ b/lib/widgets/components/Menu/PopupMenuButton/demo.dart @@ -19,8 +19,8 @@ class _PopupMenuButtonDemoState extends State { void showMenuSelection(String value) { if ([_simpleValue1, _simpleValue2, _simpleValue3].contains(value)) _simpleValue = value; - Scaffold.of(context).showSnackBar(new SnackBar( - content: new Text('You selected: $value'))); + Scaffold.of(context).showSnackBar( SnackBar( + content: Text('You selected: $value'))); } diff --git a/lib/widgets/components/Menu/PopupMenuDivider/demo.dart b/lib/widgets/components/Menu/PopupMenuDivider/demo.dart index 94e2f8df..72d35b38 100644 --- a/lib/widgets/components/Menu/PopupMenuDivider/demo.dart +++ b/lib/widgets/components/Menu/PopupMenuDivider/demo.dart @@ -13,7 +13,7 @@ class PopupMenuDividerDemo extends StatefulWidget { class _PopupMenuDividerDemoState extends State { void showInSnackBar(String value) { Scaffold.of(context) - .showSnackBar(new SnackBar(content: new Text('You selected: $value'))); + .showSnackBar( SnackBar(content: Text('You selected: $value'))); } @override diff --git a/lib/widgets/components/Menu/PopupMenuDivider/index.dart b/lib/widgets/components/Menu/PopupMenuDivider/index.dart index 92beca57..e19d2d9f 100644 --- a/lib/widgets/components/Menu/PopupMenuDivider/index.dart +++ b/lib/widgets/components/Menu/PopupMenuDivider/index.dart @@ -18,7 +18,7 @@ const String content0 = ''' const String content1 = ''' ### **基本用法** > 此widget通过调整Divider widget 来适应于弹出菜单中 -- 在 PopupMenuButton 中直接 new PopupMenuDivider() 即可 +- 在 PopupMenuButton 中直接 PopupMenuDivider() 即可 '''; class Demo extends StatefulWidget { diff --git a/lib/widgets/components/Navigation/BottomNavigationBar/demo.dart b/lib/widgets/components/Navigation/BottomNavigationBar/demo.dart index bfb57610..03c27465 100644 --- a/lib/widgets/components/Navigation/BottomNavigationBar/demo.dart +++ b/lib/widgets/components/Navigation/BottomNavigationBar/demo.dart @@ -40,17 +40,17 @@ class _BottomNavigationBarFullDefault extends State { fixedColor: Colors.deepPurple, // 如果 type 类型为 fixed,则通过 fixedColor 设置选中 item 的颜色 items: [ BottomNavigationBarItem( - title: new Text("Home"), icon: new Icon(Icons.home)), + title: Text("Home"), icon: Icon(Icons.home)), BottomNavigationBarItem( - title: new Text("List"), icon: new Icon(Icons.list)), + title: Text("List"), icon: Icon(Icons.list)), BottomNavigationBarItem( - title: new Text("Message"), icon: new Icon(Icons.message)), + title: Text("Message"), icon: Icon(Icons.message)), BottomNavigationBarItem( - title: new Text("add"), icon: new Icon(Icons.add)), + title: Text("add"), icon: Icon(Icons.add)), BottomNavigationBarItem( - title: new Text("menu"), icon: new Icon(Icons.menu)), + title: Text("menu"), icon: Icon(Icons.menu)), BottomNavigationBarItem( - title: new Text("other"), icon: new Icon(Icons.devices_other)), + title: Text("other"), icon: Icon(Icons.devices_other)), ], ); diff --git a/lib/widgets/components/Navigation/BottomNavigationBar/index.dart b/lib/widgets/components/Navigation/BottomNavigationBar/index.dart index c73376fc..56b28548 100644 --- a/lib/widgets/components/Navigation/BottomNavigationBar/index.dart +++ b/lib/widgets/components/Navigation/BottomNavigationBar/index.dart @@ -57,7 +57,7 @@ class _DemoState extends State { */ Widget allDemoBoxs(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -79,7 +79,7 @@ Widget allDemoBoxs(BuildContext context, _DemoState that) { * 带align的text * */ Widget textAlignBar(String txt) { - return new Align( + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ diff --git a/lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart b/lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart index 03851151..dc31ea12 100644 --- a/lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart +++ b/lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart @@ -21,20 +21,20 @@ class BottomNavigationBarItemLessDefault extends StatelessWidget { @override Widget build(BuildContext context) { - return new SizedBox( + return SizedBox( height: 100, child: Scaffold( - bottomNavigationBar: new BottomNavigationBar(items: [ - new BottomNavigationBarItem( - icon: new Icon(Icons.laptop_chromebook), - title: new Text("主页"), + bottomNavigationBar: BottomNavigationBar(items: [ + BottomNavigationBarItem( + icon: Icon(Icons.laptop_chromebook), + title: Text("主页"), backgroundColor: Colors.red ), - new BottomNavigationBarItem( - icon: new Icon(Icons.list), title: new Text("分类"),backgroundColor: Colors.grey), - new BottomNavigationBarItem( - icon: new Icon(Icons.local_grocery_store), title: new Text("购物车")), - new BottomNavigationBarItem(icon: new Icon(Icons.person), title: new Text("我的")) + BottomNavigationBarItem( + icon: Icon(Icons.list), title: Text("分类"),backgroundColor: Colors.grey), + BottomNavigationBarItem( + icon: Icon(Icons.local_grocery_store), title: Text("购物车")), + BottomNavigationBarItem(icon: Icon(Icons.person), title: Text("我的")) ], //onTap: onTap, //currentIndex: page @@ -46,13 +46,13 @@ class BottomNavigationBarItemLessDefault extends StatelessWidget { //backgroundColor: Colors.grey, // -//// body: new PageView( +//// body: PageView( //// //// children: [ -//// new Index(), -//// new Classify(), -//// new Shopping(), -//// new Myself() +//// Index(), +//// Classify(), +//// Shopping(), +//// Myself() //// ], //// //// controller: pageController, diff --git a/lib/widgets/components/Navigation/BottomNavigationBarItem/index.dart b/lib/widgets/components/Navigation/BottomNavigationBarItem/index.dart index c1589873..e181e6b8 100644 --- a/lib/widgets/components/Navigation/BottomNavigationBarItem/index.dart +++ b/lib/widgets/components/Navigation/BottomNavigationBarItem/index.dart @@ -52,7 +52,7 @@ class _DemoState extends State { */ Widget allCheckboxs(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -70,7 +70,7 @@ Widget allCheckboxs(BuildContext context, _DemoState that) { * 带align的text * */ Widget textAlignBar(String txt) { - return new Align( + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ diff --git a/lib/widgets/components/Pick/DayPicker/demo.dart b/lib/widgets/components/Pick/DayPicker/demo.dart index 36f249d1..445c4242 100644 --- a/lib/widgets/components/Pick/DayPicker/demo.dart +++ b/lib/widgets/components/Pick/DayPicker/demo.dart @@ -14,8 +14,8 @@ class DayPickerDemo extends StatefulWidget { } class _DayPickerState extends State { - DateTime _date = new DateTime.now(); - TimeOfDay _time = new TimeOfDay.now(); + DateTime _date = DateTime.now(); + TimeOfDay _time = TimeOfDay.now(); Future _selectDate(BuildContext context) async { final DateTime picked = await showDatePicker( @@ -29,7 +29,7 @@ class _DayPickerState extends State { _date = picked; }); - if (picked == null) _date = new DateTime.now(); + if (picked == null) _date = DateTime.now(); } Future _selectTime(BuildContext context) async { @@ -40,23 +40,23 @@ class _DayPickerState extends State { setState(() { _time = picked; }); - if (picked == null) _time = new TimeOfDay.now(); + if (picked == null) _time = TimeOfDay.now(); } @override Widget build(BuildContext context) { - return new Column( + return Column( children: [ - new Text('日期选择'), - new RaisedButton( - child: new Text('date selected:${_date.toString()}'), + Text('日期选择'), + RaisedButton( + child: Text('date selected:${_date.toString()}'), onPressed: () { _selectDate(context); }, ), - new Text('时间选择'), - new RaisedButton( - child: new Text('date selected:${_time.toString()}'), + Text('时间选择'), + RaisedButton( + child: Text('date selected:${_time.toString()}'), onPressed: () { _selectTime(context); }, diff --git a/lib/widgets/components/Pick/MonthPicker/demo.dart b/lib/widgets/components/Pick/MonthPicker/demo.dart index 40c053d8..808e6bf7 100644 --- a/lib/widgets/components/Pick/MonthPicker/demo.dart +++ b/lib/widgets/components/Pick/MonthPicker/demo.dart @@ -14,7 +14,7 @@ class MothPickerDemo extends StatefulWidget { } class _MothPickerState extends State { - DateTime _date = new DateTime.now(); + DateTime _date = DateTime.now(); Future _selectDate(BuildContext context) async { final DateTime picked = await showDatePicker( @@ -28,16 +28,16 @@ class _MothPickerState extends State { _date = picked; }); - if (picked == null) _date = new DateTime.now(); + if (picked == null) _date = DateTime.now(); } @override Widget build(BuildContext context) { - return new Column( + return Column( children: [ - new Text('日期选择'), - new RaisedButton( - child: new Text('date selected:${_date.toString()}'), + Text('日期选择'), + RaisedButton( + child: Text('date selected:${_date.toString()}'), onPressed: () { _selectDate(context); }, diff --git a/lib/widgets/components/Pick/ShowdatePicker/demo.dart b/lib/widgets/components/Pick/ShowdatePicker/demo.dart index c18bdded..e62520e9 100644 --- a/lib/widgets/components/Pick/ShowdatePicker/demo.dart +++ b/lib/widgets/components/Pick/ShowdatePicker/demo.dart @@ -14,8 +14,8 @@ class ShowDatePickerDemo extends StatefulWidget { } class _ShowDatePickerState extends State { - DateTime _date = new DateTime.now(); - TimeOfDay _time = new TimeOfDay.now(); + DateTime _date = DateTime.now(); + TimeOfDay _time = TimeOfDay.now(); Future _selectDate(BuildContext context) async { final DateTime picked = await showDatePicker( @@ -29,7 +29,7 @@ class _ShowDatePickerState extends State { _date = picked; }); - if (picked == null) _date = new DateTime.now(); + if (picked == null) _date = DateTime.now(); } Future _selectTime(BuildContext context) async { @@ -40,23 +40,23 @@ class _ShowDatePickerState extends State { setState(() { _time = picked; }); - if (picked == null) _time = new TimeOfDay.now(); + if (picked == null) _time = TimeOfDay.now(); } @override Widget build(BuildContext context) { - return new Column( + return Column( children: [ - new Text('日期选择'), - new RaisedButton( - child: new Text('date selected:${_date.toString()}'), + Text('日期选择'), + RaisedButton( + child: Text('date selected:${_date.toString()}'), onPressed: () { _selectDate(context); }, ), - new Text('时间选择'), - new RaisedButton( - child: new Text('date selected:${_time.toString()}'), + Text('时间选择'), + RaisedButton( + child: Text('date selected:${_time.toString()}'), onPressed: () { _selectTime(context); }, diff --git a/lib/widgets/components/Pick/YearPicker/demo.dart b/lib/widgets/components/Pick/YearPicker/demo.dart index 2a9694e7..1755e9e8 100644 --- a/lib/widgets/components/Pick/YearPicker/demo.dart +++ b/lib/widgets/components/Pick/YearPicker/demo.dart @@ -14,7 +14,7 @@ class YearPickerDemo extends StatefulWidget { } class _YearPickerDemoState extends State { - DateTime _date = new DateTime.now(); + DateTime _date = DateTime.now(); Future _selectDate(BuildContext context) async { final DateTime picked = await showDatePicker( @@ -28,16 +28,16 @@ class _YearPickerDemoState extends State { _date = picked; }); - if (picked == null) _date = new DateTime.now(); + if (picked == null) _date = DateTime.now(); } @override Widget build(BuildContext context) { - return new Column( + return Column( children: [ - new Text('日期选择'), - new RaisedButton( - child: new Text('date selected:${_date.toString()}'), + Text('日期选择'), + RaisedButton( + child: Text('date selected:${_date.toString()}'), onPressed: () { _selectDate(context); }, diff --git a/lib/widgets/components/Scaffold/Scaffold/demo.dart b/lib/widgets/components/Scaffold/Scaffold/demo.dart index 30bed6e8..e5d31773 100644 --- a/lib/widgets/components/Scaffold/Scaffold/demo.dart +++ b/lib/widgets/components/Scaffold/Scaffold/demo.dart @@ -37,9 +37,9 @@ class _ScaffoldDemo extends State with SingleTickerProviderStateMixin { // 如果省略了 leading ,但 AppBar 在带有 Drawer 的 Scaffold 中,则会插入一个 button 以打开 Drawer。 // 否则,如果最近的 Navigator 具有任何先前的 router ,则会插入BackButton。 // 这种行为可以通过设置来关闭automaticallyImplyLeading 为false。在这种情况下,空的 leading widget 将导致 middle/title widget 拉伸开始。 - return new SizedBox( + return SizedBox( height: 500, - child: new Scaffold( + child: Scaffold( appBar: AppBar( title: Text('Sample Code'), ), diff --git a/lib/widgets/components/Scaffold/Scaffold/index.dart b/lib/widgets/components/Scaffold/Scaffold/index.dart index 95b0d9ce..280ee05d 100644 --- a/lib/widgets/components/Scaffold/Scaffold/index.dart +++ b/lib/widgets/components/Scaffold/Scaffold/index.dart @@ -56,7 +56,7 @@ class _DemoState extends State { codeUrl: 'components/Scaffold/Scaffold/demo.dart', contentList: [ _Text0, - new ScaffoldDemo(), + ScaffoldDemo(), ], docUrl: 'https://docs.flutter.io/flutter/material/Scaffold-class.html', ); diff --git a/lib/widgets/components/Scaffold/ScaffoldState/demo.dart b/lib/widgets/components/Scaffold/ScaffoldState/demo.dart index 9c31dbd0..5ecc0ad7 100644 --- a/lib/widgets/components/Scaffold/ScaffoldState/demo.dart +++ b/lib/widgets/components/Scaffold/ScaffoldState/demo.dart @@ -28,9 +28,9 @@ class _ScaffoldStateDemo extends State with SingleTickerProviderStateMixin { // 如果省略了 leading ,但 AppBar 在带有 Drawer 的 Scaffold 中,则会插入一个 button 以打开 Drawer。 // 否则,如果最近的 Navigator 具有任何先前的 router ,则会插入BackButton。 // 这种行为可以通过设置来关闭automaticallyImplyLeading 为false。在这种情况下,空的 leading widget 将导致 middle/title widget 拉伸开始。 - return new SizedBox( + return SizedBox( height: 500, - child:new Scaffold( + child: Scaffold( key:_scaffoldKey, appBar: AppBar( title: Text('ScaffoldState Demo'), diff --git a/lib/widgets/components/Scroll/ScrollPhysics/demo.dart b/lib/widgets/components/Scroll/ScrollPhysics/demo.dart index 9cd6018d..5ded6c44 100644 --- a/lib/widgets/components/Scroll/ScrollPhysics/demo.dart +++ b/lib/widgets/components/Scroll/ScrollPhysics/demo.dart @@ -11,7 +11,7 @@ class ScrollPhysicsDemo extends StatefulWidget { } class _ScrollPhysicsDemoState extends State { - final PageController _pageController = new PageController(); + final PageController _pageController = PageController(); double _currentPage = 0.0; @override @@ -54,21 +54,21 @@ class _SimplePage extends StatelessWidget { final double parallaxOffset; @override - Widget build(BuildContext context) => new Center( + Widget build(BuildContext context) => Center( child: Container( color: Theme.of(context).primaryColor, - child: new Center( - child: new Column( + child: Center( + child: Column( mainAxisSize: MainAxisSize.min, children: [ - new Text( + Text( data, style: const TextStyle(fontSize: 60.0,color: Colors.white), ), - new SizedBox(height: 40.0), - new Transform( + SizedBox(height: 40.0), + Transform( transform: - new Matrix4.translationValues(parallaxOffset, 0.0, 0.0), + Matrix4.translationValues(parallaxOffset, 0.0, 0.0), child: const Text('左右滑动,这是第二行滚动速度更快的小字',style: const TextStyle(fontSize: 16.0,color: Colors.white),), ), ], diff --git a/lib/widgets/elements/Form/Button/DropdownButton/demo.dart b/lib/widgets/elements/Form/Button/DropdownButton/demo.dart index a2a97503..65af9e25 100644 --- a/lib/widgets/elements/Form/Button/DropdownButton/demo.dart +++ b/lib/widgets/elements/Form/Button/DropdownButton/demo.dart @@ -17,15 +17,15 @@ var selectItemValue; class DropdownButtonDefault extends StatelessWidget { List generateItemList() { - final List items = new List(); - final DropdownMenuItem item1 = new DropdownMenuItem( - value: '张三', child: new Text('张三')); - final DropdownMenuItem item2 = new DropdownMenuItem( - value: '李四', child: new Text('李四')); - final DropdownMenuItem item3 = new DropdownMenuItem( - value: '王二', child: new Text('王二')); - final DropdownMenuItem item4 = new DropdownMenuItem( - value: '麻子', child: new Text('麻子')); + final List items = List(); + final DropdownMenuItem item1 = DropdownMenuItem( + value: '张三', child: Text('张三')); + final DropdownMenuItem item2 = DropdownMenuItem( + value: '李四', child: Text('李四')); + final DropdownMenuItem item3 = DropdownMenuItem( + value: '王二', child: Text('王二')); + final DropdownMenuItem item4 = DropdownMenuItem( + value: '麻子', child: Text('麻子')); items.add(item1); items.add(item2); items.add(item3); @@ -36,7 +36,7 @@ class DropdownButtonDefault extends StatelessWidget { @override Widget build(BuildContext context) { return DropdownButton( - hint: new Text('下拉菜单选择一个人名'), + hint: Text('下拉菜单选择一个人名'), //设置这个value之后,选中对应位置的item, //再次呼出下拉菜单,会自动定位item位置在当前按钮显示的位置处 value: selectItValue, @@ -51,54 +51,54 @@ class DropdownButtonDefault extends StatelessWidget { } List getListData(){ - List items=new List(); - DropdownMenuItem dropdownMenuItem1=new DropdownMenuItem( - child:new Text('1'), + List items= List(); + DropdownMenuItem dropdownMenuItem1= DropdownMenuItem( + child: Text('1'), value: '1', ); items.add(dropdownMenuItem1); - DropdownMenuItem dropdownMenuItem2=new DropdownMenuItem( - child:new Text('2'), + DropdownMenuItem dropdownMenuItem2= DropdownMenuItem( + child: Text('2'), value: '2', ); items.add(dropdownMenuItem2); - DropdownMenuItem dropdownMenuItem3=new DropdownMenuItem( - child:new Text('3'), + DropdownMenuItem dropdownMenuItem3= DropdownMenuItem( + child: Text('3'), value: '3', ); items.add(dropdownMenuItem3); - DropdownMenuItem dropdownMenuItem4=new DropdownMenuItem( - child:new Text('4'), + DropdownMenuItem dropdownMenuItem4= DropdownMenuItem( + child: Text('4'), value: '4', ); items.add(dropdownMenuItem4); - DropdownMenuItem dropdownMenuItem5=new DropdownMenuItem( - child:new Text('5'), + DropdownMenuItem dropdownMenuItem5= DropdownMenuItem( + child: Text('5'), value: '5', ); items.add(dropdownMenuItem5); - DropdownMenuItem dropdownMenuItem6=new DropdownMenuItem( - child:new Text('6'), + DropdownMenuItem dropdownMenuItem6= DropdownMenuItem( + child: Text('6'), value: '6', ); items.add(dropdownMenuItem6); - DropdownMenuItem dropdownMenuItem7=new DropdownMenuItem( - child:new Text('7'), + DropdownMenuItem dropdownMenuItem7= DropdownMenuItem( + child: Text('7'), value: '7', ); items.add(dropdownMenuItem7); - DropdownMenuItem dropdownMenuItem8=new DropdownMenuItem( - child:new Text('8'), + DropdownMenuItem dropdownMenuItem8= DropdownMenuItem( + child: Text('8'), value: '8', ); items.add(dropdownMenuItem8); - DropdownMenuItem dropdownMenuItem9=new DropdownMenuItem( - child:new Text('9'), + DropdownMenuItem dropdownMenuItem9= DropdownMenuItem( + child: Text('9'), value: '9', ); items.add(dropdownMenuItem9); - DropdownMenuItem dropdownMenuItem10=new DropdownMenuItem( - child:new Text('10'), + DropdownMenuItem dropdownMenuItem10= DropdownMenuItem( + child: Text('10'), value: '10', ); items.add(dropdownMenuItem10); diff --git a/lib/widgets/elements/Form/Button/DropdownButton/index.dart b/lib/widgets/elements/Form/Button/DropdownButton/index.dart index b6f98d4e..1947f256 100644 --- a/lib/widgets/elements/Form/Button/DropdownButton/index.dart +++ b/lib/widgets/elements/Form/Button/DropdownButton/index.dart @@ -62,7 +62,7 @@ class _DemoState extends State { */ Widget allDropdownButtons(BuildContext context,_DemoState that){ return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -87,14 +87,14 @@ Widget allDropdownButtons(BuildContext context,_DemoState that){ * 带align的text * */ Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new Align( + //style: TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ SizedBox(height: 20.0), MarkdownBody(data: txt) - //new Text(txt, style: new TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) + // Text(txt, style: TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) ]) ); } diff --git a/lib/widgets/elements/Form/Button/FlatButton/demo.dart b/lib/widgets/elements/Form/Button/FlatButton/demo.dart index ee2b36c4..845420c2 100644 --- a/lib/widgets/elements/Form/Button/FlatButton/demo.dart +++ b/lib/widgets/elements/Form/Button/FlatButton/demo.dart @@ -101,9 +101,9 @@ class FlatButtonCustom extends StatelessWidget { splashColor: Colors.deepPurple, // 抗锯齿能力,抗锯齿等级依次递增,none(默认),hardEdge,antiAliasWithSaveLayer,antiAlias clipBehavior: Clip.antiAlias, - padding: new EdgeInsets.only( + padding: EdgeInsets.only( bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), - shape: (shape is ShapeBorder) ? shape : new Border.all( + shape: (shape is ShapeBorder) ? shape : Border.all( // 设置边框样式 color: Colors.grey, width: 2.0, diff --git a/lib/widgets/elements/Form/Button/FlatButton/index.dart b/lib/widgets/elements/Form/Button/FlatButton/index.dart index faf80259..967fb8a9 100644 --- a/lib/widgets/elements/Form/Button/FlatButton/index.dart +++ b/lib/widgets/elements/Form/Button/FlatButton/index.dart @@ -64,7 +64,7 @@ class _DemoState extends State { */ Widget allFlatButtons(BuildContext context){ return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -109,7 +109,7 @@ Widget allFlatButtons(BuildContext context){ flatButton.FlatButtonCustom('危险按钮',Colors.pink), SizedBox(height: 10.0), flatButton.FlatButtonCustom('点击我试试!', Colors.red, - new Border.all(color: Colors.brown, width: 5.0, style: BorderStyle.solid), + Border.all(color: Colors.brown, width: 5.0, style: BorderStyle.solid), () => _showMessage('点击了 FLAT BUTTON ', context)), SizedBox(height: 20.0) ]) @@ -126,16 +126,16 @@ void _showMessage(String name, BuildContext context) { context: context, builder: (BuildContext context) { return AlertDialog( - title: new Text('提示'), - content: new Text(name), + title: Text('提示'), + content: Text(name), actions: [ - new FlatButton( + FlatButton( // alert 的取消按钮 onPressed: () { // 取消的事件 Navigator.of(context).pop(true); }, - child: new Text('取消')) + child: Text('取消')) ]); } ); @@ -145,14 +145,14 @@ void _showMessage(String name, BuildContext context) { * 带align的text * */ Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new Align( + //style: TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ SizedBox(height: 20.0), MarkdownBody(data: txt) - //new Text(txt, style: new TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) + // Text(txt, style: TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) ]) ); } diff --git a/lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart b/lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart index f4188499..e4fbba56 100644 --- a/lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart +++ b/lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart @@ -49,7 +49,7 @@ class FloatingActionButtonCustom extends StatelessWidget { @override Widget build(BuildContext context) { final _onPressed = onPressed; - return new FloatingActionButton( + return FloatingActionButton( // 子视图,一般为Icon,不推荐使用文字 child: const Icon(Icons.refresh), // FAB的文字解释,FAB被长按时显示,也是无障碍功能 @@ -109,8 +109,8 @@ class FloatingActionButtonCustom2 extends StatelessWidget { foregroundColor: Colors.white, backgroundColor: Colors.amber, //如果不手动设置icon和text颜色,则默认使用foregroundColor颜色 - icon: new Icon(Icons.flag,color: Colors.red), - label: new Text('FloatingActionButton.extended', maxLines: 1), + icon: Icon(Icons.flag,color: Colors.red), + label: Text('FloatingActionButton.extended', maxLines: 1), ); } } diff --git a/lib/widgets/elements/Form/Button/FloatingActionButton/index.dart b/lib/widgets/elements/Form/Button/FloatingActionButton/index.dart index e7cbb728..9bc53719 100644 --- a/lib/widgets/elements/Form/Button/FloatingActionButton/index.dart +++ b/lib/widgets/elements/Form/Button/FloatingActionButton/index.dart @@ -72,7 +72,7 @@ class _DemoState extends State { Widget allFloatingActionButtons(BuildContext context,_DemoState that){ final ShapeBorder buttonShape = drawShape(that.buttonShapeType); return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -109,16 +109,16 @@ Widget allFloatingActionButtons(BuildContext context,_DemoState that){ // context: context, // builder: (BuildContext context) { // return AlertDialog( -// title: new Text('提示'), -// content: new Text(name), +// title: Text('提示'), +// content: Text(name), // actions: [ -// new FlatButton( +// FlatButton( // // alert 的取消按钮 // onPressed: () { // // 取消的事件 // Navigator.of(context).pop(true); // }, -// child: new Text('取消')) +// child: Text('取消')) // ]); // } // ); @@ -128,14 +128,14 @@ Widget allFloatingActionButtons(BuildContext context,_DemoState that){ * 带align的text * */ Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new Align( + //style: TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ SizedBox(height: 20.0), MarkdownBody(data: txt) - //new Text(txt, style: new TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) + // Text(txt, style: TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) ]) ); } @@ -159,7 +159,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, diff --git a/lib/widgets/elements/Form/Button/IconButton/demo.dart b/lib/widgets/elements/Form/Button/IconButton/demo.dart index d59f5a13..5a8077fb 100644 --- a/lib/widgets/elements/Form/Button/IconButton/demo.dart +++ b/lib/widgets/elements/Form/Button/IconButton/demo.dart @@ -75,7 +75,7 @@ class IconButtonCustom extends StatelessWidget { iconSize:(Random.secure().nextInt(20)+20).toDouble(), // 随机大小 // 按钮内部,墨汁飞溅的颜色,点击按钮时的渐变背景色,当你不设置高亮背景时才会看的更清楚 splashColor: _randomColor(), - padding: new EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), + padding: EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), // 描述按下按钮时将发生的操作的文本 tooltip:'这是${ type.codePoint }信息', // IconButton 的点击事件 diff --git a/lib/widgets/elements/Form/Button/IconButton/index.dart b/lib/widgets/elements/Form/Button/IconButton/index.dart index 278173b9..94328e59 100644 --- a/lib/widgets/elements/Form/Button/IconButton/index.dart +++ b/lib/widgets/elements/Form/Button/IconButton/index.dart @@ -66,7 +66,7 @@ class _DemoState extends State { Widget allIconButtons(BuildContext context,_DemoState that){ final ShapeBorder buttonShape = drawShape(that.buttonShapeType); return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -106,14 +106,14 @@ Widget allIconButtons(BuildContext context,_DemoState that){ * 带align的text * */ Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new Align( + //style: TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ SizedBox(height: 20.0), MarkdownBody(data: txt) - //new Text(txt, style: new TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) + // Text(txt, style: TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) ]) ); } @@ -137,7 +137,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, diff --git a/lib/widgets/elements/Form/Button/OutlineButton/demo.dart b/lib/widgets/elements/Form/Button/OutlineButton/demo.dart index 582d7135..39d4b313 100644 --- a/lib/widgets/elements/Form/Button/OutlineButton/demo.dart +++ b/lib/widgets/elements/Form/Button/OutlineButton/demo.dart @@ -79,7 +79,7 @@ class OutlineButtonCustom extends StatelessWidget { // 文本内容 child: Text(txt, semanticsLabel: 'FLAT BUTTON 2'), // 边框的颜色,颜色也可以走主题色 Theme.of(context).primaryColor - borderSide:new BorderSide(color: _randomColor(),width:Random.secure().nextInt(10).toDouble()), + borderSide: BorderSide(color: _randomColor(),width:Random.secure().nextInt(10).toDouble()), // 按钮颜色 color: _randomColor(), // 按钮失效时边框颜色 @@ -100,7 +100,7 @@ class OutlineButtonCustom extends StatelessWidget { splashColor: _randomColor(), // 抗锯齿能力,抗锯齿等级依次递增,none(默认),hardEdge,antiAliasWithSaveLayer,antiAlias clipBehavior: Clip.antiAlias, - padding: new EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), + padding: EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), //高亮时候的阴影 highlightElevation: 10.0, shape: shape, // 在Outline 里只能设置圆角,边框用borderSide diff --git a/lib/widgets/elements/Form/Button/OutlineButton/index.dart b/lib/widgets/elements/Form/Button/OutlineButton/index.dart index 8ab15911..c4894e34 100644 --- a/lib/widgets/elements/Form/Button/OutlineButton/index.dart +++ b/lib/widgets/elements/Form/Button/OutlineButton/index.dart @@ -75,7 +75,7 @@ class _DemoState extends State { Widget allOutlineButtons(BuildContext context,_DemoState that){ final ShapeBorder buttonShape = drawShape(that.buttonShapeType); return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -136,16 +136,16 @@ Widget allOutlineButtons(BuildContext context,_DemoState that){ // context: context, // builder: (BuildContext context) { // return AlertDialog( -// title: new Text('提示'), -// content: new Text(name), +// title: Text('提示'), +// content: Text(name), // actions: [ -// new FlatButton( +// FlatButton( // // alert 的取消按钮 // onPressed: () { // // 取消的事件 // Navigator.of(context).pop(true); // }, -// child: new Text('取消')) +// child: Text('取消')) // ]); // } // ); @@ -155,14 +155,14 @@ Widget allOutlineButtons(BuildContext context,_DemoState that){ * 带align的text * */ Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new Align( + //style: TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ SizedBox(height: 20.0), MarkdownBody(data: txt) - //new Text(txt, style: new TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) + // Text(txt, style: TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) ]) ); } @@ -186,7 +186,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, diff --git a/lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart b/lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart index 40e8099f..bfe50fe4 100644 --- a/lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart +++ b/lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart @@ -71,8 +71,8 @@ class PopupMenuButtonDefault extends StatelessWidget { child: Text('点我试试'), onSelected: (String value) {}, itemBuilder: (BuildContext context) => >[ - new PopupMenuItem(value: "选项一的内容", child: new Text("选项一")), - new PopupMenuItem(value: "选项二的内容", child: new Text("选项二")) + PopupMenuItem(value: "选项一的内容", child: Text("选项一")), + PopupMenuItem(value: "选项二的内容", child: Text("选项二")) ]); } @@ -82,8 +82,8 @@ class PopupMenuButtonDefault extends StatelessWidget { icon: Icon(Icons.menu), onSelected: (String value) {}, itemBuilder: (BuildContext context) => >[ - new PopupMenuItem(value: "选项一的内容", child: new Text("选项一")), - new PopupMenuItem(value: "选项二的内容", child: new Text("选项二")) + PopupMenuItem(value: "选项一的内容", child: Text("选项一")), + PopupMenuItem(value: "选项二的内容", child: Text("选项二")) ]); } } @@ -116,10 +116,10 @@ class PopupMenuButtonCustom extends StatelessWidget { initialValue:selectStr, // 按下按钮时调用以创建要在菜单中显示的项目。 itemBuilder: (BuildContext context) => >[ - new PopupMenuItem(value: "选项一的内容", child: new Text("选项一")), - new PopupMenuItem(value: "选项二的内容", child: new Text("选项二")), - new PopupMenuItem(value: "选项三的内容", child: new Text("选项三")), - new PopupMenuItem(value: "选项四的内容", child: new Text("选项四")) + PopupMenuItem(value: "选项一的内容", child: Text("选项一")), + PopupMenuItem(value: "选项二的内容", child: Text("选项二")), + PopupMenuItem(value: "选项三的内容", child: Text("选项三")), + PopupMenuItem(value: "选项四的内容", child: Text("选项四")) ], // 应用于弹出菜单按钮的偏移量(x,y)。 offset:Offset(0.0,50.0), @@ -134,7 +134,7 @@ class PopupMenuButtonCustom extends StatelessWidget { }); }, // 默认情况下匹配IconButton的8 dps填充。在某些情况下,特别是在此按钮作为列表项的尾随元素出现的情况下,能够将填充设置为零是有用的。 - padding:new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0.0, right: 0.0), + padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0.0, right: 0.0), //描述按下按钮时将发生的操作的文本。 tooltip:'这是信息' ); diff --git a/lib/widgets/elements/Form/Button/PopupMenuButton/index.dart b/lib/widgets/elements/Form/Button/PopupMenuButton/index.dart index 1ddcc856..012832d7 100644 --- a/lib/widgets/elements/Form/Button/PopupMenuButton/index.dart +++ b/lib/widgets/elements/Form/Button/PopupMenuButton/index.dart @@ -64,7 +64,7 @@ class _DemoState extends State { Widget allPopupMenuButton(Demo widget,State parent){ return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/widgets/elements/Form/Button/RaisedButton/demo.dart b/lib/widgets/elements/Form/Button/RaisedButton/demo.dart index 0ddece9d..6790d4e0 100644 --- a/lib/widgets/elements/Form/Button/RaisedButton/demo.dart +++ b/lib/widgets/elements/Form/Button/RaisedButton/demo.dart @@ -105,10 +105,10 @@ class RaisedButtonCustom extends StatelessWidget { // 抗锯齿能力,抗锯齿等级依次递增,none(默认),hardEdge,antiAliasWithSaveLayer,antiAlias clipBehavior: Clip.antiAlias, padding: - new EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), + EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), shape: (shape is ShapeBorder) ? shape - : new Border.all( + : Border.all( // 设置边框样式 color: Colors.grey, width: 2.0, diff --git a/lib/widgets/elements/Form/Button/RaisedButton/index.dart b/lib/widgets/elements/Form/Button/RaisedButton/index.dart index 9342f00e..9b552503 100644 --- a/lib/widgets/elements/Form/Button/RaisedButton/index.dart +++ b/lib/widgets/elements/Form/Button/RaisedButton/index.dart @@ -74,7 +74,7 @@ class _DemoState extends State { Widget allRaisedButtons(BuildContext context,_DemoState that){ final ShapeBorder buttonShape = drawShape(that.buttonShapeType); return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -135,16 +135,16 @@ Widget allRaisedButtons(BuildContext context,_DemoState that){ // context: context, // builder: (BuildContext context) { // return AlertDialog( -// title: new Text('提示'), -// content: new Text(name), +// title: Text('提示'), +// content: Text(name), // actions: [ -// new FlatButton( +// FlatButton( // // alert 的取消按钮 // onPressed: () { // // 取消的事件 // Navigator.of(context).pop(true); // }, -// child: new Text('取消')) +// child: Text('取消')) // ]); // } // ); @@ -154,14 +154,14 @@ Widget allRaisedButtons(BuildContext context,_DemoState that){ * 带align的text * */ Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new Align( + //style: TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ SizedBox(height: 20.0), MarkdownBody(data: txt) - //new Text(txt, style: new TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) + // Text(txt, style: TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) ]) ); } @@ -185,7 +185,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, diff --git a/lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart b/lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart index 3b309a0b..407b0c92 100644 --- a/lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart +++ b/lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart @@ -62,7 +62,7 @@ class RawMaterialButtonCustom extends StatelessWidget { splashColor: _randomColor(), // 抗锯齿能力,抗锯齿等级依次递增,none(默认),hardEdge,antiAliasWithSaveLayer,antiAlias clipBehavior: Clip.antiAlias, - padding: new EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), + padding: EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0), //高亮时候的阴影 highlightElevation: 10.0, // 按钮材质的形状 diff --git a/lib/widgets/elements/Form/Button/RawMaterialButton/index.dart b/lib/widgets/elements/Form/Button/RawMaterialButton/index.dart index 24a44bd8..9bced044 100644 --- a/lib/widgets/elements/Form/Button/RawMaterialButton/index.dart +++ b/lib/widgets/elements/Form/Button/RawMaterialButton/index.dart @@ -64,7 +64,7 @@ class _DemoState extends State { Widget allRawMaterialButtons(BuildContext context,_DemoState that){ final ShapeBorder buttonShape = drawShape(that.buttonShapeType); return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -108,16 +108,16 @@ Widget allRawMaterialButtons(BuildContext context,_DemoState that){ // context: context, // builder: (BuildContext context) { // return AlertDialog( -// title: new Text('提示'), -// content: new Text(name), +// title: Text('提示'), +// content: Text(name), // actions: [ -// new FlatButton( +// FlatButton( // // alert 的取消按钮 // onPressed: () { // // 取消的事件 // Navigator.of(context).pop(true); // }, -// child: new Text('取消')) +// child: Text('取消')) // ]); // } // ); @@ -127,14 +127,14 @@ Widget allRawMaterialButtons(BuildContext context,_DemoState that){ * 带align的text * */ Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new Align( + //style: TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ SizedBox(height: 20.0), MarkdownBody(data: txt) - //new Text(txt, style: new TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) + // Text(txt, style: TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) ]) ); } @@ -158,7 +158,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, diff --git a/lib/widgets/elements/Form/CheckBox/Checkbox/index.dart b/lib/widgets/elements/Form/CheckBox/Checkbox/index.dart index b99b354c..a7715fda 100644 --- a/lib/widgets/elements/Form/CheckBox/Checkbox/index.dart +++ b/lib/widgets/elements/Form/CheckBox/Checkbox/index.dart @@ -59,7 +59,7 @@ class _DemoState extends State { */ Widget allCheckboxs(BuildContext context,_DemoState that){ return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children: [ @@ -97,13 +97,13 @@ Widget allCheckboxs(BuildContext context,_DemoState that){ * 带align的text * */ Widget textAlignBar(String txt){ - return new Align( + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ SizedBox(height: 20.0), MarkdownBody(data: txt) - //new Text(txt, style: new TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) + // Text(txt, style: TextStyle(fontSize: 15.5,height: 1.2,color:Colors.blue),textAlign:TextAlign.left) ]) ); } diff --git a/lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart b/lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart index d4e5c2a9..2518f5f5 100644 --- a/lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart +++ b/lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart @@ -34,7 +34,7 @@ class _CheckboxListTileStateDefault extends State { return Column( mainAxisAlignment: MainAxisAlignment.start, children: [ - new Center( + Center( child: CheckboxListTile( value: _value, selected:true,// 默认文字是否高亮 @@ -48,10 +48,10 @@ class _CheckboxListTileStateDefault extends State { activeColor: Colors.red, // 选中此复选框时要使用的颜色 ), ), - new Center( - child: new CheckboxListTile( + Center( + child: CheckboxListTile( value: isChecks[0], - title: new Text('选项1'), + title: Text('选项1'), activeColor: _value ? Colors.red : Colors.green, controlAffinity: ListTileControlAffinity.platform, onChanged: (bool){ @@ -60,10 +60,10 @@ class _CheckboxListTileStateDefault extends State { }); }), ), - new Center( - child: new CheckboxListTile( + Center( + child: CheckboxListTile( value: isChecks[1], - title: new Text('选项2'), + title: Text('选项2'), activeColor: _value ? Colors.red : Colors.green, controlAffinity: ListTileControlAffinity.platform, onChanged: (bool){ @@ -72,10 +72,10 @@ class _CheckboxListTileStateDefault extends State { }); }), ), - new Center( - child: new CheckboxListTile( + Center( + child: CheckboxListTile( value: isChecks[2], - title: new Text('选项3'), + title: Text('选项3'), activeColor: _value ? Colors.red : Colors.green, controlAffinity: ListTileControlAffinity.platform, onChanged: (bool){ @@ -84,10 +84,10 @@ class _CheckboxListTileStateDefault extends State { }); }), ), - new Center( - child: new CheckboxListTile( + Center( + child: CheckboxListTile( value: isChecks[3], - title: new Text('选项4'), + title: Text('选项4'), activeColor: _value ? Colors.red : Colors.green, controlAffinity: ListTileControlAffinity.platform, onChanged: (bool){ diff --git a/lib/widgets/elements/Form/CheckBox/CheckboxListTile/index.dart b/lib/widgets/elements/Form/CheckBox/CheckboxListTile/index.dart index f065e227..a3548e56 100644 --- a/lib/widgets/elements/Form/CheckBox/CheckboxListTile/index.dart +++ b/lib/widgets/elements/Form/CheckBox/CheckboxListTile/index.dart @@ -61,7 +61,7 @@ class _DemoState extends State { */ Widget allCheckboxs(BuildContext context, _DemoState that) { return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), + //padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), child: Column( //mainAxisSize: MainAxisSize.max, children:[ @@ -79,7 +79,7 @@ Widget allCheckboxs(BuildContext context, _DemoState that) { * 带align的text * */ Widget textAlignBar(String txt) { - return new Align( + return Align( alignment: FractionalOffset.centerLeft, child: Column( children: [ diff --git a/lib/widgets/elements/Form/Input/TextField/text_field_demo.dart b/lib/widgets/elements/Form/Input/TextField/text_field_demo.dart index 3d36b522..60d2ab24 100644 --- a/lib/widgets/elements/Form/Input/TextField/text_field_demo.dart +++ b/lib/widgets/elements/Form/Input/TextField/text_field_demo.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; class DefaultTextField extends StatelessWidget { @override Widget build(BuildContext context) { - return new Container( + return Container( padding: const EdgeInsets.all(30.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, //文本是起始端对齐 @@ -29,7 +29,7 @@ class CustomTextField extends StatelessWidget { @override Widget build(BuildContext context) { - return new Container( + return Container( padding: const EdgeInsets.all(30.0), child: TextField( keyboardType: TextInputType.number, diff --git a/lib/widgets/elements/Form/Radio/Radio/demo.dart b/lib/widgets/elements/Form/Radio/Radio/demo.dart index 93022062..d55dca91 100644 --- a/lib/widgets/elements/Form/Radio/Radio/demo.dart +++ b/lib/widgets/elements/Form/Radio/Radio/demo.dart @@ -22,27 +22,27 @@ class _Demo extends State { } Widget build(BuildContext context) { return ( - new Container( + Container( alignment: Alignment.centerLeft, - child: new Column( + child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ - new Radio( + Radio( value: 1, groupValue: groupValue,//当value和groupValue一致的时候则选中 onChanged: (T){ onChange(T); } ), - new Radio( + Radio( value: 2, groupValue: groupValue, onChanged: (T){ onChange(T); } ), - new Radio( + Radio( value: 3, groupValue: groupValue, onChanged: (T){ diff --git a/lib/widgets/elements/Form/Radio/Radio/index.dart b/lib/widgets/elements/Form/Radio/Radio/index.dart index 0d8a280b..874da7b5 100644 --- a/lib/widgets/elements/Form/Radio/Radio/index.dart +++ b/lib/widgets/elements/Form/Radio/Radio/index.dart @@ -25,7 +25,7 @@ const content2 = """ # 基本用法 ``` -new Radio( + Radio( value: value, groupValue: groupValue, //当value和groupValue一致的时候则选中 onChanged: (T){ @@ -45,7 +45,7 @@ class _DemoState extends State { return WidgetDemo( contentList: [ content1, - new RadioADemo(), + RadioADemo(), content2 ], title: 'Radio', diff --git a/lib/widgets/elements/Form/Radio/RadioListTile/demo.dart b/lib/widgets/elements/Form/Radio/RadioListTile/demo.dart index 50ceb3c1..1b3ba679 100644 --- a/lib/widgets/elements/Form/Radio/RadioListTile/demo.dart +++ b/lib/widgets/elements/Form/Radio/RadioListTile/demo.dart @@ -24,7 +24,7 @@ class _Demo extends State { } Widget build(BuildContext context) { - return new Column( + return Column( children: [ RadioListTile( title: const Text('A'), diff --git a/lib/widgets/elements/Form/Radio/RadioListTile/index.dart b/lib/widgets/elements/Form/Radio/RadioListTile/index.dart index b7a32288..13b967a2 100644 --- a/lib/widgets/elements/Form/Radio/RadioListTile/index.dart +++ b/lib/widgets/elements/Form/Radio/RadioListTile/index.dart @@ -45,7 +45,7 @@ class _DemoState extends State { return WidgetDemo( contentList: [ content1, - new DemoA(), + DemoA(), content2 ], title: 'RadioListTile', diff --git a/lib/widgets/elements/Form/Slider/Slider/demo.dart b/lib/widgets/elements/Form/Slider/Slider/demo.dart index b7e009f2..c7f48dab 100644 --- a/lib/widgets/elements/Form/Slider/Slider/demo.dart +++ b/lib/widgets/elements/Form/Slider/Slider/demo.dart @@ -16,7 +16,7 @@ class SliderDemo extends StatefulWidget { class _Demo extends State { double value = 0.0; Widget build(BuildContext context) { - return new Slider( + return Slider( value: value,//实际进度的位置 inactiveColor: Colors.black12,//进度中不活动部分的颜色 label: 'value: $value', @@ -43,8 +43,8 @@ class SliderThemeDemo extends StatefulWidget { class _SliderThemeDemo extends State { double value = 0.0; Widget build(BuildContext context) { - return new Container( - child: new SliderTheme( + return Container( + child: SliderTheme( data: SliderTheme.of(context).copyWith( // activeTickMarkColor:Colors.yellowAccent, activeTrackColor: Colors.yellowAccent,//实际进度的颜色 @@ -52,21 +52,21 @@ class _SliderThemeDemo extends State { thumbColor: Colors.black,//滑块中心的颜色 inactiveTrackColor:Colors.red,//默 认进度条的颜色 valueIndicatorColor: Colors.blue,//提示进度的气派的背景色 - valueIndicatorTextStyle: new TextStyle(//提示气泡里面文字的样式 + valueIndicatorTextStyle: TextStyle(//提示气泡里面文字的样式 color: Colors.white, ), inactiveTickMarkColor:Colors.blue,//divisions对进度线分割后 断续线中间间隔的颜色 overlayColor: Colors.pink,//滑块边缘颜色 ), - child: new Container( + child: Container( width: 340.0, margin: EdgeInsets.fromLTRB(0.0, 50.0, 0.0, 0.0), - child: new Row( + child: Row( children: [ - new Text('0.0'), - new Expanded( + Text('0.0'), + Expanded( flex: 1, - child: new Slider( + child: Slider( value: value, label: '$value', divisions: 10, @@ -79,7 +79,7 @@ class _SliderThemeDemo extends State { max: 100.0, ), ), - new Text('100.0'), + Text('100.0'), ], ), ), diff --git a/lib/widgets/elements/Form/Slider/Slider/index.dart b/lib/widgets/elements/Form/Slider/Slider/index.dart index 42392f36..7cde20f0 100644 --- a/lib/widgets/elements/Form/Slider/Slider/index.dart +++ b/lib/widgets/elements/Form/Slider/Slider/index.dart @@ -49,19 +49,19 @@ const contentB = ''' 如果当前Slider样式 无法满足需求, 可以通过 ** SliderTheme ** 定制复杂样式 ``` -new SliderTheme( + SliderTheme( data: SliderTheme.of(context).copyWith( activeTrackColor: Colors.yellowAccent,//实际进度的颜色 inactiveTickMarkColor:Colors.black thumbColor: Colors.black,//滑块中心的颜色 inactiveTrackColor:Colors.red,//默 认进度条的颜色 valueIndicatorColor: Colors.blue,//提示进度的气派的背景色 - valueIndicatorTextStyle: new TextStyle(//提示气泡里面文字的样式 + valueIndicatorTextStyle: TextStyle(//提示气泡里面文字的样式 color: Colors.white, ), inactiveTickMarkColor:Colors.blue,//divisions对进度线分割后 断续线中间间隔的颜色 overlayColor: Colors.pink,//滑块边缘颜色 - child: new Slider() + child: Slider() ) ``` diff --git a/lib/widgets/elements/Form/Slider/SliderTheme/demo.dart b/lib/widgets/elements/Form/Slider/SliderTheme/demo.dart index 0fb46382..19c15f6a 100644 --- a/lib/widgets/elements/Form/Slider/SliderTheme/demo.dart +++ b/lib/widgets/elements/Form/Slider/SliderTheme/demo.dart @@ -17,8 +17,8 @@ class SliderThemeDemo extends StatefulWidget { class _SliderThemeDemo extends State { double value = 0.0; Widget build(BuildContext context) { - return new Container( - child: new SliderTheme( + return Container( + child: SliderTheme( data: SliderTheme.of(context).copyWith( // activeTickMarkColor:Colors.yellowAccent, activeTrackColor: Colors.yellowAccent,//实际进度的颜色 @@ -26,21 +26,21 @@ class _SliderThemeDemo extends State { thumbColor: Colors.black,//滑块中心的颜色 inactiveTrackColor:Colors.red,//默 认进度条的颜色 valueIndicatorColor: Colors.blue,//提示进度的气派的背景色 - valueIndicatorTextStyle: new TextStyle(//提示气泡里面文字的样式 + valueIndicatorTextStyle: TextStyle(//提示气泡里面文字的样式 color: Colors.white, ), inactiveTickMarkColor:Colors.blue,//divisions对进度线分割后 断续线中间间隔的颜色 overlayColor: Colors.pink,//滑块边缘颜色 ), - child: new Container( + child: Container( width: 340.0, margin: EdgeInsets.fromLTRB(0.0, 50.0, 0.0, 0.0), - child: new Row( + child: Row( children: [ - new Text('0.0'), - new Expanded( + Text('0.0'), + Expanded( flex: 1, - child: new Slider( + child: Slider( value: value, label: '$value', divisions: 10, @@ -53,7 +53,7 @@ class _SliderThemeDemo extends State { max: 100.0, ), ), - new Text('100.0'), + Text('100.0'), ], ), ), diff --git a/lib/widgets/elements/Form/Slider/SliderTheme/index.dart b/lib/widgets/elements/Form/Slider/SliderTheme/index.dart index b930fef2..d40d9172 100644 --- a/lib/widgets/elements/Form/Slider/SliderTheme/index.dart +++ b/lib/widgets/elements/Form/Slider/SliderTheme/index.dart @@ -24,7 +24,7 @@ const contentA = ''' 基本属性参考以下代码: ``` -new SliderTheme( + SliderTheme( data: SliderThemeData({ @required Color activeTrackColor, @required Color inactiveTrackColor, @@ -67,7 +67,7 @@ class _Demo extends State { codeUrl: 'elements/Form/Slider/SliderTheme/demo.dart', contentList: [ contentA, - new SliderThemeDemo(), + SliderThemeDemo(), ], docUrl: 'https://docs.flutter.io/flutter/material/SliderTheme-class.html', ); diff --git a/lib/widgets/elements/Form/Slider/SliderThemeData/demo.dart b/lib/widgets/elements/Form/Slider/SliderThemeData/demo.dart index 0fb46382..19c15f6a 100644 --- a/lib/widgets/elements/Form/Slider/SliderThemeData/demo.dart +++ b/lib/widgets/elements/Form/Slider/SliderThemeData/demo.dart @@ -17,8 +17,8 @@ class SliderThemeDemo extends StatefulWidget { class _SliderThemeDemo extends State { double value = 0.0; Widget build(BuildContext context) { - return new Container( - child: new SliderTheme( + return Container( + child: SliderTheme( data: SliderTheme.of(context).copyWith( // activeTickMarkColor:Colors.yellowAccent, activeTrackColor: Colors.yellowAccent,//实际进度的颜色 @@ -26,21 +26,21 @@ class _SliderThemeDemo extends State { thumbColor: Colors.black,//滑块中心的颜色 inactiveTrackColor:Colors.red,//默 认进度条的颜色 valueIndicatorColor: Colors.blue,//提示进度的气派的背景色 - valueIndicatorTextStyle: new TextStyle(//提示气泡里面文字的样式 + valueIndicatorTextStyle: TextStyle(//提示气泡里面文字的样式 color: Colors.white, ), inactiveTickMarkColor:Colors.blue,//divisions对进度线分割后 断续线中间间隔的颜色 overlayColor: Colors.pink,//滑块边缘颜色 ), - child: new Container( + child: Container( width: 340.0, margin: EdgeInsets.fromLTRB(0.0, 50.0, 0.0, 0.0), - child: new Row( + child: Row( children: [ - new Text('0.0'), - new Expanded( + Text('0.0'), + Expanded( flex: 1, - child: new Slider( + child: Slider( value: value, label: '$value', divisions: 10, @@ -53,7 +53,7 @@ class _SliderThemeDemo extends State { max: 100.0, ), ), - new Text('100.0'), + Text('100.0'), ], ), ), diff --git a/lib/widgets/elements/Form/Slider/SliderThemeData/index.dart b/lib/widgets/elements/Form/Slider/SliderThemeData/index.dart index 43e7b736..f87235b3 100644 --- a/lib/widgets/elements/Form/Slider/SliderThemeData/index.dart +++ b/lib/widgets/elements/Form/Slider/SliderThemeData/index.dart @@ -63,7 +63,7 @@ class _Demo extends State { codeUrl: 'elements/Form/Slider/SliderThemeData/demo.dart', contentList: [ contentA, - new SliderThemeDemo() + SliderThemeDemo() ], docUrl: 'https://docs.flutter.io/flutter/material/SliderThemeData-class.html', ); diff --git a/lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart b/lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart index b2eeff2a..2ce4aa3b 100644 --- a/lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart +++ b/lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart @@ -39,7 +39,7 @@ class _Demo extends State { codeUrl: 'elements/Form/Switch/AnimatedSwitcher/demo.dart', contentList: [ contentA, - new AnimatedSwitcherDemo() + AnimatedSwitcherDemo() ], docUrl: '', ); diff --git a/lib/widgets/elements/Form/Switch/Switch/demo.dart b/lib/widgets/elements/Form/Switch/Switch/demo.dart index 283b6f33..ad4b88bf 100644 --- a/lib/widgets/elements/Form/Switch/Switch/demo.dart +++ b/lib/widgets/elements/Form/Switch/Switch/demo.dart @@ -18,7 +18,7 @@ class SwitchDemo extends StatefulWidget { class _Demo extends State { bool check = false; Widget build(BuildContext context) { - return new Switch( + return Switch( value: this.check, onChanged: (bool val) { this.setState(() { @@ -36,7 +36,7 @@ class SwitchHighDemo extends StatefulWidget { class _SwitchHighDemo extends State { bool check = false; Widget build(BuildContext context) { - return new Switch.adaptive( + return Switch.adaptive( value: this.check, activeColor: Colors.blue, // 激活时原点颜色 onChanged: (bool val) { @@ -56,7 +56,7 @@ class SwitchTypesDemo extends StatefulWidget { class _SwitchTypesDemo extends State { bool check = false; Widget build(BuildContext context) { - return new Switch( + return Switch( value: this.check, activeTrackColor:Colors.green, inactiveThumbColor: Colors.black, diff --git a/lib/widgets/elements/Form/Switch/Switch/index.dart b/lib/widgets/elements/Form/Switch/Switch/index.dart index ce55a73a..9a80c96c 100644 --- a/lib/widgets/elements/Form/Switch/Switch/index.dart +++ b/lib/widgets/elements/Form/Switch/Switch/index.dart @@ -19,7 +19,7 @@ const contentA = ''' ### **基本用法** ``` -new Switch( + Switch( value: isChecked, activeColor: Colors.blue, // 激活时原点颜色 onChanged: (bool val) { diff --git a/lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart b/lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart index a80109b7..a0dde440 100644 --- a/lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart +++ b/lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart @@ -18,7 +18,7 @@ class SwitchListTileDemo extends StatefulWidget { class _Demo extends State { bool _lights = false; Widget build(BuildContext context) { - return new SwitchListTile( + return SwitchListTile( title: const Text('Lights'), value: _lights, onChanged: (bool value) { setState(() { _lights = value; }); }, diff --git a/lib/widgets/elements/Form/Text/RichText/index.dart b/lib/widgets/elements/Form/Text/RichText/index.dart index a010620b..51b38f70 100644 --- a/lib/widgets/elements/Form/Text/RichText/index.dart +++ b/lib/widgets/elements/Form/Text/RichText/index.dart @@ -67,7 +67,7 @@ class _Demo extends State { title: 'Rich Text', docUrl: 'https://docs.flutter.io/flutter/widgets/RichText-class.html', codeUrl: '', - contentList: [new Column( + contentList: [ Column( children: [ MarkdownBody(data: markDesc['intro']), RichTextDemo(), diff --git a/lib/widgets/elements/Form/Text/Text/index.dart b/lib/widgets/elements/Form/Text/Text/index.dart index d3523fc0..43ff8d0b 100644 --- a/lib/widgets/elements/Form/Text/Text/index.dart +++ b/lib/widgets/elements/Form/Text/Text/index.dart @@ -79,7 +79,7 @@ class _Demo extends State { title: "Text", docUrl: 'flutter/widgets/Text-class.html', codeUrl: 'elements/Form/Text/Text/index.dart', - contentList: [new Column( + contentList: [ Column( children: [ MarkdownBody(markDesc['intro']), Text( diff --git a/lib/widgets/elements/Frame/Align/Align/demo.dart b/lib/widgets/elements/Frame/Align/Align/demo.dart index 288c1003..775df13e 100644 --- a/lib/widgets/elements/Frame/Align/Align/demo.dart +++ b/lib/widgets/elements/Frame/Align/Align/demo.dart @@ -18,13 +18,13 @@ class AlignAlignment extends StatelessWidget { @override Widget build(BuildContext context) { - return new Container( + return Container( color: Color(0xffd81b60), width: 90.0, height: 50.0, - child: new Align( + child: Align( alignment: status, - child: new Text( + child: Text( dec, style: TextStyle(fontSize: 12.0, color: Color(0xffffffff)), ), @@ -45,10 +45,10 @@ class AlignFactor extends StatelessWidget { @override Widget build(BuildContext context) { - return new Container( - margin: new EdgeInsets.only(top: 10.0, bottom: 10.0), + return Container( + margin: EdgeInsets.only(top: 10.0, bottom: 10.0), color: Color(0xffd81b60), - child: new Align( + child: Align( alignment: status, widthFactor: wFactor, heightFactor: hFactor, diff --git a/lib/widgets/elements/Frame/Align/Align/index.dart b/lib/widgets/elements/Frame/Align/Align/index.dart index 46432a8f..e28149a9 100644 --- a/lib/widgets/elements/Frame/Align/Align/index.dart +++ b/lib/widgets/elements/Frame/Align/Align/index.dart @@ -40,10 +40,10 @@ class _DemoState extends State { } Column _alignCreate() { - return new Column( + return Column( children: [ SizedBox(height: 10.0), - new Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ AlignAlignment(Alignment.center, 'center'), @@ -51,7 +51,7 @@ class _DemoState extends State { ], ), SizedBox(height: 10.0), - new Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ AlignAlignment(Alignment.centerRight, 'centerRight'), @@ -60,7 +60,7 @@ class _DemoState extends State { ], ), SizedBox(height: 10.0), - new Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ AlignAlignment(Alignment.topLeft, 'topLeft'), @@ -71,11 +71,11 @@ class _DemoState extends State { SizedBox(height: 10.0), MarkdownBody(data: _flatText1), Container( - margin: new EdgeInsets.only(top: 20.0, bottom: 20.0), + margin: EdgeInsets.only(top: 20.0, bottom: 20.0), color: Color(0xffe91e63), - child: new Align( + child: Align( alignment: Alignment.topLeft, - child: new Text( + child: Text( "Align", style: TextStyle(color: Color(0xffffffff)), ), diff --git a/lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart b/lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart index 90995e77..73d298eb 100644 --- a/lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart +++ b/lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart @@ -29,12 +29,12 @@ class ConstrainedBoxCreate extends StatelessWidget { maxWidth: 300.0, maxHeight: 50.0, ), - child: new Container( + child: Container( margin: const EdgeInsets.only(left: 20.0, right: 20.0), //child 宽高超过制定限制范围失效,效果宽/高=100/20区域 width: currWidth, height: 250.0, - child: new Text( + child: Text( describe, style: TextStyle(color: Colors.white), ), diff --git a/lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart b/lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart index 8539ead3..da157373 100644 --- a/lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart +++ b/lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart @@ -21,7 +21,7 @@ class DecoratedBoxCreate extends StatelessWidget { decoration: BoxDecoration( color: const Color(0xff7c94b6), //设置图片内容 - image: new DecorationImage( + image: DecorationImage( fit: BoxFit.cover, image: ExactAssetImage('assets/images/food01.jpeg')), //外宽边框,可以不设置 @@ -46,7 +46,7 @@ class DecoratedBoxCreateTwo extends StatelessWidget { decoration: BoxDecoration( color: const Color(0xff7c94b6), //设置图片内容 - image: new DecorationImage( + image: DecorationImage( fit: BoxFit.cover, image: ExactAssetImage('assets/images/food01.jpeg')), //根据传入的不同大小,呈现图片效弧度不同, @@ -67,7 +67,7 @@ class DecoratedBoxCreateShape extends StatelessWidget { position: DecorationPosition.background, decoration: BoxDecoration( color: const Color(0xff7c94b6), - image: new DecorationImage( + image: DecorationImage( fit: BoxFit.cover, image: ExactAssetImage('assets/images/food01.jpeg')), border: Border.all( diff --git a/lib/widgets/elements/Frame/Box/DecoratedBox/index.dart b/lib/widgets/elements/Frame/Box/DecoratedBox/index.dart index 79f4073d..0432f432 100644 --- a/lib/widgets/elements/Frame/Box/DecoratedBox/index.dart +++ b/lib/widgets/elements/Frame/Box/DecoratedBox/index.dart @@ -45,7 +45,7 @@ class _DemoState extends State { } Column _decoratedBoxCreate() { - return new Column( + return Column( children: [ Container( height: 100.0, diff --git a/lib/widgets/elements/Frame/Box/Fittedbox/demo.dart b/lib/widgets/elements/Frame/Box/Fittedbox/demo.dart index 108ad98d..b137ae97 100644 --- a/lib/widgets/elements/Frame/Box/Fittedbox/demo.dart +++ b/lib/widgets/elements/Frame/Box/Fittedbox/demo.dart @@ -15,11 +15,11 @@ class FittedBoxDefault extends StatelessWidget { final BoxFit curfit; final String dec; - FittedBoxDefault({Key key, this.curfit, this.dec}); + FittedBoxDefault({Key key, this.curfit, this.dec}); @override Widget build(BuildContext context) { - return new Column( + return Column( children: [ Container( //外部有位置约束,内部大小设定失效,保持和外部约束一致 diff --git a/lib/widgets/elements/Frame/Box/Fittedbox/index.dart b/lib/widgets/elements/Frame/Box/Fittedbox/index.dart index ef624730..e707f34d 100644 --- a/lib/widgets/elements/Frame/Box/Fittedbox/index.dart +++ b/lib/widgets/elements/Frame/Box/Fittedbox/index.dart @@ -1,4 +1,3 @@ - /** * Author: xiaojia.dxj * Date: 2019-01-08 @@ -9,7 +8,7 @@ */ import 'package:flutter/material.dart'; import 'package:flutter_go/components/widget_demo.dart'; -import './demo.dart' as fittedBox; +import './demo.dart'; const String Text0 = """ ### **FittedBox** @@ -53,18 +52,16 @@ class _DemoState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - fittedBox.FittedBoxDefault( - /** - * 设置child写入布局期间分配空间 - */ + FittedBoxDefault( + //设置child写入布局期间分配空间 curfit: BoxFit.contain, dec: 'contain', ), - fittedBox.FittedBoxDefault( + FittedBoxDefault( curfit: BoxFit.fill, dec: 'fill', ), - fittedBox.FittedBoxDefault( + FittedBoxDefault( curfit: BoxFit.cover, dec: 'cover', ), @@ -76,11 +73,11 @@ class _DemoState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - fittedBox.FittedBoxDefault( + FittedBoxDefault( curfit: BoxFit.fitHeight, dec: 'fitHeight', ), - fittedBox.FittedBoxDefault( + FittedBoxDefault( curfit: BoxFit.fitWidth, dec: 'fitWidth', ), @@ -92,11 +89,11 @@ class _DemoState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - fittedBox.FittedBoxDefault( + FittedBoxDefault( curfit: BoxFit.none, dec: 'none', ), - fittedBox.FittedBoxDefault( + FittedBoxDefault( curfit: BoxFit.scaleDown, dec: 'scaleDown', ), diff --git a/lib/widgets/elements/Frame/Box/OverflowBox/demo.dart b/lib/widgets/elements/Frame/Box/OverflowBox/demo.dart index f7357a02..30127141 100644 --- a/lib/widgets/elements/Frame/Box/OverflowBox/demo.dart +++ b/lib/widgets/elements/Frame/Box/OverflowBox/demo.dart @@ -10,11 +10,11 @@ class OverflowBoxDefault extends StatelessWidget { OverflowBoxDefault( {Key key, - this.curmaxHeight, - this.curmaxWidth, - this.curWidth, - this.curHeight, - this.curalignment}) + this.curmaxHeight, + this.curmaxWidth, + this.curWidth, + this.curHeight, + this.curalignment}) : super(key: key); @override @@ -25,18 +25,18 @@ class OverflowBoxDefault extends StatelessWidget { //设置最大宽,高 maxWidth: curmaxWidth, maxHeight: curmaxHeight, - /** - * 调整child位置 - */ + + //调整child位置 alignment: curalignment, child: Container( - /** - * widget宽高大于overflowBox设置的最大,以overflowbox设置的最大宽高为限制, - * 小于overflowBox 设置的最大限度,子widget能够完全显示 - * * */ + //widget宽高大于overflowBox设置的最大,以overflowbox设置的最大宽高为限制, + //小于overflowBox 设置的最大限度,子widget能够完全显示 height: curHeight, width: curWidth, - child: Text("$curmaxWidth * $curmaxHeight",style: TextStyle(color: Colors.white),), + child: Text( + "$curmaxWidth * $curmaxHeight", + style: TextStyle(color: Colors.white), + ), color: Color(0xfff48fb1), ), ); diff --git a/lib/widgets/elements/Frame/Box/OverflowBox/index.dart b/lib/widgets/elements/Frame/Box/OverflowBox/index.dart index a67669a8..d7aa8502 100644 --- a/lib/widgets/elements/Frame/Box/OverflowBox/index.dart +++ b/lib/widgets/elements/Frame/Box/OverflowBox/index.dart @@ -76,7 +76,10 @@ class _DemoState extends State { ), ), SizedBox(height: 20), - SizedBox(height: 50,child: Text("宽高都大于最大限制"),), + SizedBox( + height: 50, + child: Text("宽高都大于最大限制"), + ), Container( width: 100.0, height: 100.0, @@ -90,7 +93,6 @@ class _DemoState extends State { curalignment: Alignment.center, ), ), - ], ); } diff --git a/lib/widgets/elements/Frame/Box/RenderBox/demo.dart b/lib/widgets/elements/Frame/Box/RenderBox/demo.dart deleted file mode 100644 index 9c1a7565..00000000 --- a/lib/widgets/elements/Frame/Box/RenderBox/demo.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -class RenderBoxDemo extends StatefulWidget { - _RenderBoxDemoState createState() => _RenderBoxDemoState(); -} - -class _RenderBoxDemoState extends State { - @override - Widget build(BuildContext context) { - return Container( - // child: RenderFoo(), - ); - } -} - -class RenderFoo extends RenderBox { - @override - bool get hasSize => super.hasSize; - - @override - BoxConstraints get constraints => super.constraints; -} diff --git a/lib/widgets/elements/Frame/Box/RenderBox/index.dart b/lib/widgets/elements/Frame/Box/RenderBox/index.dart deleted file mode 100644 index d0f3d6a2..00000000 --- a/lib/widgets/elements/Frame/Box/RenderBox/index.dart +++ /dev/null @@ -1,62 +0,0 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:56:26 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:56:26 - */ -import 'package:flutter/material.dart'; -import 'package:flutter_go/components/widget_demo.dart'; - -const String _Text = ''' -### **简介** -> BoxConstraints为抽象类,我们可以使用BoxConstraints,一个不可边的约束布局,renderBox布局 -- 一个尺寸尊重一个BoxConstraints,当且仅当,以下关系式的成立: -minWidth <= Size.width <= maxWidth -minHeight <= Size.height <= maxHeight -约束本身必须满足这些关系: - -0.0 <= minWidth <= maxWidth <= double.infinity -0.0 <= minHeight <= maxHeight <= double.infinity -double.infinity是每个约束的合法值。 -'''; - -class Demo extends StatefulWidget { - static const String routeName = '/element/Frame/Box/RenderBox'; - - _DemoState createState() => _DemoState(); -} - -class _DemoState extends State { - @override - Widget build(BuildContext context) { - return WidgetDemo( - title: 'Table', - codeUrl: 'elements/Frame/Box/RenderBox/demo.dart', - contentList: [ - _Text, - _sizeBoxCreate(), - ], - docUrl: 'https://docs.flutter.io/flutter/widgets/RenderBox-class.html', - ); - } - - Column _sizeBoxCreate() { - return new Column( - children: [ - /** - * Immutable layout constraints for RenderBox layout. - */ - SizedBox( - width: 900.0, - height: 50.0, - child: const Card( - child: Text( - 'SizedBox', - textAlign: TextAlign.center, - ), - color: Color(0xFFEF5350)), - ), - ], - ); - } -} diff --git a/lib/widgets/elements/Frame/Box/SizeBox/index.dart b/lib/widgets/elements/Frame/Box/SizeBox/index.dart index e3f05461..2e5b1382 100644 --- a/lib/widgets/elements/Frame/Box/SizeBox/index.dart +++ b/lib/widgets/elements/Frame/Box/SizeBox/index.dart @@ -28,15 +28,15 @@ class _DemoState extends State { } Column _sizeBoxCreate() { - return new Column( + return Column( children: [ - new Text("SizedBox", + Text("SizedBox", textAlign: TextAlign.right, style: TextStyle( fontSize: 28.0, fontWeight: FontWeight.bold, )), - new Row( + Row( children: [ sizeBox.SizeBoxDefault(), SizedBox( diff --git a/lib/widgets/elements/Frame/Box/SizedOverflowBox/demo.dart b/lib/widgets/elements/Frame/Box/SizedOverflowBox/demo.dart index 034f9bc4..f69a3c0d 100644 --- a/lib/widgets/elements/Frame/Box/SizedOverflowBox/demo.dart +++ b/lib/widgets/elements/Frame/Box/SizedOverflowBox/demo.dart @@ -7,10 +7,7 @@ class SizeOverflowBoxDefault extends StatelessWidget { final String text; SizeOverflowBoxDefault( - {Key key, - this.curSizeWidth, - this.curSizeHeight, - this.text}) + {Key key, this.curSizeWidth, this.curSizeHeight, this.text}) : super(key: key); @override @@ -23,7 +20,7 @@ class SizeOverflowBoxDefault extends StatelessWidget { color: Color(0xfff06292), width: 50.0, height: 50.0, - child: new Text( + child: Text( text, style: TextStyle(color: Colors.white), ), @@ -36,8 +33,7 @@ class SizeBoxDefault extends StatelessWidget { final double curWidth; final double curHeight; - SizeBoxDefault({Key key, this.curHeight, this.curWidth}) - : super(key: key); + SizeBoxDefault({Key key, this.curHeight, this.curWidth}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/widgets/elements/Frame/Box/SizedOverflowBox/index.dart b/lib/widgets/elements/Frame/Box/SizedOverflowBox/index.dart index 961981d4..78fbba7a 100644 --- a/lib/widgets/elements/Frame/Box/SizedOverflowBox/index.dart +++ b/lib/widgets/elements/Frame/Box/SizedOverflowBox/index.dart @@ -6,7 +6,7 @@ */ import 'package:flutter/material.dart'; import 'package:flutter_go/components/widget_demo.dart'; -import './demo.dart' as sizeBox; +import './demo.dart'; // const String _Text = """### **SizeBox简介** // > 常用的一个控件,设置具体尺寸。 @@ -53,47 +53,47 @@ class _DemoState extends State { } Column _sizedOverflowBoxCreate() { - return new Column( + return Column( children: [ - sizeBox.SizeBoxDefault( + SizeBoxDefault( curWidth: 200.0, curHeight: 50.0, ), SizedBox(height: 20.0), Container( - margin: new EdgeInsets.only(top: 10.0), + margin: EdgeInsets.only(top: 10.0), color: Color(0xffd81b60), width: 200.0, height: 50.0, ), Container( - margin: new EdgeInsets.only(top: 10.0), + margin: EdgeInsets.only(top: 10.0), color: Color(0xffd81b60), alignment: Alignment.topCenter, width: 200.0, height: 50.0, - child: sizeBox.SizeOverflowBoxDefault( + child: SizeOverflowBoxDefault( text: "SizeBox", ), ), Container( - margin: new EdgeInsets.only(top: 10.0), + margin: EdgeInsets.only(top: 10.0), color: Color(0xffd81b60), width: 200.0, height: 50.0, - child: sizeBox.SizeOverflowBoxDefault( + child: SizeOverflowBoxDefault( text: "box", curSizeWidth: 100.0, curSizeHeight: 20.0, ), ), Container( - margin: new EdgeInsets.only(top: 10.0), + margin: EdgeInsets.only(top: 10.0), color: Color(0xffd81b60), width: 200.0, height: 50.0, alignment: Alignment.center, - child: sizeBox.SizeOverflowBoxDefault( + child: SizeOverflowBoxDefault( text: "box", curSizeWidth: 100.0, curSizeHeight: 20.0, diff --git a/lib/widgets/elements/Frame/Box/TextBox/demo.dart b/lib/widgets/elements/Frame/Box/TextBox/demo.dart deleted file mode 100644 index 8b137891..00000000 --- a/lib/widgets/elements/Frame/Box/TextBox/demo.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lib/widgets/elements/Frame/Box/TextBox/index.dart b/lib/widgets/elements/Frame/Box/TextBox/index.dart deleted file mode 100644 index f47298ee..00000000 --- a/lib/widgets/elements/Frame/Box/TextBox/index.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_go/components/widget_demo.dart'; - -const String _Text = """### **TextBox简介** -> 是一个包含一段文本的矩形 -- 它与rect类似,不过包含一个固定的TextDirection。 -- sizebox的width,heigh为null,child自身设置 -### **属性** -> width:宽 -> height:高 -- ex:200*50 sizebox -"""; - -class Demo extends StatefulWidget { - static const String routeName = '/element/Frame/Box/TextBox'; - - _DemoState createState() => _DemoState(); -} - -class _DemoState extends State { - @override - Widget build(BuildContext context) { - return WidgetDemo( - title: 'TextBox', - codeUrl: 'elements/Frame/Box/TextBox/demo.dart', - contentList: [ - _Text, - _creatTexbox(), - ], - docUrl: 'https://docs.flutter.io/flutter/dart-ui/TextBox-class.html', - ); - } -} - -Column _creatTexbox() { - return Column( - children: [ - // Text("TextBox ",textDirection: new TextBox.fo,), - Container( - // child: TextBox.fromLTRB(270.0, 180.0, 1360.0, 730.0,TextDirection.rtl), - - ) - -// centerSlice: new Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0), - - - ], - ); -} diff --git a/lib/widgets/elements/Frame/Box/UnconstrainedBox/demo.dart b/lib/widgets/elements/Frame/Box/UnconstrainedBox/demo.dart index 9f171c45..0a62c64f 100644 --- a/lib/widgets/elements/Frame/Box/UnconstrainedBox/demo.dart +++ b/lib/widgets/elements/Frame/Box/UnconstrainedBox/demo.dart @@ -6,7 +6,7 @@ class UnconstrainedBoxDemo extends StatelessWidget { return UnconstrainedBox( constrainedAxis: Axis.vertical, textDirection: TextDirection.rtl, - child: new Row( + child: Row( children: [ Container( width: 100.0, diff --git a/lib/widgets/elements/Frame/Box/index.dart b/lib/widgets/elements/Frame/Box/index.dart index 0e61d53c..48399ea2 100644 --- a/lib/widgets/elements/Frame/Box/index.dart +++ b/lib/widgets/elements/Frame/Box/index.dart @@ -5,7 +5,6 @@ import 'ConstrainedBox/index.dart' as ConstrainedBox; import 'DecoratedBox/index.dart' as DecoratedBox; import 'SizeBox/index.dart' as SizeBox; import 'SizedOverflowBox/index.dart' as SizedOverflowBox; -import 'TextBox/index.dart' as TextBox; import 'UnconstrainedBox/index.dart' as UnconstrainedBox; import 'OverflowBox/index.dart' as OverflowBox; import 'FittedBox/index.dart' as FittedBox; @@ -33,11 +32,6 @@ List widgetPoints = [ routerName: SizedOverflowBox.Demo.routeName, buildRouter: (BuildContext context) => SizedOverflowBox.Demo(), ), - WidgetPoint( - name: 'TextBox', - routerName: TextBox.Demo.routeName, - buildRouter: (BuildContext context) => TextBox.Demo(), - ), WidgetPoint( name: 'UnconstrainedBox', routerName: UnconstrainedBox.Demo.routeName, diff --git a/lib/widgets/elements/Frame/Expanded/Expanded/expanded_demo.dart b/lib/widgets/elements/Frame/Expanded/Expanded/expanded_demo.dart index 398e5333..5c1fdbeb 100644 --- a/lib/widgets/elements/Frame/Expanded/Expanded/expanded_demo.dart +++ b/lib/widgets/elements/Frame/Expanded/Expanded/expanded_demo.dart @@ -14,57 +14,57 @@ class ExpandedDemo extends StatelessWidget { return Column( children: [ Text('Expanded'), - new Row(children: [ - new RaisedButton( + Row(children: [ + RaisedButton( onPressed: () { print('点击红色按钮事件'); }, color: const Color(0xffcc0000), - child: new Text('红色按钮',style: txtColor,), + child: Text('红色按钮',style: txtColor,), ), - new Expanded( + Expanded( flex: 1,//flex用来设置当前可用空间的占优比 - child: new RaisedButton( + child: RaisedButton( onPressed: () { print('点击黄色按钮事件'); }, color: const Color(0xfff1c232), - child: new Text('黄色按钮',style: txtColor,), + child: Text('黄色按钮',style: txtColor,), ), ), - new RaisedButton( + RaisedButton( onPressed: () { print('点击粉色按钮事件'); }, color: const Color(0xffea9999), - child: new Text('粉色按钮',style: txtColor,), + child: Text('粉色按钮',style: txtColor,), ), ]), Text('Flexible'), - new Row(children: [ - new RaisedButton( + Row(children: [ + RaisedButton( onPressed: () { print('点击红色按钮事件'); }, color: const Color(0xffcc0000), - child: new Text('红色按钮',style: txtColor,), + child: Text('红色按钮',style: txtColor,), ), - new Flexible( + Flexible( flex: 1, - child: new RaisedButton( + child: RaisedButton( onPressed: () { print('点击黄色按钮事件'); }, color: const Color(0xfff1c232), - child: new Text('黄色按钮',style: txtColor,), + child: Text('黄色按钮',style: txtColor,), ), ), - new RaisedButton( + RaisedButton( onPressed: () { print('点击粉色按钮事件'); }, color: const Color(0xffea9999), - child: new Text('粉色按钮',style: txtColor,), + child: Text('粉色按钮',style: txtColor,), ), ]), ], diff --git a/lib/widgets/elements/Frame/Layout/Column/demo.dart b/lib/widgets/elements/Frame/Layout/Column/demo.dart index e94c8a78..c61234cf 100644 --- a/lib/widgets/elements/Frame/Layout/Column/demo.dart +++ b/lib/widgets/elements/Frame/Layout/Column/demo.dart @@ -13,33 +13,31 @@ class ColumnDefault extends StatelessWidget { @override Widget build(BuildContext context) { return Column( - /** - * - MainAxisAlignment.spaceEvenly/spaceAround/spaceBetween, - - spaceEvenly:将主轴方向空白区域均分,使得children之间空间相等,包括首尾childre - - spaceAround:将主轴方向空白区域均分,使得children之间空间相等,但是首尾childre的空白部分为一半 - - spaceBetween:将主轴方向空白区域均分,使得children之间空间相等,但是首尾childre靠近收尾,没有空细逢 + /// - MainAxisAlignment.spaceEvenly/spaceAround/spaceBetween, + /// - spaceEvenly:将主轴方向空白区域均分,使得children之间空间相等,包括首尾childre + /// - spaceAround:将主轴方向空白区域均分,使得children之间空间相等,但是首尾childre的空白部分为一半 + /// - spaceBetween:将主轴方向空白区域均分,使得children之间空间相等,但是首尾childre靠近收尾,没有空细逢 + + /// - MainAxisAlignment.start/end/center, + /// - start:将children放置在主轴起点方向 + /// - end:将children放置在主轴末尾方向 + /// - center:将children放置在主轴中间方向 - - MainAxisAlignment.start/end/center, - - start:将children放置在主轴起点方向 - - end:将children放置在主轴末尾方向 - - center:将children放置在主轴中间方向 - */ mainAxisAlignment: MainAxisAlignment.center, - /** - * > mainAxisSize 属性 - - 一行的高度是有mainAxisSize属性控制,默认是max - - mainAxisSize: MainAxisSize.min,一行的宽度是child传入的约束 - - mainAxisSize: MainAxisSize.max,一行的宽度的最大宽度是传入的约束。 - > mainAxisAlignment属性 - */ - mainAxisSize: MainAxisSize.max, - /** - * - crossAxisAlignment: CrossAxisAlignment.center/end/start, - - 即,根据设定的位置交叉对齐 - - center/end/start: children在交叉轴上居中/末端/起点 对齐展示 - - stretch:让children填满交叉轴方向 - - baseline:在交叉轴方向,使得于这个baseline对齐,如果主轴是垂直的,那么这个值是当作开始 - */ + + /// > mainAxisSize 属性 + /// - 一行的高度是有mainAxisSize属性控制,默认是max + /// - mainAxisSize: MainAxisSize.min,一行的宽度是child传入的约束 + /// - mainAxisSize: MainAxisSize.max,一行的宽度的最大宽度是传入的约束。 + /// > mainAxisAlignment属性 + + /// mainAxisSize: MainAxisSize.max, + ///- crossAxisAlignment: CrossAxisAlignment.center/end/start, + /// - 即,根据设定的位置交叉对齐 + /// - center/end/start: children在交叉轴上居中/末端/起点 对齐展示 + /// - stretch:让children填满交叉轴方向 + /// - baseline:在交叉轴方向,使得于这个baseline对齐,如果主轴是垂直的,那么这个值是当作开始 + children: [ Container( color: Color(0xfffce4ec), diff --git a/lib/widgets/elements/Frame/Layout/Row/demo.dart b/lib/widgets/elements/Frame/Layout/Row/demo.dart index 8beb078c..489f491b 100644 --- a/lib/widgets/elements/Frame/Layout/Row/demo.dart +++ b/lib/widgets/elements/Frame/Layout/Row/demo.dart @@ -10,27 +10,24 @@ import 'package:flutter/widgets.dart'; * Describle:Row */ class RowMainAxisAlignment extends StatelessWidget { - /* - * > mainAxisAlignment属性 - * - MainAxisAlignment.spaceEvenly/spaceAround/spaceBetween, - - spaceEvenly:将主轴方向空白区域均分,使得children之间空间相等,包括首尾childre - - spaceAround:将主轴方向空白区域均分,使得children之间空间相等,但是首尾childre的空白部分为一半 - - spaceBetween:将主轴方向空白区域均分,使得children之间空间相等,但是首尾childre靠近收尾,没有空细逢 - * - MainAxisAlignment.start/end/center, - - start:将children放置在主轴起点方向 - - end:将children放置在主轴末尾方向 - - center:将children放置在主轴中间方向 - */ + ///> mainAxisAlignment属性 + /// - MainAxisAlignment.spaceEvenly/spaceAround/spaceBetween, + /// - spaceEvenly:将主轴方向空白区域均分,使得children之间空间相等,包括首尾childre + /// - spaceAround:将主轴方向空白区域均分,使得children之间空间相等,但是首尾childre的空白部分为一半 + /// - spaceBetween:将主轴方向空白区域均分,使得children之间空间相等,但是首尾childre靠近收尾,没有空细逢 + /// - MainAxisAlignment.start/end/center, + /// - start:将children放置在主轴起点方向 + /// - end:将children放置在主轴末尾方向 + /// - center:将children放置在主轴中间方向 + final MainAxisAlignment status; - /* - * > CrossAxisAlignment 属性 - - crossAxisAlignment: CrossAxisAlignment.center/end/start, - - 即,根据设定的位置交叉对齐 - - center/end/start: children在交叉轴上居中/末端/起点 对齐展示 - - stretch:让children填满交叉轴方向 - - baseline:在交叉轴方向,使得于这个baseline对齐,如果主轴是垂直的,那么这个值是当作开始 - */ + /// > CrossAxisAlignment 属性 + /// - crossAxisAlignment: CrossAxisAlignment.center/end/start, + /// - 即,根据设定的位置交叉对齐 + /// - center/end/start: children在交叉轴上居中/末端/起点 对齐展示 + /// - stretch:让children填满交叉轴方向 + /// - baseline:在交叉轴方向,使得于这个baseline对齐,如果主轴是垂直的,那么这个值是当作开始 final CrossAxisAlignment crossStatus; @@ -38,7 +35,7 @@ class RowMainAxisAlignment extends StatelessWidget { @override Widget build(BuildContext context) { - return new Row( + return Row( mainAxisAlignment: status, children: [ Container( @@ -66,29 +63,29 @@ class RowLayoutCreate extends StatelessWidget { @override Widget build(BuildContext context) { - return new Row( + return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( - margin: new EdgeInsets.only(top: 20.0, bottom: 20.0), + margin: EdgeInsets.only(top: 20.0, bottom: 20.0), color: Color(0xfffce4ec), width: 60.0, height: 50.0, ), Container( - margin: new EdgeInsets.only(top: 20.0, bottom: 20.0), + margin: EdgeInsets.only(top: 20.0, bottom: 20.0), color: Color(0xfff8bbd0), width: 60.0, height: 50.0, ), Container( - margin: new EdgeInsets.only(top: 20.0, bottom: 20.0), + margin: EdgeInsets.only(top: 20.0, bottom: 20.0), color: Color(0xfff48fb1), width: 60.0, height: 50.0, ), Container( - margin: new EdgeInsets.only(top: 20.0, bottom: 20.0), + margin: EdgeInsets.only(top: 20.0, bottom: 20.0), color: Color(0xfff06292), width: 60.0, height: 50.0, diff --git a/lib/widgets/elements/Frame/Layout/Row/index.dart b/lib/widgets/elements/Frame/Layout/Row/index.dart index a93001df..10b64b27 100644 --- a/lib/widgets/elements/Frame/Layout/Row/index.dart +++ b/lib/widgets/elements/Frame/Layout/Row/index.dart @@ -49,7 +49,7 @@ class _DemoState extends State { } Column _rowCreate() { - return new Column( + return Column( children: [ RowLayoutCreate(), Row( diff --git a/lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart b/lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart index 27bd4a9f..07920611 100644 --- a/lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart +++ b/lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart @@ -49,12 +49,12 @@ class SliverPaddingDemo extends StatelessWidget { @override Widget build(BuildContext context) { - return new CustomScrollView( + return CustomScrollView( shrinkWrap: true, slivers: [ - new SliverPadding( + SliverPadding( padding: const EdgeInsets.fromLTRB(50.0,10.0,20.0,0.0), - sliver: new SliverList( + sliver: SliverList( delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return _buildItem(context, products[index]); diff --git a/lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart b/lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart index bcf289cc..b2ac819c 100644 --- a/lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart +++ b/lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart @@ -12,7 +12,7 @@ import 'package:flutter/material.dart'; class StackDefault extends StatelessWidget { final int currIndex; - const StackDefault( this.currIndex) : super(); + const StackDefault(this.currIndex) : super(); @override Widget build(BuildContext context) { @@ -23,14 +23,14 @@ class StackDefault extends StatelessWidget { // backgroundImage: AssetImage('images/timg.jpeg'), // radius: 100.0, // ), -// new Image.asset( +// Image.asset( // 'images/timg.jpeg', // width: 600.0, // height: 240.0, // fit: BoxFit.cover, // ), CircleAvatar( - backgroundColor: new Color(0xfff48fb1), + backgroundColor: Color(0xfff48fb1), radius: 40.0, ), Container( @@ -54,34 +54,34 @@ class StackDefault extends StatelessWidget { class StackIndex extends StatelessWidget { final int currIndex; - const StackIndex( this.currIndex) : super(); + const StackIndex(this.currIndex) : super(); @override Widget build(BuildContext context) { return IndexedStack( index: currIndex, children: [ - new Icon( + Icon( Icons.update, size: 40.0, color: Color(0xffe91e63), ), - new Icon( + Icon( Icons.access_alarm, size: 40.0, color: Color(0xffe91e63), ), - new Icon( + Icon( Icons.add_alarm, size: 40.0, color: Color(0xffe91e63), ), - new Icon( + Icon( Icons.access_time, size: 40.0, color: Color(0xffe91e63), ), - new Icon( + Icon( Icons.alarm_off, size: 40.0, color: Color(0xffe91e63), diff --git a/lib/widgets/elements/Frame/Stack/IndexedStack/index.dart b/lib/widgets/elements/Frame/Stack/IndexedStack/index.dart index a0103001..da1d3aec 100644 --- a/lib/widgets/elements/Frame/Stack/IndexedStack/index.dart +++ b/lib/widgets/elements/Frame/Stack/IndexedStack/index.dart @@ -38,8 +38,7 @@ class _DemoState extends State { return WidgetDemo( title: 'IndexedStack', // desc: _desc, - codeUrl: - 'elements/Frame/Stack/IndexedStack/demo.dart', + codeUrl: 'elements/Frame/Stack/IndexedStack/demo.dart', docUrl: 'https://docs.flutter.io/flutter/widgets/IndexedStack-class.html', contentList: [ _stackText0, @@ -50,20 +49,20 @@ class _DemoState extends State { } Column _indexedStackCreate() { - return new Column( + return Column( children: [ SizedBox( height: 10.0, ), - new Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Container( - color: new Color(0xffe91e63), + color: Color(0xffe91e63), child: StackDefault(0), ), Container( - color: new Color(0xffe91e63), + color: Color(0xffe91e63), child: StackDefault(1), ) ], @@ -71,7 +70,7 @@ class _DemoState extends State { SizedBox( height: 10.0, ), - new Row( + Row( mainAxisAlignment: MainAxisAlignment.center, children: [ StackIndex(0), @@ -91,7 +90,7 @@ class _DemoState extends State { onPressed: () { _indexAdd(); }, - icon: new Icon(Icons.adb), + icon: Icon(Icons.adb), label: Text("点击这里")), StackIndex(currIndex) ], diff --git a/lib/widgets/elements/Frame/Stack/Stack/demo.dart b/lib/widgets/elements/Frame/Stack/Stack/demo.dart index 4af0df05..43c2404d 100644 --- a/lib/widgets/elements/Frame/Stack/Stack/demo.dart +++ b/lib/widgets/elements/Frame/Stack/Stack/demo.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; * LastUpdateTime: 2018/11/22 * LastUpdateBy: xj.deng * - * Describle:Align描述 + * Describle:stack描述 */ class StackDefault extends StatelessWidget { const StackDefault() : super(); @@ -16,19 +16,19 @@ class StackDefault extends StatelessWidget { Widget build(BuildContext context) { return Column( children: [ - new Stack( + Stack( //fit :定义如何设置non-positioned节点尺寸 fit: StackFit.loose, overflow: Overflow.clip, textDirection: TextDirection.ltr, alignment: Alignment.center, children: [ - new Container( - color: new Color(0xfff48fb1), + Container( + color: Color(0xfff48fb1), width: 100.0, height: 50.0, ), - new Text("stack demo", + Text("stack demo", textDirection: TextDirection.ltr, style: TextStyle( fontSize: 20.0, @@ -49,22 +49,22 @@ class StackDefault2 extends StatelessWidget { Widget build(BuildContext context) { return Column( children: [ - new Stack( + Stack( //fit :定义如何设置non-positioned节点尺寸 fit: StackFit.loose, overflow: Overflow.clip, textDirection: TextDirection.ltr, alignment: Alignment.center, children: [ - new Text("stack demo", + Text("stack demo", textDirection: TextDirection.ltr, style: TextStyle( fontSize: 20.0, fontWeight: FontWeight.bold, letterSpacing: 5.0, color: Colors.white)), - new Container( - color: new Color(0xfff48fb1), + Container( + color: Color(0xfff48fb1), width: 100.0, height: 50.0, ), @@ -80,32 +80,32 @@ class StackPositioned extends StatelessWidget { @override Widget build(BuildContext context) { - return new Stack( + return Stack( alignment: Alignment.center, children: [ - new Positioned( - child: new Icon( + Positioned( + child: Icon( Icons.monetization_on, size: 40.0, color: Colors.yellow[300], )), - new Positioned( + Positioned( left: 40.0, - child: new Icon( + child: Icon( Icons.monetization_on, size: 40.0, color: Colors.yellow[600], )), - new Positioned( + Positioned( left: 60.0, - child: new Icon( + child: Icon( Icons.monetization_on, size: 40.0, color: Colors.yellow[600], )), - new Positioned( + Positioned( left: 80.0, - child: new Icon( + child: Icon( Icons.monetization_on, size: 40.0, color: Colors.yellow[600], @@ -120,12 +120,12 @@ class StackLayout extends StatelessWidget { @override Widget build(BuildContext context) { - return new Stack( + return Stack( overflow: Overflow.visible, alignment: const Alignment(0.2, 0.6), children: [ CircleAvatar( - backgroundColor: new Color(0xfff48fb1), + backgroundColor: Color(0xfff48fb1), radius: 140.0, ), Container( diff --git a/lib/widgets/elements/Frame/Stack/Stack/index.dart b/lib/widgets/elements/Frame/Stack/Stack/index.dart index f25d059b..66c61516 100644 --- a/lib/widgets/elements/Frame/Stack/Stack/index.dart +++ b/lib/widgets/elements/Frame/Stack/Stack/index.dart @@ -35,30 +35,28 @@ class Demo extends StatefulWidget { } class _DemoState extends State { - @override Widget build(BuildContext context) { return WidgetDemo( title: 'Stack', - codeUrl: - 'elements/Frame/Stack/Stack/demo.dart', + codeUrl: 'elements/Frame/Stack/Stack/demo.dart', docUrl: 'https://docs.flutter.io/flutter/widgets/Stack-class.html', contentList: [ _stackText0, _stackCreate(), _stackText1, - new Container( + Container( width: 300.0, height: 100.0, - margin: new EdgeInsets.only(top: 10.0, bottom: 10.0), - color: new Color(0xffe91e63), + margin: EdgeInsets.only(top: 10.0, bottom: 10.0), + color: Color(0xffe91e63), child: StackPositioned(), ), _stackText2, - new Container( + Container( width: 200.0, height: 200.0, - color: new Color(0xffe91e63), + color: Color(0xffe91e63), child: StackLayout(), ), ], @@ -66,18 +64,18 @@ class _DemoState extends State { } Column _stackCreate() { - return new Column( + return Column( children: [ Column( children: [ - new Container( - margin: new EdgeInsets.only(top: 10.0, bottom: 10.0), + Container( + margin: EdgeInsets.only(top: 10.0, bottom: 10.0), width: 300.0, height: 100.0, color: Color(0xffe91e63), child: StackDefault(), ), - new Container( + Container( width: 300.0, height: 100.0, color: Color(0xffe91e63), diff --git a/lib/widgets/elements/Media/Icon/Icon/demo.dart b/lib/widgets/elements/Media/Icon/Icon/demo.dart index 6b5d2fc4..989b3a7a 100644 --- a/lib/widgets/elements/Media/Icon/Icon/demo.dart +++ b/lib/widgets/elements/Media/Icon/Icon/demo.dart @@ -14,7 +14,7 @@ class IconDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - child: new Icon( + child: Icon( Icons.favorite, color: this.curColor, size: 30.0, diff --git a/lib/widgets/elements/Media/Icon/IconData/demo.dart b/lib/widgets/elements/Media/Icon/IconData/demo.dart index 4dae9660..2998fcec 100644 --- a/lib/widgets/elements/Media/Icon/IconData/demo.dart +++ b/lib/widgets/elements/Media/Icon/IconData/demo.dart @@ -7,16 +7,16 @@ import 'package:flutter/material.dart'; class IconDataDemo extends StatelessWidget { - final Color curColor ; + final Color curColor; IconDataDemo({Key key, this.curColor}) : super(); @override Widget build(BuildContext context) { return Container( - child: new Icon( + child: Icon( //参考 icon constans - new IconData(0xe567, + IconData(0xe567, fontFamily: 'MaterialIcons', matchTextDirection: true), color: this.curColor, size: 30.0, diff --git a/lib/widgets/elements/Media/Icon/IconTheme/demo.dart b/lib/widgets/elements/Media/Icon/IconTheme/demo.dart index 53fa28a0..ed1845ca 100644 --- a/lib/widgets/elements/Media/Icon/IconTheme/demo.dart +++ b/lib/widgets/elements/Media/Icon/IconTheme/demo.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; class IconThemeDemo extends StatelessWidget { - final Color curColor ; + final Color curColor; IconThemeDemo({Key key, this.curColor}) : super(); @@ -15,17 +15,20 @@ class IconThemeDemo extends StatelessWidget { Widget build(BuildContext context) { return AppBar( actions: [ - new IconTheme( - data: new IconThemeData(color: curColor, opacity: 3.0), - child: Container( - padding: EdgeInsets.all(20.0), child: Icon(Icons.equalizer))), + IconTheme( + data: IconThemeData(color: curColor, opacity: 3.0), + child: Container( + padding: EdgeInsets.all(20.0), + child: Icon(Icons.equalizer), + ), + ), ], ); } } class IconThemeDemo2 extends StatelessWidget { - final Color curColor ; + final Color curColor; final double curSize; IconThemeDemo2({Key key, this.curColor, this.curSize}) : super(); @@ -34,8 +37,8 @@ class IconThemeDemo2 extends StatelessWidget { Widget build(BuildContext context) { return AppBar( actions: [ - new IconTheme( - data: new IconThemeData(color: curColor, opacity: 3.0), + IconTheme( + data: IconThemeData(color: curColor, opacity: 3.0), child: Row( children: [ Icon( diff --git a/lib/widgets/elements/Media/Icon/IconThemeData/demo.dart b/lib/widgets/elements/Media/Icon/IconThemeData/demo.dart index 4fb49517..a33a2bd5 100644 --- a/lib/widgets/elements/Media/Icon/IconThemeData/demo.dart +++ b/lib/widgets/elements/Media/Icon/IconThemeData/demo.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; class IconThemeDemo extends StatelessWidget { - final Color curColor ; + final Color curColor; final double curOpacity; IconThemeDemo({Key key, this.curColor, this.curOpacity}) : super(); @@ -16,20 +16,20 @@ class IconThemeDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - child: new IconTheme( + child: IconTheme( //opacity: 设置透明 - data: new IconThemeData( + data: IconThemeData( color: curColor, opacity: curOpacity, ), - child: new Icon(Icons.favorite), + child: Icon(Icons.favorite), ), ); } } class IconThemeDemo2 extends StatelessWidget { - final Color curColor ; + final Color curColor; final double curSize; IconThemeDemo2({Key key, this.curColor, this.curSize}) : super(); @@ -38,8 +38,8 @@ class IconThemeDemo2 extends StatelessWidget { Widget build(BuildContext context) { return AppBar( actions: [ - new IconTheme( - data: new IconThemeData(color: curColor, opacity: 1.0), + IconTheme( + data: IconThemeData(color: curColor, opacity: 1.0), child: Row( children: [ Icon(Icons.favorite_border), diff --git a/lib/widgets/elements/Media/Icon/ImageIcon/demo.dart b/lib/widgets/elements/Media/Icon/ImageIcon/demo.dart index 24ddeeb6..c5daecb1 100644 --- a/lib/widgets/elements/Media/Icon/ImageIcon/demo.dart +++ b/lib/widgets/elements/Media/Icon/ImageIcon/demo.dart @@ -10,8 +10,8 @@ class ImageIconDemo extends StatelessWidget { @override Widget build(BuildContext context) { //注意:当你用一个图片的时候,这个图片会被整个覆盖,只保留图片的形状,填充你设置的颜色 - return new ImageIcon( - new AssetImage('assets/images/btn_icon_dingyuehao_normal.png'), + return ImageIcon( + AssetImage('assets/images/btn_icon_dingyuehao_normal.png'), color: Colors.red, size: 50.0, ); diff --git a/lib/widgets/elements/Media/Icon/index.dart b/lib/widgets/elements/Media/Icon/index.dart index 0551c584..630bf3b4 100644 --- a/lib/widgets/elements/Media/Icon/index.dart +++ b/lib/widgets/elements/Media/Icon/index.dart @@ -17,20 +17,20 @@ List widgetPoints = [ name: 'ImageIcon', routerName: ImageIcon.Demo.routeName, buildRouter: (BuildContext context) => ImageIcon.Demo(), - ), WidgetPoint( + ), + WidgetPoint( name: 'IconTheme', routerName: IconTheme.Demo.routeName, buildRouter: (BuildContext context) => IconTheme.Demo(), ), - WidgetPoint( + WidgetPoint( name: 'IconData', routerName: IconData.Demo.routeName, buildRouter: (BuildContext context) => IconData.Demo(), ), - WidgetPoint( + WidgetPoint( name: 'IconThemeData', routerName: IconThemeData.Demo.routeName, buildRouter: (BuildContext context) => IconThemeData.Demo(), ), - ]; diff --git a/lib/widgets/elements/Media/Image/FadeInImage/fade_in_image_demo.dart b/lib/widgets/elements/Media/Image/FadeInImage/fade_in_image_demo.dart index a4cd8287..3e6f56d0 100644 --- a/lib/widgets/elements/Media/Image/FadeInImage/fade_in_image_demo.dart +++ b/lib/widgets/elements/Media/Image/FadeInImage/fade_in_image_demo.dart @@ -11,8 +11,8 @@ class FadeInImageDemo extends StatelessWidget { Widget build(BuildContext context) { return Column( children: [ - new ClipOval( - child: new FadeInImage.assetNetwork( + ClipOval( + child: FadeInImage.assetNetwork( placeholder: "assets/images/normal_user_icon.png", //预览图 fit: BoxFit.fitWidth, image: @@ -24,10 +24,10 @@ class FadeInImageDemo extends StatelessWidget { SizedBox( height: 20.0, ), - new CircleAvatar( - backgroundImage: new NetworkImage( + CircleAvatar( + backgroundImage: NetworkImage( "https://img.alicdn.com/tfs/TB148sWfMHqK1RjSZFgXXa7JXXa-536-482.png"), - child: new Text("一凨"), //可以在图片上添加文字等等 + child: Text("一凨"), //可以在图片上添加文字等等 ), ], ); diff --git a/lib/widgets/elements/Media/Image/FileImage/file_image_demo.dart b/lib/widgets/elements/Media/Image/FileImage/file_image_demo.dart index 492251fe..c4ebf73a 100644 --- a/lib/widgets/elements/Media/Image/FileImage/file_image_demo.dart +++ b/lib/widgets/elements/Media/Image/FileImage/file_image_demo.dart @@ -13,7 +13,7 @@ import 'dart:io'; class FileImageDemo extends StatefulWidget { @override - _FileImageDemoState createState() => new _FileImageDemoState(); + _FileImageDemoState createState() => _FileImageDemoState(); } class _FileImageDemoState extends State { @@ -31,10 +31,10 @@ class _FileImageDemoState extends State { Widget build(BuildContext context) { return Column( children: [ - new Center( + Center( child: _image == null - ? new Text('您还未选择任何图片.') - : new Image.file(_image,scale: 0.5,fit: BoxFit.cover,), + ? Text('您还未选择任何图片.') + : Image.file(_image,scale: 0.5,fit: BoxFit.cover,), ), FlatButton( onPressed: getImage, diff --git a/lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart b/lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart index a7ad8132..1ee10992 100644 --- a/lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart +++ b/lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart @@ -29,11 +29,11 @@ class _MemoryImageDemoState extends State { @override Widget build(BuildContext context) { - final decoration = new BoxDecoration( + final decoration = BoxDecoration( image: bytes == null ? null - : new DecorationImage( - image: new MemoryImage(bytes,scale: 1.0), + : DecorationImage( + image: MemoryImage(bytes,scale: 1.0), ), ); return Container( diff --git a/lib/widgets/themes/Cupertino/CupertinoApp/demo.dart b/lib/widgets/themes/Cupertino/CupertinoApp/demo.dart index 6b3ec058..5d301704 100644 --- a/lib/widgets/themes/Cupertino/CupertinoApp/demo.dart +++ b/lib/widgets/themes/Cupertino/CupertinoApp/demo.dart @@ -25,8 +25,7 @@ class CupertinoAppFullDefault extends StatefulWidget { * CupertinoApp 默认的实例,有状态 * */ class _CupertinoAppFullDefault extends State { - - routerHandler(setting){ + routerHandler(setting) { //setting.isInitialRoute; bool类型 是否初始路由 //setting.name; 要跳转的路由名key return PageRouteBuilder( @@ -37,17 +36,16 @@ class _CupertinoAppFullDefault extends State { opaque: false, //跳转动画 transitionDuration: Duration(milliseconds: 200), - transitionsBuilder: (___, Animation animation, ____, Widget child) { + transitionsBuilder: + (___, Animation animation, ____, Widget child) { return FadeTransition( opacity: animation, - child: new ScaleTransition( - scale: new Tween(begin: 0.5, end: 1.0) - .animate(animation), + child: ScaleTransition( + scale: Tween(begin: 0.5, end: 1.0).animate(animation), child: child, ), ); - } - ); + }); } @override @@ -57,63 +55,78 @@ class _CupertinoAppFullDefault extends State { width: MediaQuery.of(context).size.width, //height: 500.0, child: CupertinoApp( - title: '这里是标题',// 设备用于识别用户的应用程序的单行描述 - builder: (BuildContext context,Widget child) { // 覆盖下面的所有界面,一般当作追加属性用 + title: '这里是标题', // 设备用于识别用户的应用程序的单行描述 + builder: (BuildContext context, Widget child) { + // 覆盖下面的所有界面,一般当作追加属性用 //return Container(child:Text('这里是内容1',style:TextStyle(color:Colors.black))); - return MediaQuery(// 当构建一个Widget前,调用一般做字体大小,方向,主题颜色等配置 - //字体大小 - data: MediaQuery.of(context).copyWith(textScaleFactor: 1.4), - child: child - ); + return MediaQuery( + // 当构建一个Widget前,调用一般做字体大小,方向,主题颜色等配置 + //字体大小 + data: MediaQuery.of(context).copyWith(textScaleFactor: 1.4), + child: child); }, - checkerboardOffscreenLayers:false, // 打开渲染到屏幕外位图的图层的checkerboarding - checkerboardRasterCacheImages:false, // 打开光栅缓存图像的检查板。 - debugShowCheckedModeBanner:true,// 在debug模式下打开一个小“DEBUG”横幅,表示该应用程序处于检查模式 + checkerboardOffscreenLayers: false, // 打开渲染到屏幕外位图的图层的checkerboarding + checkerboardRasterCacheImages: false, // 打开光栅缓存图像的检查板。 + debugShowCheckedModeBanner: + true, // 在debug模式下打开一个小“DEBUG”横幅,表示该应用程序处于检查模式 color: Colors.red, // 该颜色为程序切换中应用图标背景的颜色,当应用图标背景为透明时 // home: HomePage(),// 进入程序后显示的第一个页面,传入的是一个Widget,但实际上这个Widget需要包裹一个Scaffold - home: CupertinoPageScaffold(// 进入程序后显示的第一个页面,传入的是一个Widget,但实际上这个Widget需要包裹一个Scaffold + home: CupertinoPageScaffold( + // 进入程序后显示的第一个页面,传入的是一个Widget,但实际上这个Widget需要包裹一个Scaffold navigationBar: CupertinoNavigationBar( leading: Icon(CupertinoIcons.back), middle: Text('Title'), trailing: Icon(CupertinoIcons.share), ), - child:Container( // home 对应的内容和 router对应的内容,同时存在 + child: Container( + // home 对应的内容和 router对应的内容,同时存在 padding: const EdgeInsets.only(bottom: 60.0), alignment: Alignment.center, - child:Text('这里是 home 属性对应的内容',style:TextStyle(color:Colors.black)) - ), // 应用程序默认路由,(Navigator.defaultRouteName,即/) - ), - initialRoute:'/home',// 如果构建了导航器,则显示的第一条路径的名称,初始路由,当用户进入程序时,自动打开对应的路由。(home还是位于一级)传入的是上面routes的key - locale:Locale('zh', 'CH'),// 本地化初始值 - localeResolutionCallback: (local,support){// 区域分辨回调,当传入的是不支持的语种,可以根据这个回调,返回相近,并且支持的语种 - return const Locale('us','uk'); + child: Text('这里是 home 属性对应的内容', + style: TextStyle( + color: Colors + .black))), // 应用程序默认路由,(Navigator.defaultRouteName,即/) + ), + initialRoute: + '/home', // 如果构建了导航器,则显示的第一条路径的名称,初始路由,当用户进入程序时,自动打开对应的路由。(home还是位于一级)传入的是上面routes的key + locale: Locale('zh', 'CH'), // 本地化初始值 + localeResolutionCallback: (local, support) { + // 区域分辨回调,当传入的是不支持的语种,可以根据这个回调,返回相近,并且支持的语种 + return const Locale('us', 'uk'); }, - localizationsDelegates:[], // 本地化委托,用于更改Flutter Widget默认的提示语,按钮text等,返回一个 继承自 LocalizationsDelegate 的对象 - navigatorKey:GlobalKey(), // 导航主键 GlobalKey - navigatorObservers: [ // 路由观察器,当调用Navigator的相关方法时,会回调相关的操作 + localizationsDelegates: [], // 本地化委托,用于更改Flutter Widget默认的提示语,按钮text等,返回一个 继承自 LocalizationsDelegate 的对象 + navigatorKey: GlobalKey(), // 导航主键 GlobalKey + navigatorObservers: [ + // 路由观察器,当调用Navigator的相关方法时,会回调相关的操作 MyObserver(), ], - onGenerateRoute: (setting){ // 当通过Navigation.of(context).pushNamed跳转路由时,在routes查找不到时,会调用该方法 + onGenerateRoute: (setting) { + // 当通过Navigation.of(context).pushNamed跳转路由时,在routes查找不到时,会调用该方法 routerHandler(setting); }, - onGenerateTitle: (context){ // 跟上面的tiitle一样,但含有一个context参数用于做本地化 + onGenerateTitle: (context) { + // 跟上面的tiitle一样,但含有一个context参数用于做本地化 return 'Flutter应用'; }, - onUnknownRoute: (setting){ // 效果跟onGenerateRoute一样调用顺序为onGenerateRoute ==> onUnknownRoute + onUnknownRoute: (setting) { + // 效果跟onGenerateRoute一样调用顺序为onGenerateRoute ==> onUnknownRoute //RouterHandler(setting); }, - routes: { // 声明程序中有哪个通过Navigation.of(context).pushNamed跳转的路由参数以键值对的形式传递key:路由名字value:对应的Widget - '/home':(BuildContext context) => HomePage(), - '/home/one':(BuildContext context) => OnePage(), + routes: { + // 声明程序中有哪个通过Navigation.of(context).pushNamed跳转的路由参数以键值对的形式传递key:路由名字value:对应的Widget + '/home': (BuildContext context) => HomePage(), + '/home/one': (BuildContext context) => OnePage(), }, - showPerformanceOverlay:false, // 当为true时应用程序顶部覆盖一层GPU和UI曲线图,可即时查看当前流畅度情况 - showSemanticsDebugger:false, // 当为true时,打开Widget边框,类似Android开发者模式中显示布局边界 - supportedLocales:[// 传入支持的语种数组 + showPerformanceOverlay: + false, // 当为true时应用程序顶部覆盖一层GPU和UI曲线图,可即时查看当前流畅度情况 + showSemanticsDebugger: + false, // 当为true时,打开Widget边框,类似Android开发者模式中显示布局边界 + supportedLocales: [ + // 传入支持的语种数组 const Locale('uok'), const Locale('meg'), ], - ) - ); + )); } Widget homeBuild(BuildContext context) { @@ -138,15 +151,15 @@ class _CupertinoAppFullDefault extends State { backgroundColor: CupertinoColors.destructiveRed, middle: Text('这里是标题', style: TextStyle(color: Colors.white)), ), - child: Center(child: Text('这里是内容', style: TextStyle(color: Colors.black))), + child: Center( + child: Text('这里是内容', style: TextStyle(color: Colors.black))), backgroundColor: CupertinoColors.extraLightBackgroundGray, ); - } - ); + }); } } -class MyObserver extends NavigatorObserver{ +class MyObserver extends NavigatorObserver { @override void didPush(Route route, Route previousRoute) { // 当调用Navigator.push时回调 @@ -157,16 +170,17 @@ class MyObserver extends NavigatorObserver{ } } -class HomePage extends StatelessWidget{ +class HomePage extends StatelessWidget { @override - Widget build(BuildContext context){ - return Center(child:Text('HomePage',style:TextStyle(color:Colors.black))); + Widget build(BuildContext context) { + return Center( + child: Text('HomePage', style: TextStyle(color: Colors.black))); } } -class OnePage extends StatelessWidget{ +class OnePage extends StatelessWidget { @override - Widget build(BuildContext context){ - return Center(child:Text('OnePage',style:TextStyle(color:Colors.red))); + Widget build(BuildContext context) { + return Center(child: Text('OnePage', style: TextStyle(color: Colors.red))); } -} \ No newline at end of file +} diff --git a/lib/widgets/themes/Cupertino/CupertinoButton/demo.dart b/lib/widgets/themes/Cupertino/CupertinoButton/demo.dart index 02cf2417..87d0e0f8 100644 --- a/lib/widgets/themes/Cupertino/CupertinoButton/demo.dart +++ b/lib/widgets/themes/Cupertino/CupertinoButton/demo.dart @@ -35,7 +35,7 @@ class _CupertinoButtonFullDefault extends State { }, pressedOpacity:0.5,// 按下后的按钮不透明度 color:CupertinoColors.darkBackgroundGray, - child: new Text('CupertinoButton'), + child: Text('CupertinoButton'), ); } } \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart b/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart index 9e2e7765..d9e155ef 100644 --- a/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart +++ b/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart @@ -16,7 +16,7 @@ class CupertinoSegmentedControlDemo extends StatefulWidget { class _Demo extends State { String value = 'a'; Widget build(BuildContext context) { - return new CupertinoSegmentedControl( + return CupertinoSegmentedControl( onValueChanged: (v) { this.setState(() { value = v; diff --git a/lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart b/lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart index cd46e5a8..160a1245 100644 --- a/lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart +++ b/lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart @@ -16,7 +16,7 @@ class CupertinoSliderDemo extends StatefulWidget { class _Demo extends State { double value = 0.0; Widget build(BuildContext context) { - return new CupertinoSlider( + return CupertinoSlider( value: value,//实际进度的位置 min: 0.0, max: 100.0, diff --git a/lib/widgets/themes/Cupertino/CupertinoTimerPicker/demo.dart b/lib/widgets/themes/Cupertino/CupertinoTimerPicker/demo.dart index be683a88..3e3b597a 100644 --- a/lib/widgets/themes/Cupertino/CupertinoTimerPicker/demo.dart +++ b/lib/widgets/themes/Cupertino/CupertinoTimerPicker/demo.dart @@ -16,7 +16,7 @@ class CupertinoTimerPickerDemo extends StatefulWidget { class _Demo extends State { int index = 0; - Duration timer = new Duration(minutes: 50); + Duration timer = Duration(minutes: 50); Widget _buildBottomPicker(Widget picker) { return Container( diff --git a/lib/widgets/themes/Material/MaterialAccentColor/index.dart b/lib/widgets/themes/Material/MaterialAccentColor/index.dart index 3e29db7d..4739e0d4 100644 --- a/lib/widgets/themes/Material/MaterialAccentColor/index.dart +++ b/lib/widgets/themes/Material/MaterialAccentColor/index.dart @@ -28,7 +28,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'MaterialAccentColor', - codeUrl: 'elements/themes/Material/MaterialAccentColor', + codeUrl: 'themes/Material/MaterialAccentColor', docUrl: 'https://docs.flutter.io/flutter/material/MaterialAccentColor-class.html', contentList: [ diff --git a/lib/widgets/themes/Material/MaterialApp/demo.dart b/lib/widgets/themes/Material/MaterialApp/demo.dart index be00903d..d7e279bf 100644 --- a/lib/widgets/themes/Material/MaterialApp/demo.dart +++ b/lib/widgets/themes/Material/MaterialApp/demo.dart @@ -10,9 +10,9 @@ // class MaterialApp extends StatelessWidget { // @override // Widget build(BuildContext context) { -// return new MaterialApp( +// return MaterialApp( // title: 'title', -// theme: new ThemeData( +// theme: ThemeData( // primaryColor: Color(ThemeColor), // backgroundColor: Color(0xFFEFEFEF), // accentColor: Color(0xFF888888), @@ -25,7 +25,7 @@ // size: 35.0, // ), // ), -// home: new MyHomePage(), +// home: MyHomePage(), // onGenerateRoute: Application.router.generator, // ); // } diff --git a/lib/widgets/themes/Material/MaterialApp/index.dart b/lib/widgets/themes/Material/MaterialApp/index.dart index d6a9918b..9d545c77 100644 --- a/lib/widgets/themes/Material/MaterialApp/index.dart +++ b/lib/widgets/themes/Material/MaterialApp/index.dart @@ -50,4 +50,4 @@ class _DemoState extends State { codeUrl: '../main.dart', ); } -} \ No newline at end of file +} diff --git a/lib/widgets/themes/Material/MaterialColor/demo.dart b/lib/widgets/themes/Material/MaterialColor/demo.dart index cd43abbc..83227034 100644 --- a/lib/widgets/themes/Material/MaterialColor/demo.dart +++ b/lib/widgets/themes/Material/MaterialColor/demo.dart @@ -14,10 +14,9 @@ class Palette { final String name; final MaterialColor primary; - /* - * MaterialAccentColor:定义单一的色滴,颜色的阴影用索引表示, - * 索引比较小的颜色比较浅,较大的索引较暗 - */ + /// MaterialAccentColor:定义单一的色滴,颜色的阴影用索引表示, + /// 索引比较小的颜色比较浅,较大的索引较暗 + final MaterialAccentColor accent; final int threshold; // titles for indices > threshold are white, otherwise black diff --git a/lib/widgets/themes/Material/MaterialPageRoute/demo.dart b/lib/widgets/themes/Material/MaterialPageRoute/demo.dart index 260e078f..726dd428 100644 --- a/lib/widgets/themes/Material/MaterialPageRoute/demo.dart +++ b/lib/widgets/themes/Material/MaterialPageRoute/demo.dart @@ -14,18 +14,18 @@ class FirstPage extends StatefulWidget { } class _FirstPageState extends State { - var _usernameController = new TextEditingController(); - var _emailController = new TextEditingController(); + var _usernameController = TextEditingController(); + var _emailController = TextEditingController(); @override Widget build(BuildContext context) { return Column( children: [ Padding( - child: new Text( + child: Text( "账号登录", textAlign: TextAlign.center, - style: new TextStyle(fontWeight: FontWeight.bold, fontSize: 20), + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20), ), padding: EdgeInsets.only(bottom: 10.0), ), @@ -37,11 +37,11 @@ class _FirstPageState extends State { decoration: InputDecoration(labelText: "email"), controller: _emailController, ), - new RaisedButton( + RaisedButton( child: Text("点击跳转"), onPressed: () { - var route = new MaterialPageRoute( - builder: (BuildContext context) => new SecondPage( + var route = MaterialPageRoute( + builder: (BuildContext context) => SecondPage( value: User( account: _usernameController.text, email: _emailController.text)), @@ -65,21 +65,21 @@ class SecondPage extends StatefulWidget { class _SecondPageState extends State { @override Widget build(BuildContext context) { - return new Scaffold( - appBar: new AppBar( + return Scaffold( + appBar: AppBar( title: Text("MaterialPageRoute2"), ), - body: new Container( - child: new Center( + body: Container( + child: Center( child: Column( children: [ Container( padding: EdgeInsets.only(top: 30.0), - child: new Text("登陆成功!!!", + child: Text("登陆成功!!!", style: TextStyle( fontSize: 28, fontWeight: FontWeight.bold))), Padding( - child: new Text( + child: Text( 'account:${widget.value.account}', textAlign: TextAlign.center, style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), @@ -87,7 +87,7 @@ class _SecondPageState extends State { padding: EdgeInsets.only(bottom: 20.0, top: 40.0), ), Padding( - child: new Text( + child: Text( 'email:${widget.value.email}', textAlign: TextAlign.center, style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), diff --git a/lib/widgets/themes/Material/MergeableMaterialItem/demo.dart b/lib/widgets/themes/Material/MergeableMaterialItem/demo.dart index df54a53e..8e43e352 100644 --- a/lib/widgets/themes/Material/MergeableMaterialItem/demo.dart +++ b/lib/widgets/themes/Material/MergeableMaterialItem/demo.dart @@ -25,20 +25,19 @@ class _MergeableMaterialItemState extends State { @override Widget build(BuildContext context) { items.add( - /** - * class MaterialSlice extends MergeableMaterialItem - */ - new MaterialSlice( - key: new ValueKey(currIndexNum), - child: new Column(children: [ + + //class MaterialSlice extends MergeableMaterialItem + MaterialSlice( + key: ValueKey(currIndexNum), + child: Column(children: [ // header, - new AnimatedCrossFade( - firstChild: new Container( + AnimatedCrossFade( + firstChild: Container( height: 20.0, width: 20.0, color: Colors.green, ), - secondChild: new Container( + secondChild: Container( height: 20.0, width: 20.0, color: Colors.red, @@ -57,8 +56,8 @@ class _MergeableMaterialItemState extends State { return Column( children: [ - new MergeableMaterial(hasDividers: true, children: items), - new RaisedButton( + MergeableMaterial(hasDividers: true, children: items), + RaisedButton( child: Text("点击添加"), onPressed: () { _isChildExpanded(); diff --git a/pubspec.yaml b/pubspec.yaml index 55e3b622..225d8f53 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -125,11 +125,9 @@ flutter: - lib/widgets/elements/Frame/Box/Fittedbox/demo.dart - lib/widgets/elements/Frame/Box/LimitedBox/demo.dart - lib/widgets/elements/Frame/Box/OverflowBox/demo.dart - - lib/widgets/elements/Frame/Box/RenderBox/demo.dart - lib/widgets/elements/Frame/Box/RotatedBox/demo.dart - lib/widgets/elements/Frame/Box/SizeBox/demo.dart - lib/widgets/elements/Frame/Box/SizedOverflowBox/demo.dart - - lib/widgets/elements/Frame/Box/TextBox/demo.dart - lib/widgets/elements/Frame/Box/UnconstrainedBox/demo.dart - lib/widgets/elements/Frame/Expanded/Expanded/expanded_demo.dart - lib/widgets/elements/Frame/Layout/Center/demo.dart From 860272f58e8377301983d98f05d2176f2dcf2c44 Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 31 Jan 2019 19:37:01 +0800 Subject: [PATCH 19/28] =?UTF-8?q?Debug:canvas=20=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/widgets/elements/Media/Canvas/Canvas/index.dart | 2 +- lib/widgets/elements/Media/Canvas/PainterPath/index.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/widgets/elements/Media/Canvas/Canvas/index.dart b/lib/widgets/elements/Media/Canvas/Canvas/index.dart index 1b05226d..3e6cda7e 100644 --- a/lib/widgets/elements/Media/Canvas/Canvas/index.dart +++ b/lib/widgets/elements/Media/Canvas/Canvas/index.dart @@ -57,7 +57,7 @@ const Text10 = ''' '''; class Demo extends StatefulWidget { - static const String routeName = '/element/Media/Canvas/PainterPath'; + static const String routeName = '/element/Media/Canvas/Canvas'; _DemoState createState() => _DemoState(); } diff --git a/lib/widgets/elements/Media/Canvas/PainterPath/index.dart b/lib/widgets/elements/Media/Canvas/PainterPath/index.dart index ae837e31..ab64fadb 100644 --- a/lib/widgets/elements/Media/Canvas/PainterPath/index.dart +++ b/lib/widgets/elements/Media/Canvas/PainterPath/index.dart @@ -36,7 +36,7 @@ const Text5 = ''' class Demo extends StatefulWidget { - static const String routeName = '/element/Media/Canvas/Canvas'; + static const String routeName = '/element/Media/Canvas/PainterPath'; _DemoState createState() => _DemoState(); } From fbf2be87774838500dcc5819cc0e0152e2afa241 Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 11:32:36 +0800 Subject: [PATCH 20/28] fix:build before modify package's name --- .../elements/Form/Text/RichText/index.dart | 3 +- lib/widgets/elements/Form/Text/index.dart | 12 +- lib/widgets/themes/Cupertino/index.dart | 228 +++++++++--------- 3 files changed, 122 insertions(+), 121 deletions(-) diff --git a/lib/widgets/elements/Form/Text/RichText/index.dart b/lib/widgets/elements/Form/Text/RichText/index.dart index 2e90f269..e9df401a 100644 --- a/lib/widgets/elements/Form/Text/RichText/index.dart +++ b/lib/widgets/elements/Form/Text/RichText/index.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_go/components/widget_demo.dart'; -import 'demo.dart'; +import 'package:flutter_go/widgets/elements/Form/Text/RichText/demo.dart'; +// import 'demo.dart'; const String intro = """ ### **简介** diff --git a/lib/widgets/elements/Form/Text/index.dart b/lib/widgets/elements/Form/Text/index.dart index c5881c6d..2c57ccca 100644 --- a/lib/widgets/elements/Form/Text/index.dart +++ b/lib/widgets/elements/Form/Text/index.dart @@ -1,16 +1,16 @@ import '../../../../model/widget.dart'; import "package:flutter/material.dart"; -import 'RichText/index.dart' as RichText; +// import 'RichText/index.dart' as RichText; import 'Text/index.dart' as Text; List widgetPoints = [ - WidgetPoint( - name: 'RichText', - routerName: RichText.Demo.routeName, - buildRouter: (BuildContext context) => RichText.Demo(), - ), + // WidgetPoint( + // name: 'RichText', + // routerName: RichText.Demo.routeName, + // buildRouter: (BuildContext context) => RichText.Demo(), + // ), WidgetPoint( name: 'Text', routerName: Text.Demo.routeName, diff --git a/lib/widgets/themes/Cupertino/index.dart b/lib/widgets/themes/Cupertino/index.dart index 2da137c6..50d0781a 100644 --- a/lib/widgets/themes/Cupertino/index.dart +++ b/lib/widgets/themes/Cupertino/index.dart @@ -1,123 +1,123 @@ -import "package:flutter/material.dart"; +// import "package:flutter/material.dart"; import '../../../model/widget.dart'; -import './CupertinoApp/index.dart' as CupertinoApp; -import './CupertinoButton/index.dart' as CupertinoButton; -import './CupertinoColors/index.dart' as CupertinoColors; -import './CupertinoIcons/index.dart' as CupertinoIcons; -import './CupertinoNavigationBar/index.dart' as CupertinoNavigationBar; -import './CupertinoPageRoute/index.dart' as CupertinoPageRoute; -import './CupertinoPageScaffold/index.dart' as CupertinoPageScaffold; -import './CupertinoPicker/index.dart' as CupertinoPicker; -import './CupertinoPopupSurface/index.dart' as CupertinoPopupSurface; +// import './CupertinoApp/index.dart' as CupertinoApp; +// import './CupertinoButton/index.dart' as CupertinoButton; +// import './CupertinoColors/index.dart' as CupertinoColors; +// import './CupertinoIcons/index.dart' as CupertinoIcons; +// import './CupertinoNavigationBar/index.dart' as CupertinoNavigationBar; +// import './CupertinoPageRoute/index.dart' as CupertinoPageRoute; +// import './CupertinoPageScaffold/index.dart' as CupertinoPageScaffold; +// import './CupertinoPicker/index.dart' as CupertinoPicker; +// import './CupertinoPopupSurface/index.dart' as CupertinoPopupSurface; -import './CupertinoScrollbar/index.dart' as CupertinoScrollbar; -import './CupertinoSlider/index.dart' as CupertinoSlider; -import './CupertinoSegmentedControl/index.dart' as CupertinoSegmentedControl; -import './CupertinoSliverNavigationBar/index.dart' as CupertinoSliverNavigationBar; -import './CupertinoSwitch/index.dart' as CupertinoSwitch; +// import './CupertinoScrollbar/index.dart' as CupertinoScrollbar; +// import './CupertinoSlider/index.dart' as CupertinoSlider; +// import './CupertinoSegmentedControl/index.dart' as CupertinoSegmentedControl; +// import './CupertinoSliverNavigationBar/index.dart' as CupertinoSliverNavigationBar; +// import './CupertinoSwitch/index.dart' as CupertinoSwitch; -import './CupertinoTabBar/index.dart' as CupertinoTabBar; -import './CupertinoTabScaffold/index.dart' as CupertinoTabScaffold; -import './CupertinoTabView/index.dart' as CupertinoTabView; -import './CupertinoTimerPicker/index.dart' as CupertinoTimerPicker; +// import './CupertinoTabBar/index.dart' as CupertinoTabBar; +// import './CupertinoTabScaffold/index.dart' as CupertinoTabScaffold; +// import './CupertinoTabView/index.dart' as CupertinoTabView; +// import './CupertinoTimerPicker/index.dart' as CupertinoTimerPicker; List widgetPoints = [ - WidgetPoint( - name: 'CupertinoPopupSurface', - routerName: CupertinoPopupSurface.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoPopupSurface.Demo(), - ), - WidgetPoint( - name: 'CupertinoPicker', - routerName: CupertinoPicker.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoPicker.Demo(), - ), - WidgetPoint( - name: 'CupertinoPageScaffold', - routerName: CupertinoPageScaffold.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoPageScaffold.Demo(), - ), - WidgetPoint( - name: 'CupertinoPageRoute', - routerName: CupertinoPageRoute.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoPageRoute.Demo(), - ), - WidgetPoint( - name: 'CupertinoNavigationBar', - routerName: CupertinoNavigationBar.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoNavigationBar.Demo(), - ), - WidgetPoint( - name: 'CupertinoIcons', - routerName: CupertinoIcons.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoIcons.Demo(), - ), - WidgetPoint( - name: 'CupertinoColors', - routerName: CupertinoColors.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoColors.Demo(), - ), - WidgetPoint( - name: 'CupertinoButton', - routerName: CupertinoButton.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoButton.Demo(), - ), - WidgetPoint( - name: 'CupertinoApp', - routerName: CupertinoApp.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoApp.Demo(), - ), - WidgetPoint( - name: 'CupertinoScrollbar', - routerName: CupertinoScrollbar.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoScrollbar.Demo(), - ), - WidgetPoint( - name: 'CupertinoSlider', - routerName: CupertinoSlider.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoSlider.Demo(), - ), - WidgetPoint( - name: 'CupertinoSegmentedControl', - routerName: CupertinoSegmentedControl.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoSegmentedControl.Demo(), - ), - WidgetPoint( - name: 'CupertinoSliverNavigationBar', - routerName: CupertinoSliverNavigationBar.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoSliverNavigationBar.Demo(), - ), - WidgetPoint( - name: 'CupertinoSliverRefreshControl', - routerName: CupertinoSliverNavigationBar.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoSliverNavigationBar.Demo(), - ), - WidgetPoint( - name: 'CupertinoSwitch', - routerName: CupertinoSwitch.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoSwitch.Demo(), - ), - WidgetPoint( - name: 'CupertinoTabBar', - routerName: CupertinoTabBar.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoTabBar.Demo(), - ), - WidgetPoint( - name: 'CupertinoTabScaffold', - routerName: CupertinoTabScaffold.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoTabScaffold.Demo(), - ), - WidgetPoint( - name: 'CupertinoTabView', - routerName: CupertinoTabView.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoTabView.Demo(), - ), - WidgetPoint( - name: 'CupertinoTimerPicker', - routerName: CupertinoTimerPicker.Demo.routeName, - buildRouter: (BuildContext context) => CupertinoTimerPicker.Demo(), - ), + // WidgetPoint( + // name: 'CupertinoPopupSurface', + // routerName: CupertinoPopupSurface.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoPopupSurface.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoPicker', + // routerName: CupertinoPicker.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoPicker.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoPageScaffold', + // routerName: CupertinoPageScaffold.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoPageScaffold.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoPageRoute', + // routerName: CupertinoPageRoute.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoPageRoute.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoNavigationBar', + // routerName: CupertinoNavigationBar.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoNavigationBar.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoIcons', + // routerName: CupertinoIcons.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoIcons.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoColors', + // routerName: CupertinoColors.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoColors.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoButton', + // routerName: CupertinoButton.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoButton.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoApp', + // routerName: CupertinoApp.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoApp.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoScrollbar', + // routerName: CupertinoScrollbar.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoScrollbar.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoSlider', + // routerName: CupertinoSlider.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoSlider.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoSegmentedControl', + // routerName: CupertinoSegmentedControl.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoSegmentedControl.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoSliverNavigationBar', + // routerName: CupertinoSliverNavigationBar.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoSliverNavigationBar.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoSliverRefreshControl', + // routerName: CupertinoSliverNavigationBar.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoSliverNavigationBar.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoSwitch', + // routerName: CupertinoSwitch.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoSwitch.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoTabBar', + // routerName: CupertinoTabBar.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoTabBar.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoTabScaffold', + // routerName: CupertinoTabScaffold.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoTabScaffold.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoTabView', + // routerName: CupertinoTabView.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoTabView.Demo(), + // ), + // WidgetPoint( + // name: 'CupertinoTimerPicker', + // routerName: CupertinoTimerPicker.Demo.routeName, + // buildRouter: (BuildContext context) => CupertinoTimerPicker.Demo(), + // ), ]; From 1d195e8c95f7e4f6d4c6cddc7f8baf757765bab2 Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 11:42:32 +0800 Subject: [PATCH 21/28] fix --- lib/widgets/elements/Frame/index.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/widgets/elements/Frame/index.dart b/lib/widgets/elements/Frame/index.dart index ba235725..5ebd4a55 100644 --- a/lib/widgets/elements/Frame/index.dart +++ b/lib/widgets/elements/Frame/index.dart @@ -1,4 +1,4 @@ -import 'spacing/index.dart' as Spacing; +import 'Spacing/index.dart' as Spacing; import 'Expanded/index.dart' as Expanded; // import 'Axis/index.dart' as Axis; From 18538c6362bcd9903427917a92c1488bb4875725 Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 11:50:27 +0800 Subject: [PATCH 22/28] fix --- lib/widgets/elements/Form/Text/RichText/index.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/widgets/elements/Form/Text/RichText/index.dart b/lib/widgets/elements/Form/Text/RichText/index.dart index e9df401a..6c51cb17 100644 --- a/lib/widgets/elements/Form/Text/RichText/index.dart +++ b/lib/widgets/elements/Form/Text/RichText/index.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_go/components/widget_demo.dart'; import 'package:flutter_go/widgets/elements/Form/Text/RichText/demo.dart'; -// import 'demo.dart'; const String intro = """ ### **简介** From 8b99f2198ebdfeac31adf1e60f13e5cb8571838f Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 11:51:57 +0800 Subject: [PATCH 23/28] fix:modify github package name fail and test --- lib/widgets/components/{LIst => List1}/AnimatedList/demo.dart | 0 lib/widgets/components/{LIst => List1}/AnimatedList/index.dart | 0 lib/widgets/components/{LIst => List1}/AnimatedList/model.dart | 0 lib/widgets/components/{LIst => List1}/ListBody/demo.dart | 0 lib/widgets/components/{LIst => List1}/ListBody/index.dart | 0 lib/widgets/components/{LIst => List1}/ListView/demo.dart | 0 lib/widgets/components/{LIst => List1}/ListView/index.dart | 0 lib/widgets/components/{LIst => List1}/index.dart | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename lib/widgets/components/{LIst => List1}/AnimatedList/demo.dart (100%) rename lib/widgets/components/{LIst => List1}/AnimatedList/index.dart (100%) rename lib/widgets/components/{LIst => List1}/AnimatedList/model.dart (100%) rename lib/widgets/components/{LIst => List1}/ListBody/demo.dart (100%) rename lib/widgets/components/{LIst => List1}/ListBody/index.dart (100%) rename lib/widgets/components/{LIst => List1}/ListView/demo.dart (100%) rename lib/widgets/components/{LIst => List1}/ListView/index.dart (100%) rename lib/widgets/components/{LIst => List1}/index.dart (100%) diff --git a/lib/widgets/components/LIst/AnimatedList/demo.dart b/lib/widgets/components/List1/AnimatedList/demo.dart similarity index 100% rename from lib/widgets/components/LIst/AnimatedList/demo.dart rename to lib/widgets/components/List1/AnimatedList/demo.dart diff --git a/lib/widgets/components/LIst/AnimatedList/index.dart b/lib/widgets/components/List1/AnimatedList/index.dart similarity index 100% rename from lib/widgets/components/LIst/AnimatedList/index.dart rename to lib/widgets/components/List1/AnimatedList/index.dart diff --git a/lib/widgets/components/LIst/AnimatedList/model.dart b/lib/widgets/components/List1/AnimatedList/model.dart similarity index 100% rename from lib/widgets/components/LIst/AnimatedList/model.dart rename to lib/widgets/components/List1/AnimatedList/model.dart diff --git a/lib/widgets/components/LIst/ListBody/demo.dart b/lib/widgets/components/List1/ListBody/demo.dart similarity index 100% rename from lib/widgets/components/LIst/ListBody/demo.dart rename to lib/widgets/components/List1/ListBody/demo.dart diff --git a/lib/widgets/components/LIst/ListBody/index.dart b/lib/widgets/components/List1/ListBody/index.dart similarity index 100% rename from lib/widgets/components/LIst/ListBody/index.dart rename to lib/widgets/components/List1/ListBody/index.dart diff --git a/lib/widgets/components/LIst/ListView/demo.dart b/lib/widgets/components/List1/ListView/demo.dart similarity index 100% rename from lib/widgets/components/LIst/ListView/demo.dart rename to lib/widgets/components/List1/ListView/demo.dart diff --git a/lib/widgets/components/LIst/ListView/index.dart b/lib/widgets/components/List1/ListView/index.dart similarity index 100% rename from lib/widgets/components/LIst/ListView/index.dart rename to lib/widgets/components/List1/ListView/index.dart diff --git a/lib/widgets/components/LIst/index.dart b/lib/widgets/components/List1/index.dart similarity index 100% rename from lib/widgets/components/LIst/index.dart rename to lib/widgets/components/List1/index.dart From 1715f5270c4a3adc76c1a87ef9d1d417201a338f Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 11:53:05 +0800 Subject: [PATCH 24/28] fix:back --- lib/widgets/components/{List1 => List}/AnimatedList/demo.dart | 0 lib/widgets/components/{List1 => List}/AnimatedList/index.dart | 0 lib/widgets/components/{List1 => List}/AnimatedList/model.dart | 0 lib/widgets/components/{List1 => List}/ListBody/demo.dart | 0 lib/widgets/components/{List1 => List}/ListBody/index.dart | 0 lib/widgets/components/{List1 => List}/ListView/demo.dart | 0 lib/widgets/components/{List1 => List}/ListView/index.dart | 0 lib/widgets/components/{List1 => List}/index.dart | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename lib/widgets/components/{List1 => List}/AnimatedList/demo.dart (100%) rename lib/widgets/components/{List1 => List}/AnimatedList/index.dart (100%) rename lib/widgets/components/{List1 => List}/AnimatedList/model.dart (100%) rename lib/widgets/components/{List1 => List}/ListBody/demo.dart (100%) rename lib/widgets/components/{List1 => List}/ListBody/index.dart (100%) rename lib/widgets/components/{List1 => List}/ListView/demo.dart (100%) rename lib/widgets/components/{List1 => List}/ListView/index.dart (100%) rename lib/widgets/components/{List1 => List}/index.dart (100%) diff --git a/lib/widgets/components/List1/AnimatedList/demo.dart b/lib/widgets/components/List/AnimatedList/demo.dart similarity index 100% rename from lib/widgets/components/List1/AnimatedList/demo.dart rename to lib/widgets/components/List/AnimatedList/demo.dart diff --git a/lib/widgets/components/List1/AnimatedList/index.dart b/lib/widgets/components/List/AnimatedList/index.dart similarity index 100% rename from lib/widgets/components/List1/AnimatedList/index.dart rename to lib/widgets/components/List/AnimatedList/index.dart diff --git a/lib/widgets/components/List1/AnimatedList/model.dart b/lib/widgets/components/List/AnimatedList/model.dart similarity index 100% rename from lib/widgets/components/List1/AnimatedList/model.dart rename to lib/widgets/components/List/AnimatedList/model.dart diff --git a/lib/widgets/components/List1/ListBody/demo.dart b/lib/widgets/components/List/ListBody/demo.dart similarity index 100% rename from lib/widgets/components/List1/ListBody/demo.dart rename to lib/widgets/components/List/ListBody/demo.dart diff --git a/lib/widgets/components/List1/ListBody/index.dart b/lib/widgets/components/List/ListBody/index.dart similarity index 100% rename from lib/widgets/components/List1/ListBody/index.dart rename to lib/widgets/components/List/ListBody/index.dart diff --git a/lib/widgets/components/List1/ListView/demo.dart b/lib/widgets/components/List/ListView/demo.dart similarity index 100% rename from lib/widgets/components/List1/ListView/demo.dart rename to lib/widgets/components/List/ListView/demo.dart diff --git a/lib/widgets/components/List1/ListView/index.dart b/lib/widgets/components/List/ListView/index.dart similarity index 100% rename from lib/widgets/components/List1/ListView/index.dart rename to lib/widgets/components/List/ListView/index.dart diff --git a/lib/widgets/components/List1/index.dart b/lib/widgets/components/List/index.dart similarity index 100% rename from lib/widgets/components/List1/index.dart rename to lib/widgets/components/List/index.dart From 62808eb0397d9c8c05835fa5389adee5003a6dfe Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 12:02:03 +0800 Subject: [PATCH 25/28] fix:package err --- .../components/List/AnimatedList/demo.dart | 2 +- .../Box/{Fittedbox => FittedBox1}/demo.dart | 0 .../Box/{Fittedbox => FittedBox1}/index.dart | 0 lib/widgets/themes/Cupertino/index.dart | 229 +++++++++--------- 4 files changed, 116 insertions(+), 115 deletions(-) rename lib/widgets/elements/Frame/Box/{Fittedbox => FittedBox1}/demo.dart (100%) rename lib/widgets/elements/Frame/Box/{Fittedbox => FittedBox1}/index.dart (100%) diff --git a/lib/widgets/components/List/AnimatedList/demo.dart b/lib/widgets/components/List/AnimatedList/demo.dart index f598b6eb..f80b6739 100644 --- a/lib/widgets/components/List/AnimatedList/demo.dart +++ b/lib/widgets/components/List/AnimatedList/demo.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter_go/widgets/components/LIst/AnimatedList/model.dart'; +import 'package:flutter_go/widgets/components/List/AnimatedList/model.dart'; class AnimatedListFullDefault extends StatefulWidget { AnimatedListFullDefault({Key key, this.parent}) : super(key: key); diff --git a/lib/widgets/elements/Frame/Box/Fittedbox/demo.dart b/lib/widgets/elements/Frame/Box/FittedBox1/demo.dart similarity index 100% rename from lib/widgets/elements/Frame/Box/Fittedbox/demo.dart rename to lib/widgets/elements/Frame/Box/FittedBox1/demo.dart diff --git a/lib/widgets/elements/Frame/Box/Fittedbox/index.dart b/lib/widgets/elements/Frame/Box/FittedBox1/index.dart similarity index 100% rename from lib/widgets/elements/Frame/Box/Fittedbox/index.dart rename to lib/widgets/elements/Frame/Box/FittedBox1/index.dart diff --git a/lib/widgets/themes/Cupertino/index.dart b/lib/widgets/themes/Cupertino/index.dart index 50d0781a..2266f696 100644 --- a/lib/widgets/themes/Cupertino/index.dart +++ b/lib/widgets/themes/Cupertino/index.dart @@ -1,123 +1,124 @@ -// import "package:flutter/material.dart"; +import 'package:flutter/material.dart'; + import '../../../model/widget.dart'; -// import './CupertinoApp/index.dart' as CupertinoApp; -// import './CupertinoButton/index.dart' as CupertinoButton; -// import './CupertinoColors/index.dart' as CupertinoColors; -// import './CupertinoIcons/index.dart' as CupertinoIcons; -// import './CupertinoNavigationBar/index.dart' as CupertinoNavigationBar; -// import './CupertinoPageRoute/index.dart' as CupertinoPageRoute; -// import './CupertinoPageScaffold/index.dart' as CupertinoPageScaffold; -// import './CupertinoPicker/index.dart' as CupertinoPicker; -// import './CupertinoPopupSurface/index.dart' as CupertinoPopupSurface; +import './CupertinoApp/index.dart' as CupertinoApp; +import './CupertinoButton/index.dart' as CupertinoButton; +import './CupertinoColors/index.dart' as CupertinoColors; +import './CupertinoIcons/index.dart' as CupertinoIcons; +import './CupertinoNavigationBar/index.dart' as CupertinoNavigationBar; +import './CupertinoPageRoute/index.dart' as CupertinoPageRoute; +import './CupertinoPageScaffold/index.dart' as CupertinoPageScaffold; +import './CupertinoPicker/index.dart' as CupertinoPicker; +import './CupertinoPopupSurface/index.dart' as CupertinoPopupSurface; -// import './CupertinoScrollbar/index.dart' as CupertinoScrollbar; -// import './CupertinoSlider/index.dart' as CupertinoSlider; -// import './CupertinoSegmentedControl/index.dart' as CupertinoSegmentedControl; -// import './CupertinoSliverNavigationBar/index.dart' as CupertinoSliverNavigationBar; -// import './CupertinoSwitch/index.dart' as CupertinoSwitch; +import './CupertinoScrollbar/index.dart' as CupertinoScrollbar; +import './CupertinoSlider/index.dart' as CupertinoSlider; +import './CupertinoSegmentedControl/index.dart' as CupertinoSegmentedControl; +import './CupertinoSliverNavigationBar/index.dart' as CupertinoSliverNavigationBar; +import './CupertinoSwitch/index.dart' as CupertinoSwitch; -// import './CupertinoTabBar/index.dart' as CupertinoTabBar; -// import './CupertinoTabScaffold/index.dart' as CupertinoTabScaffold; -// import './CupertinoTabView/index.dart' as CupertinoTabView; -// import './CupertinoTimerPicker/index.dart' as CupertinoTimerPicker; +import './CupertinoTabBar/index.dart' as CupertinoTabBar; +import './CupertinoTabScaffold/index.dart' as CupertinoTabScaffold; +import './CupertinoTabView/index.dart' as CupertinoTabView; +import './CupertinoTimerPicker/index.dart' as CupertinoTimerPicker; List widgetPoints = [ - // WidgetPoint( - // name: 'CupertinoPopupSurface', - // routerName: CupertinoPopupSurface.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoPopupSurface.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoPicker', - // routerName: CupertinoPicker.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoPicker.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoPageScaffold', - // routerName: CupertinoPageScaffold.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoPageScaffold.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoPageRoute', - // routerName: CupertinoPageRoute.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoPageRoute.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoNavigationBar', - // routerName: CupertinoNavigationBar.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoNavigationBar.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoIcons', - // routerName: CupertinoIcons.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoIcons.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoColors', - // routerName: CupertinoColors.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoColors.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoButton', - // routerName: CupertinoButton.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoButton.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoApp', - // routerName: CupertinoApp.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoApp.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoScrollbar', - // routerName: CupertinoScrollbar.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoScrollbar.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoSlider', - // routerName: CupertinoSlider.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoSlider.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoSegmentedControl', - // routerName: CupertinoSegmentedControl.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoSegmentedControl.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoSliverNavigationBar', - // routerName: CupertinoSliverNavigationBar.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoSliverNavigationBar.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoSliverRefreshControl', - // routerName: CupertinoSliverNavigationBar.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoSliverNavigationBar.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoSwitch', - // routerName: CupertinoSwitch.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoSwitch.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoTabBar', - // routerName: CupertinoTabBar.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoTabBar.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoTabScaffold', - // routerName: CupertinoTabScaffold.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoTabScaffold.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoTabView', - // routerName: CupertinoTabView.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoTabView.Demo(), - // ), - // WidgetPoint( - // name: 'CupertinoTimerPicker', - // routerName: CupertinoTimerPicker.Demo.routeName, - // buildRouter: (BuildContext context) => CupertinoTimerPicker.Demo(), - // ), + WidgetPoint( + name: 'CupertinoPopupSurface', + routerName: CupertinoPopupSurface.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoPopupSurface.Demo(), + ), + WidgetPoint( + name: 'CupertinoPicker', + routerName: CupertinoPicker.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoPicker.Demo(), + ), + WidgetPoint( + name: 'CupertinoPageScaffold', + routerName: CupertinoPageScaffold.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoPageScaffold.Demo(), + ), + WidgetPoint( + name: 'CupertinoPageRoute', + routerName: CupertinoPageRoute.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoPageRoute.Demo(), + ), + WidgetPoint( + name: 'CupertinoNavigationBar', + routerName: CupertinoNavigationBar.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoNavigationBar.Demo(), + ), + WidgetPoint( + name: 'CupertinoIcons', + routerName: CupertinoIcons.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoIcons.Demo(), + ), + WidgetPoint( + name: 'CupertinoColors', + routerName: CupertinoColors.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoColors.Demo(), + ), + WidgetPoint( + name: 'CupertinoButton', + routerName: CupertinoButton.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoButton.Demo(), + ), + WidgetPoint( + name: 'CupertinoApp', + routerName: CupertinoApp.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoApp.Demo(), + ), + WidgetPoint( + name: 'CupertinoScrollbar', + routerName: CupertinoScrollbar.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoScrollbar.Demo(), + ), + WidgetPoint( + name: 'CupertinoSlider', + routerName: CupertinoSlider.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoSlider.Demo(), + ), + WidgetPoint( + name: 'CupertinoSegmentedControl', + routerName: CupertinoSegmentedControl.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoSegmentedControl.Demo(), + ), + WidgetPoint( + name: 'CupertinoSliverNavigationBar', + routerName: CupertinoSliverNavigationBar.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoSliverNavigationBar.Demo(), + ), + WidgetPoint( + name: 'CupertinoSliverRefreshControl', + routerName: CupertinoSliverNavigationBar.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoSliverNavigationBar.Demo(), + ), + WidgetPoint( + name: 'CupertinoSwitch', + routerName: CupertinoSwitch.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoSwitch.Demo(), + ), + WidgetPoint( + name: 'CupertinoTabBar', + routerName: CupertinoTabBar.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoTabBar.Demo(), + ), + WidgetPoint( + name: 'CupertinoTabScaffold', + routerName: CupertinoTabScaffold.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoTabScaffold.Demo(), + ), + WidgetPoint( + name: 'CupertinoTabView', + routerName: CupertinoTabView.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoTabView.Demo(), + ), + WidgetPoint( + name: 'CupertinoTimerPicker', + routerName: CupertinoTimerPicker.Demo.routeName, + buildRouter: (BuildContext context) => CupertinoTimerPicker.Demo(), + ), ]; From c6cbf73f19a0fcf1a153c6b8ec121436d9d79771 Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 12:02:59 +0800 Subject: [PATCH 26/28] fix:back --- .../elements/Frame/Box/{FittedBox1 => FittedBox}/demo.dart | 0 .../elements/Frame/Box/{FittedBox1 => FittedBox}/index.dart | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename lib/widgets/elements/Frame/Box/{FittedBox1 => FittedBox}/demo.dart (100%) rename lib/widgets/elements/Frame/Box/{FittedBox1 => FittedBox}/index.dart (100%) diff --git a/lib/widgets/elements/Frame/Box/FittedBox1/demo.dart b/lib/widgets/elements/Frame/Box/FittedBox/demo.dart similarity index 100% rename from lib/widgets/elements/Frame/Box/FittedBox1/demo.dart rename to lib/widgets/elements/Frame/Box/FittedBox/demo.dart diff --git a/lib/widgets/elements/Frame/Box/FittedBox1/index.dart b/lib/widgets/elements/Frame/Box/FittedBox/index.dart similarity index 100% rename from lib/widgets/elements/Frame/Box/FittedBox1/index.dart rename to lib/widgets/elements/Frame/Box/FittedBox/index.dart From c20362cd000435189768e5d1ab2ab36db114da30 Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 12:04:32 +0800 Subject: [PATCH 27/28] fix:package err --- lib/widgets/components/Chip/{inputChip => InputChip1}/demo.dart | 0 lib/widgets/components/Chip/{inputChip => InputChip1}/index.dart | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename lib/widgets/components/Chip/{inputChip => InputChip1}/demo.dart (100%) rename lib/widgets/components/Chip/{inputChip => InputChip1}/index.dart (100%) diff --git a/lib/widgets/components/Chip/inputChip/demo.dart b/lib/widgets/components/Chip/InputChip1/demo.dart similarity index 100% rename from lib/widgets/components/Chip/inputChip/demo.dart rename to lib/widgets/components/Chip/InputChip1/demo.dart diff --git a/lib/widgets/components/Chip/inputChip/index.dart b/lib/widgets/components/Chip/InputChip1/index.dart similarity index 100% rename from lib/widgets/components/Chip/inputChip/index.dart rename to lib/widgets/components/Chip/InputChip1/index.dart From ccb5c9e42883b23266fb95b9caf4e958d817ff48 Mon Sep 17 00:00:00 2001 From: "xiaojia22326@163.com" Date: Fri, 1 Feb 2019 12:05:04 +0800 Subject: [PATCH 28/28] fix:back --- lib/widgets/components/Chip/{InputChip1 => InputChip}/demo.dart | 0 lib/widgets/components/Chip/{InputChip1 => InputChip}/index.dart | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename lib/widgets/components/Chip/{InputChip1 => InputChip}/demo.dart (100%) rename lib/widgets/components/Chip/{InputChip1 => InputChip}/index.dart (100%) diff --git a/lib/widgets/components/Chip/InputChip1/demo.dart b/lib/widgets/components/Chip/InputChip/demo.dart similarity index 100% rename from lib/widgets/components/Chip/InputChip1/demo.dart rename to lib/widgets/components/Chip/InputChip/demo.dart diff --git a/lib/widgets/components/Chip/InputChip1/index.dart b/lib/widgets/components/Chip/InputChip/index.dart similarity index 100% rename from lib/widgets/components/Chip/InputChip1/index.dart rename to lib/widgets/components/Chip/InputChip/index.dart