diff --git a/.gitignore b/.gitignore index 47e0b4d6..4f66b1c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # Miscellaneous *.class -*.lock *.log *.pyc *.swp @@ -9,9 +8,18 @@ .buildlog/ .history .svn/ +*.lock +.vscode +.gradle +.idea +/local.properties +.DS_Store +/build +.metadata + # IntelliJ related -*.iml + *.ipr *.iws .idea/ @@ -26,7 +34,7 @@ .packages .pub-cache/ .pub/ -build/ +/build/ # Android related **/android/**/gradle-wrapper.jar diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index bbfd110a..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - // 使用 IntelliSense 了解相关属性。 - // 悬停以查看现有属性的描述。 - // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Flutter", - "request": "launch", - "type": "dart" - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 9a7349a6..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "editor.fontSize": 14, - -} \ No newline at end of file diff --git a/CHANGE-LOG.md b/CHANGE-LOG.md new file mode 100644 index 00000000..a625fbfe --- /dev/null +++ b/CHANGE-LOG.md @@ -0,0 +1,86 @@ +## 更新日志 + + +#### 2019-2-5 + - [x] 处理因为flutter版本导致的项目运行不起来 + - [x] 更新readme, 加入开发日志, 与相关说明 + - [x] 加入 首页欢迎效果图 + - [x] refactor(整理richText的说明): + - [x] 解决一些页面的code演示打不开的问题 + - [x] add:开发规范 + - [x] add:版本更新历史链接 + - [x] Update README.md + - [x] add:添加版本号 + - [x] feat:添加代码开发规范 + - [x] refactor(update: version & fiexed warns): + - [x] fix(solve conflict): + - [x] modify:toast and andrid apk label + - [x] Add:自动 pr 工具抓取器,抓取两周前至今的,提交数据,并去重 + - [x] fix:fluttetToast backHome + - [x] fix:modified the style of toast && remote files + - [x] chore(删除tools/log.json): + - [x] 重构文件结构 + - [x] 关于手册图标更换 + - [x] 增加demo: CupertinoNavigationBar CupertinoPageRoute CupertinoPageScaffold CupertinoPicker,CupertinoPopupSurface CupertinoTimerPickerDemo + + +#### 2019-1-24 + - [x] 功能:更新小部件的图标 + - [x] 功能:添加CupertinoTimerPickerDemo + - [x] 调试:消除警告 + - [x] 修复:关于手册图标更换 + - [x] 添加:文案描述 + - [x] 添加:CupertinoPicker,CupertinoPopupSurface +#### 2019-1-23 + - [x] 修复: 导航栏home返回报错 + - [x] 修复:收集错误 + - [x] 添加:CupertinoNavigationBar CupertinoPageRoute CupertinoPageScaffold +#### 2019-1-22 + - [x] 功能:在Allsimon拉请求中添加英文简介 +#### 2019-1-21 + - [x] 功能:Cupertino的子项 +#### 2019-1-20 + - [x] 功能:CupertinoSwitch演示 + - [x] 功能:为搜索列表加入图标 + - [x] 功能:CupertinoSliverRefreshControl演示 + - [x] 功能:CupertinoSliverNavigationBar演示 +#### 2019-1-18 + - [x] 更新:SharedPreferences保存数据和android设备布局溢出 + - [x] 功能:添加CupertinoScrollbar演示 + - [x] 功能:第四页暂时用欢迎页替代。后期再开发 +#### 2019-1-17 + - [x] 添加:+许可证 +#### 2019-1-16 + - [x] 转换:将README翻译为En语言环境 + - [x] 功能:CupertinoScrollbar演示 +#### 2019-1-14 + - [x] 添加:增加手册页面 + - [x] 功能:文字演示 + - [x] 重构:修改过的图标 + - [x] 重构:文档,文章,组件收藏,新增webView + - [x] 重构:修改过的演示 + - [x] 重构:代码视图 + - [x] 更新:版本 和readme.md + - [x] 修改:添加代码视图 + - [x] 功能:添加搜索历史记录板 + - [x] 修改:列出加标头错误 +#### 2019-1-15 + - [x] 功能:welcomepage +#### 2019-1-13 + - [x] 添加:一些输入描述 + - [x] 功能:加入GridPaper&SliverGrid + - [x] 重构:修改db + - [x] 重构:删除数据库 TabBarView + - [x] 添加:网格视图 + - [x] 修改:checkbosListTile 错误 + - [x] 修改:自动提示文案 + - [x] 功能:增加免责声明,声明组件,自动弹出,左上角入口 + - [x] 重构:整理数据库初始逻辑,判断数据库完整性,判断是否存在已知的cat,widget,collection 三张表。 + - [x] 修复:DialogDemo,无法关闭的问题 +#### 2019-1-12 + - [x] 修复:icon没有,但内容有的,组件,给补充了icon + - [x] 修改:1.整理文件 2.修正分析 + - [x] 更新:flutter_rookie_book => flutter_go + - [x] 更新:更新SearchInput文件名=> search_input + - [x] 修改:文件名称的大小写规范 + - [x] 修改:修正bottomNavigationBar iconButton警告 diff --git a/Flutter_Go 代码开发规范.md b/Flutter_Go 代码开发规范.md new file mode 100644 index 00000000..614f44b3 --- /dev/null +++ b/Flutter_Go 代码开发规范.md @@ -0,0 +1,679 @@ +# Flutter Go 代码开发规范 0.1.0 版 + +## 代码风格 + +### 标识符三种类型 + +#### 大驼峰 +类、枚举、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/README-en.md b/README-en.md new file mode 100644 index 00000000..8d12ec7a --- /dev/null +++ b/README-en.md @@ -0,0 +1,88 @@ +## Flutter Go + +![https://img.alicdn.com/tfs/TB1OJkeHNYaK1RjSZFnXXa80pXa-229-229.png](https://img.alicdn.com/tfs/TB1OJkeHNYaK1RjSZFnXXa80pXa-229-229.png) + +> Help developers get started quickly Flutter **Flutter Go 1.0 Android has been released** + + +## Download URL + +Android download URL: + + + +Iphone download URL: +No + +## Development Environment +This Project need latest package, please update regularly. + +- dart(version: 2.0.0) +- flutter(version: v1.0.0) + +### Background + +#### What is Flutter? + +On June 21, 2018, Google released the first release preview of Flutter as a new responsive, cross-platform, high-performance mobile development framework launched by Google. Flutter is a cross-platform mobile UI framework designed to help developers develop high-performance, high-fidelity Android and iOS apps using a single set of code. + +The advantages of Flutter mainly include: +- Cross-platform +- Open source +- Hot Reload, responsive framework, and its rich controls and development tools +- Flexible interface design and control combinations +- High quality user experience with a portable GPU-accelerated rendering engine and high-performance ARM code runtime + +#### The origin of Flutter Go + +- Flutter has too little learning material, which is relatively difficult for students who are not good at English. +- The official website document example is not sound enough, not intuitive enough +- The usage of each widget is different, and the properties are numerous. To run a demo of a widget, it is often necessary to look through various materials everywhere. + +#### Advantages of Flutter Go + +- Detailed idiom widgets up to **130+** +- Companion Demo Explain the widget's general usage +- Centralized integration of widget cases, an APP to get all the usage of common widgets +- Continuous iteration ‘chasing new’ official version + +### App Preview + + + + +### Core Team + + + + + + + + + + + +
+ +
+ @minghe +
+ +
+ @ryan730 +
+ +
+ @Nealyang +
+ +
+ @hanxu317317 +
+ +
+ @DeckeDeng +
+ +Powered by [Alibaba Auction Front-end Team](https://github.com/alibaba-paimai-frontend) diff --git a/README.md b/README.md index 5a7cbaaa..48d3a671 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,36 @@ +Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en.md) | [中文简体](https://github.com/alibaba/flutter-go/blob/master/README.md) ## Flutter Go -> 帮助开发者快速上手 Flutter **内部测试中,1.0 正式版将于 2月 20日 发布。** +![https://img.alicdn.com/tfs/TB1OJkeHNYaK1RjSZFnXXa80pXa-229-229.png](https://img.alicdn.com/tfs/TB1OJkeHNYaK1RjSZFnXXa80pXa-229-229.png) +> 帮助开发者快速上手 Flutter **Flutter Go 1.0 Android版已正式发布** + +## 版本更新历史 +> 按时间顺序,展示重要的提交更新内容。 + +[地址](https://github.com/alibaba/flutter-go/blob/develop/CHANGE-LOG.md) + +## 开发规范 +> 由于类似 javascript, java, object-c,等开发者的语言习惯不同而产生歧义,我们依据官方提供的 [dart 语言规范](https://www.dartlang.org) 定制。 + +[<< 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安装包下载地址 android下载地址: - + iphone下载地址: 暂无 +## 基础环境 +本项目环境持续更新. 请定期更新各依赖包. + +- dart(version: 2.0.0) +- flutter(version: v1.0.0) + + ### 背景 #### Flutter 是什么? @@ -33,14 +52,15 @@ flutter优点主要包括: #### Flutter Go 的优势 -- 详解常用widget多达 **130+** 个 +- 详解常用widget多达 **140+** 个 - 配套 Demo 详解 widget 常规用法 - 集中整合 widget 案例,一个 APP 搞定所有常用 widget 的用法 - 持续迭代 ‘追新’ 官方版本 ### app 预览 - + + ### Core Team diff --git a/android/app/build.gradle b/android/app/build.gradle index 4b2420a5..3eef3030 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -22,18 +22,23 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion 27 + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + lintOptions { disable 'InvalidPackage' } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.flutterrookiebook" + applicationId "com.ali.fluttergo" minSdkVersion 16 targetSdkVersion 27 versionCode flutterVersionCode.toInteger() @@ -55,6 +60,7 @@ flutter { } dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..6c60789b --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f33a5b45..97b1e4ee 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,28 +1,25 @@ - - - - - + package="com.ali.fluttergo"> + + + + + + android:label="fluttergo" + android:icon="@mipmap/ic_launcher_logo"> - + android:src="@mipmap/splash" /> + diff --git a/android/app/src/main/res/drawable/splash.png b/android/app/src/main/res/drawable/splash.png new file mode 100644 index 00000000..d42caece Binary files /dev/null and b/android/app/src/main/res/drawable/splash.png differ diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..02a96f05 --- /dev/null +++ b/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_logo.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_logo.png new file mode 100644 index 00000000..bb7bd02c Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_logo.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_logo.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_logo.png new file mode 100644 index 00000000..bb7bd02c Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_logo.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_logo.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_logo.png new file mode 100644 index 00000000..bb7bd02c Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_logo.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/splash.png b/android/app/src/main/res/mipmap-xhdpi/splash.png new file mode 100644 index 00000000..d42caece Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/splash.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_logo.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_logo.png new file mode 100644 index 00000000..bb7bd02c Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_logo.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_logo.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_logo.png new file mode 100644 index 00000000..bb7bd02c Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_logo.png differ diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..6c60789b --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle index e81b1a1d..01352d98 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,4 +1,5 @@ buildscript { + ext.kotlin_version = '1.2.71' repositories { google() jcenter() @@ -6,6 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.2.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/assets/app.db b/assets/app.db index 911c9dd6..70bb8d87 100644 Binary files a/assets/app.db and b/assets/app.db differ diff --git a/assets/fonts/Flamante-Roma-Medium.ttf b/assets/fonts/Flamante-Roma-Medium.ttf new file mode 100755 index 00000000..aa52ae4c Binary files /dev/null and b/assets/fonts/Flamante-Roma-Medium.ttf differ diff --git a/assets/fonts/Flamante-Roma-MediumItalic.ttf b/assets/fonts/Flamante-Roma-MediumItalic.ttf new file mode 100755 index 00000000..c9240e72 Binary files /dev/null and b/assets/fonts/Flamante-Roma-MediumItalic.ttf differ diff --git a/assets/fonts/Lato-Bold.ttf b/assets/fonts/Lato-Bold.ttf new file mode 100755 index 00000000..74343694 Binary files /dev/null and b/assets/fonts/Lato-Bold.ttf differ diff --git a/assets/images/painterImg.jpeg b/assets/images/painterImg.jpeg new file mode 100644 index 00000000..b602c1b4 Binary files /dev/null and b/assets/images/painterImg.jpeg differ diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 1fee47b7..8c3f0e89 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -7,8 +7,24 @@ objects = { /* Begin PBXBuildFile section */ + 0828E495220692B500A59437 /* iPhone Portrait-Retina 4.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E486220692B400A59437 /* iPhone Portrait-Retina 4.png */; }; + 0828E496220692B500A59437 /* iPad Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E487220692B400A59437 /* iPad Portrait.png */; }; + 0828E497220692B500A59437 /* iPhone X_XS Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E488220692B400A59437 /* iPhone X_XS Landscape.png */; }; + 0828E498220692B500A59437 /* iPhone XS Max Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E489220692B400A59437 /* iPhone XS Max Portrait.png */; }; + 0828E499220692B500A59437 /* iPhone Portrait-Retina HD 4.7.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48A220692B400A59437 /* iPhone Portrait-Retina HD 4.7.png */; }; + 0828E49A220692B500A59437 /* iPhone X_XS Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48B220692B400A59437 /* iPhone X_XS Portrait.png */; }; + 0828E49B220692B500A59437 /* iPad Landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48C220692B400A59437 /* iPad Landscape@2x.png */; }; + 0828E49C220692B500A59437 /* iPhone Landscape-Retina HD 5.5.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48D220692B400A59437 /* iPhone Landscape-Retina HD 5.5.png */; }; + 0828E49D220692B500A59437 /* iPhone Portrait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48E220692B400A59437 /* iPhone Portrait@2x.png */; }; + 0828E49E220692B500A59437 /* iPad Portrait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48F220692B400A59437 /* iPad Portrait@2x.png */; }; + 0828E49F220692B500A59437 /* iPhone XS Max Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E490220692B400A59437 /* iPhone XS Max Landscape.png */; }; + 0828E4A0220692B500A59437 /* iPad Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E491220692B500A59437 /* iPad Landscape.png */; }; + 0828E4A1220692B500A59437 /* iPhone XR Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E492220692B500A59437 /* iPhone XR Portrait.png */; }; + 0828E4A2220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E493220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png */; }; + 0828E4A3220692B500A59437 /* iPhone XR Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E494220692B500A59437 /* iPhone XR Landscape.png */; }; + 0828E4A52206936100A59437 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0828E4A42206936100A59437 /* Images.xcassets */; }; + 084A20882202E4FD00428FF5 /* flutter go.png in Resources */ = {isa = PBXBuildFile; fileRef = 084A20872202E4FD00428FF5 /* flutter go.png */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; }; 333E5DAE7FC10AC69FEC26C0 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA792F029EDD7A11295D192 /* libPods-Runner.a */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; @@ -38,9 +54,25 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0828E486220692B400A59437 /* iPhone Portrait-Retina 4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Portrait-Retina 4.png"; sourceTree = ""; }; + 0828E487220692B400A59437 /* iPad Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPad Portrait.png"; sourceTree = ""; }; + 0828E488220692B400A59437 /* iPhone X_XS Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone X_XS Landscape.png"; sourceTree = ""; }; + 0828E489220692B400A59437 /* iPhone XS Max Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone XS Max Portrait.png"; sourceTree = ""; }; + 0828E48A220692B400A59437 /* iPhone Portrait-Retina HD 4.7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Portrait-Retina HD 4.7.png"; sourceTree = ""; }; + 0828E48B220692B400A59437 /* iPhone X_XS Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone X_XS Portrait.png"; sourceTree = ""; }; + 0828E48C220692B400A59437 /* iPad Landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPad Landscape@2x.png"; sourceTree = ""; }; + 0828E48D220692B400A59437 /* iPhone Landscape-Retina HD 5.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Landscape-Retina HD 5.5.png"; sourceTree = ""; }; + 0828E48E220692B400A59437 /* iPhone Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Portrait@2x.png"; sourceTree = ""; }; + 0828E48F220692B400A59437 /* iPad Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPad Portrait@2x.png"; sourceTree = ""; }; + 0828E490220692B400A59437 /* iPhone XS Max Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone XS Max Landscape.png"; sourceTree = ""; }; + 0828E491220692B500A59437 /* iPad Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPad Landscape.png"; sourceTree = ""; }; + 0828E492220692B500A59437 /* iPhone XR Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone XR Portrait.png"; sourceTree = ""; }; + 0828E493220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Portrait-Retina HD 5.5.png"; sourceTree = ""; }; + 0828E494220692B500A59437 /* iPhone XR Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone XR Landscape.png"; sourceTree = ""; }; + 0828E4A42206936100A59437 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 084A20872202E4FD00428FF5 /* flutter go.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "flutter go.png"; sourceTree = ""; }; 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 = ""; }; - 2D5378251FAA1A9400D5DBA9 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = Flutter/flutter_assets; sourceTree = SOURCE_ROOT; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 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 = ""; }; @@ -72,6 +104,28 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0828E485220692A700A59437 /* launch */ = { + isa = PBXGroup; + children = ( + 0828E491220692B500A59437 /* iPad Landscape.png */, + 0828E48C220692B400A59437 /* iPad Landscape@2x.png */, + 0828E48F220692B400A59437 /* iPad Portrait@2x.png */, + 0828E487220692B400A59437 /* iPad Portrait.png */, + 0828E48D220692B400A59437 /* iPhone Landscape-Retina HD 5.5.png */, + 0828E486220692B400A59437 /* iPhone Portrait-Retina 4.png */, + 0828E48A220692B400A59437 /* iPhone Portrait-Retina HD 4.7.png */, + 0828E493220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png */, + 0828E48E220692B400A59437 /* iPhone Portrait@2x.png */, + 0828E488220692B400A59437 /* iPhone X_XS Landscape.png */, + 0828E48B220692B400A59437 /* iPhone X_XS Portrait.png */, + 0828E494220692B500A59437 /* iPhone XR Landscape.png */, + 0828E492220692B500A59437 /* iPhone XR Portrait.png */, + 0828E490220692B400A59437 /* iPhone XS Max Landscape.png */, + 0828E489220692B400A59437 /* iPhone XS Max Portrait.png */, + ); + path = launch; + sourceTree = ""; + }; 0C172CA58CDB230D5DA80034 /* Pods */ = { isa = PBXGroup; children = ( @@ -90,7 +144,6 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 2D5378251FAA1A9400D5DBA9 /* flutter_assets */, 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEBA1CF902C7004384FC /* Flutter.framework */, @@ -104,6 +157,8 @@ 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( + 0828E485220692A700A59437 /* launch */, + 084A20872202E4FD00428FF5 /* flutter go.png */, 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, @@ -132,6 +187,7 @@ 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 0828E4A42206936100A59437 /* Images.xcassets */, ); path = Runner; sourceTree = ""; @@ -207,11 +263,27 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 0828E4A0220692B500A59437 /* iPad Landscape.png in Resources */, + 0828E4A1220692B500A59437 /* iPhone XR Portrait.png in Resources */, + 0828E49F220692B500A59437 /* iPhone XS Max Landscape.png in Resources */, 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 0828E4A3220692B500A59437 /* iPhone XR Landscape.png in Resources */, + 0828E4A2220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png in Resources */, + 0828E49A220692B500A59437 /* iPhone X_XS Portrait.png in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 0828E49E220692B500A59437 /* iPad Portrait@2x.png in Resources */, + 0828E49D220692B500A59437 /* iPhone Portrait@2x.png in Resources */, + 0828E499220692B500A59437 /* iPhone Portrait-Retina HD 4.7.png in Resources */, + 084A20882202E4FD00428FF5 /* flutter go.png in Resources */, + 0828E497220692B500A59437 /* iPhone X_XS Landscape.png in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */, + 0828E4A52206936100A59437 /* Images.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + 0828E49B220692B500A59437 /* iPad Landscape@2x.png in Resources */, + 0828E495220692B500A59437 /* iPhone Portrait-Retina 4.png in Resources */, + 0828E498220692B500A59437 /* iPhone XS Max Portrait.png in Resources */, + 0828E496220692B500A59437 /* iPad Portrait.png in Resources */, + 0828E49C220692B500A59437 /* iPhone Landscape-Retina HD 5.5.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -237,11 +309,15 @@ buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); @@ -269,11 +345,15 @@ buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", - "${PODS_ROOT}/../.symlinks/flutter/ios-release/Flutter.framework", + "${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework", ); name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework", ); @@ -428,6 +508,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = Launch2; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = RDJKXT446D; ENABLE_BITCODE = NO; @@ -441,7 +522,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterRookieBook; + PRODUCT_BUNDLE_IDENTIFIER = com.ali.flutterRookieBook; PRODUCT_NAME = "$(TARGET_NAME)"; VERSIONING_SYSTEM = "apple-generic"; }; @@ -452,6 +533,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = Launch2; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = RDJKXT446D; ENABLE_BITCODE = NO; @@ -465,7 +547,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterRookieBook; + PRODUCT_BUNDLE_IDENTIFIER = com.ali.flutterRookieBook; PRODUCT_NAME = "$(TARGET_NAME)"; VERSIONING_SYSTEM = "apple-generic"; }; diff --git a/ios/Runner/AppDelegate.m b/ios/Runner/AppDelegate.m index 59a72e90..7feb3d13 100644 --- a/ios/Runner/AppDelegate.m +++ b/ios/Runner/AppDelegate.m @@ -7,6 +7,7 @@ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GeneratedPluginRegistrant registerWithRegistry:self]; // Override point for customization after application launch. + [NSThread sleepForTimeInterval:2]; return [super application:application didFinishLaunchingWithOptions:launchOptions]; } diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 00000000..71cc41e3 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/Contents.json b/ios/Runner/Assets.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/ios/Runner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/Image.imageset/Contents.json b/ios/Runner/Assets.xcassets/Image.imageset/Contents.json new file mode 100644 index 00000000..f8f827e4 --- /dev/null +++ b/ios/Runner/Assets.xcassets/Image.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/Contents.json b/ios/Runner/Assets.xcassets/Launch2.launchimage/Contents.json new file mode 100644 index 00000000..ca2d1f56 --- /dev/null +++ b/ios/Runner/Assets.xcassets/Launch2.launchimage/Contents.json @@ -0,0 +1,201 @@ +{ + "images" : [ + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "2688h", + "filename" : "iPhone XS Max Portrait.png", + "minimum-system-version" : "12.0", + "orientation" : "portrait", + "scale" : "3x" + }, + { + "orientation" : "landscape", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "12.0", + "subtype" : "2688h", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "1792h", + "filename" : "iPhone XR Portrait.png", + "minimum-system-version" : "12.0", + "orientation" : "portrait", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "12.0", + "subtype" : "1792h", + "scale" : "2x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "2436h", + "filename" : "iPhone X_XS Portrait.png", + "minimum-system-version" : "11.0", + "orientation" : "portrait", + "scale" : "3x" + }, + { + "orientation" : "landscape", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "11.0", + "subtype" : "2436h", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "736h", + "filename" : "iPhone Portrait-Retina HD 5.5.png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", + "scale" : "3x" + }, + { + "orientation" : "landscape", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "8.0", + "subtype" : "736h", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "667h", + "filename" : "iPhone Portrait-Retina HD 4.7.png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "filename" : "iPhone Portrait@2x.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "retina4", + "filename" : "iPhone Portrait-Retina 4.png", + "minimum-system-version" : "7.0", + "orientation" : "portrait", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "filename" : "iPad Portrait.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "filename" : "iPad Landscape.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "filename" : "iPad Portrait@2x.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "filename" : "iPad Landscape@2x.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "subtype" : "retina4", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape.png new file mode 100644 index 00000000..67d50a0e Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape@2x.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape@2x.png new file mode 100644 index 00000000..43bc74a8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape@2x.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait.png new file mode 100644 index 00000000..77b47800 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait@2x.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait@2x.png new file mode 100644 index 00000000..7ef64577 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait@2x.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina 4.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina 4.png new file mode 100644 index 00000000..71444466 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina 4.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 4.7.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 4.7.png new file mode 100644 index 00000000..4742330c Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 4.7.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 5.5.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 5.5.png new file mode 100644 index 00000000..a54e30b3 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 5.5.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait@2x.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait@2x.png new file mode 100644 index 00000000..be1234ca Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait@2x.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XR Portrait.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XR Portrait.png new file mode 100644 index 00000000..da1c3963 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XR Portrait.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XS Max Portrait.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XS Max Portrait.png new file mode 100644 index 00000000..43cbc3cc Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XS Max Portrait.png differ diff --git a/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone X_XS Portrait.png b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone X_XS Portrait.png new file mode 100644 index 00000000..d4889395 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone X_XS Portrait.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json index 0bedcf2f..c09c47c0 100644 --- a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -2,17 +2,29 @@ "images" : [ { "idiom" : "universal", - "filename" : "LaunchImage.png", + "filename" : "flutter go.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "LaunchImage@2x.png", + "filename" : "flutter go-1.png", "scale" : "2x" }, { "idiom" : "universal", - "filename" : "LaunchImage@3x.png", + "filename" : "flutter go-2.png", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x" + }, + { + "idiom" : "iphone", "scale" : "3x" } ], @@ -20,4 +32,4 @@ "version" : 1, "author" : "xcode" } -} +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-1.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-1.png new file mode 100644 index 00000000..d42caece Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-1.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-2.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-2.png new file mode 100644 index 00000000..d42caece Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-2.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go.png new file mode 100644 index 00000000..d42caece Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go.png differ diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard index f2e259c7..73c0a8c2 100644 --- a/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -1,8 +1,12 @@ - - + + + + + - + + @@ -14,24 +18,30 @@ + - + + + + + + - + - + diff --git a/ios/Runner/Images.xcassets/LaunchImage-2.launchimage/Contents.json b/ios/Runner/Images.xcassets/LaunchImage-2.launchimage/Contents.json new file mode 100644 index 00000000..5a296668 --- /dev/null +++ b/ios/Runner/Images.xcassets/LaunchImage-2.launchimage/Contents.json @@ -0,0 +1,49 @@ +{ + "images" : [ + { + "orientation" : "portrait", + "idiom" : "ipad", + "minimum-system-version" : "7.0", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "minimum-system-version" : "7.0", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "minimum-system-version" : "7.0", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "minimum-system-version" : "7.0", + "subtype" : "retina4", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "minimum-system-version" : "7.0", + "extent" : "full-screen", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 1cd5f1de..d94b59b8 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - 菜鸟App + Flutter Go CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 00000000..7335fdf9 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/ios/flutter go.png b/ios/flutter go.png new file mode 100644 index 00000000..d42caece Binary files /dev/null and b/ios/flutter go.png differ diff --git a/ios/launch/iPad Landscape.png b/ios/launch/iPad Landscape.png new file mode 100644 index 00000000..67d50a0e Binary files /dev/null and b/ios/launch/iPad Landscape.png differ diff --git a/ios/launch/iPad Landscape@2x.png b/ios/launch/iPad Landscape@2x.png new file mode 100644 index 00000000..43bc74a8 Binary files /dev/null and b/ios/launch/iPad Landscape@2x.png differ diff --git a/ios/launch/iPad Portrait.png b/ios/launch/iPad Portrait.png new file mode 100644 index 00000000..77b47800 Binary files /dev/null and b/ios/launch/iPad Portrait.png differ diff --git a/ios/launch/iPad Portrait@2x.png b/ios/launch/iPad Portrait@2x.png new file mode 100644 index 00000000..7ef64577 Binary files /dev/null and b/ios/launch/iPad Portrait@2x.png differ diff --git a/ios/launch/iPhone Landscape-Retina HD 5.5.png b/ios/launch/iPhone Landscape-Retina HD 5.5.png new file mode 100644 index 00000000..2c9ee6e5 Binary files /dev/null and b/ios/launch/iPhone Landscape-Retina HD 5.5.png differ diff --git a/ios/launch/iPhone Portrait-Retina 4.png b/ios/launch/iPhone Portrait-Retina 4.png new file mode 100644 index 00000000..71444466 Binary files /dev/null and b/ios/launch/iPhone Portrait-Retina 4.png differ diff --git a/ios/launch/iPhone Portrait-Retina HD 4.7.png b/ios/launch/iPhone Portrait-Retina HD 4.7.png new file mode 100644 index 00000000..4742330c Binary files /dev/null and b/ios/launch/iPhone Portrait-Retina HD 4.7.png differ diff --git a/ios/launch/iPhone Portrait-Retina HD 5.5.png b/ios/launch/iPhone Portrait-Retina HD 5.5.png new file mode 100644 index 00000000..a54e30b3 Binary files /dev/null and b/ios/launch/iPhone Portrait-Retina HD 5.5.png differ diff --git a/ios/launch/iPhone Portrait@2x.png b/ios/launch/iPhone Portrait@2x.png new file mode 100644 index 00000000..be1234ca Binary files /dev/null and b/ios/launch/iPhone Portrait@2x.png differ diff --git a/ios/launch/iPhone XR Landscape.png b/ios/launch/iPhone XR Landscape.png new file mode 100644 index 00000000..2b9df193 Binary files /dev/null and b/ios/launch/iPhone XR Landscape.png differ diff --git a/ios/launch/iPhone XR Portrait.png b/ios/launch/iPhone XR Portrait.png new file mode 100644 index 00000000..da1c3963 Binary files /dev/null and b/ios/launch/iPhone XR Portrait.png differ diff --git a/ios/launch/iPhone XS Max Landscape.png b/ios/launch/iPhone XS Max Landscape.png new file mode 100644 index 00000000..079621c5 Binary files /dev/null and b/ios/launch/iPhone XS Max Landscape.png differ diff --git a/ios/launch/iPhone XS Max Portrait.png b/ios/launch/iPhone XS Max Portrait.png new file mode 100644 index 00000000..43cbc3cc Binary files /dev/null and b/ios/launch/iPhone XS Max Portrait.png differ diff --git a/ios/launch/iPhone X_XS Landscape.png b/ios/launch/iPhone X_XS Landscape.png new file mode 100644 index 00000000..dd4d82f9 Binary files /dev/null and b/ios/launch/iPhone X_XS Landscape.png differ diff --git a/ios/launch/iPhone X_XS Portrait.png b/ios/launch/iPhone X_XS Portrait.png new file mode 100644 index 00000000..d4889395 Binary files /dev/null and b/ios/launch/iPhone X_XS Portrait.png differ diff --git a/lib/components/cate_card.dart b/lib/components/cate_card.dart index 24c05948..4d43c5d0 100644 --- a/lib/components/cate_card.dart +++ b/lib/components/cate_card.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; + import '../model/cat.dart'; -import '../common/widget_name_to_icon.dart'; +import '../resources/widget_name_to_icon.dart'; import '../components/widget_item_container.dart'; class CateCard extends StatefulWidget { diff --git a/lib/components/category.dart b/lib/components/category.dart new file mode 100644 index 00000000..7c6c0715 --- /dev/null +++ b/lib/components/category.dart @@ -0,0 +1,143 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import '../routers/application.dart'; +import '../model/cat.dart'; +import '../model/widget.dart'; +import '../widgets/index.dart'; +import '../components/widget_item_container.dart'; + +enum CateOrWigdet { Cat, WidgetDemo } + +class CategoryHome extends StatefulWidget { + CategoryHome(this.name); + final String name; + + @override + _CategoryHome createState() => new _CategoryHome(); +} + +class _CategoryHome extends State { + String title = ''; + // 显示列表 cat or widget; + List categories = []; + List widgetPoints = []; + List catHistory = new List(); + + CatControlModel catControl = new CatControlModel(); + WidgetControlModel widgetControl = new WidgetControlModel(); + // 所有的可用demos; + List widgetDemosList = new WidgetDemoList().getDemos(); + + @override + void initState() { + super.initState(); + // 初始化加入顶级的name + this.getCatByName(widget.name).then((Cat cat) { + catHistory.add(cat); + searchCatOrWigdet(); + }); + } + + Future getCatByName(String name) async { + return await catControl.getCatByName(name); + } + + Future back() { + if (catHistory.length == 1) { + return Future.value(true); + } + catHistory.removeLast(); + searchCatOrWigdet(); + return Future.value(false); + } + + void go(Cat cat) { + catHistory.add(cat); + searchCatOrWigdet(); + } + + void searchCatOrWigdet() async { + // 假设进入这个界面的parent一定存在 + Cat parentCat = catHistory.last; + + + // 继续搜索显示下一级depth: depth + 1, parentId: parentCat.id + List _categories = + await catControl.getList(new Cat(parentId: parentCat.id)); + List _widgetPoints = new List(); + if (_categories.isEmpty) { + _widgetPoints = + await widgetControl.getList(new WidgetPoint(catId: parentCat.id)); + } + + this.setState(() { + categories = _categories; + title = parentCat.name; + widgetPoints = _widgetPoints; + }); + } + + void onCatgoryTap(Cat cat) { + go(cat); + } + + void onWidgetTap(WidgetPoint widgetPoint) { + String targetName = widgetPoint.name; + String targetRouter = '/category/error/404'; + widgetDemosList.forEach((item) { + // print("targetRouter = item.routerName> ${[item.name,targetName]}"); + if (item.name == targetName) { + targetRouter = item.routerName; + } + }); + Application.router.navigateTo(context, "$targetRouter"); + } + + Widget _buildContent() { + WidgetItemContainer wiContaienr = WidgetItemContainer( + columnCount: 3, + categories: categories, + isWidgetPoint:false + ); + if (widgetPoints.length > 0) { + wiContaienr = WidgetItemContainer( + categories: widgetPoints, + columnCount: 3, + isWidgetPoint:true + ); + } + return Container( + padding: const EdgeInsets.only(bottom: 10.0, top: 5.0), + decoration: BoxDecoration( + color: Colors.white, + image: DecorationImage( + image: AssetImage('assets/images/paimaiLogo.png'), + alignment: Alignment.bottomRight), + ), + child: wiContaienr, + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(title), + ), + body: WillPopScope( + onWillPop: () { + return back(); + }, + child: ListView( + children: [ + _buildContent(), + ], + ), + // child: Container(color: Colors.blue,child: Text('123'),), + ), + ); + } +} + diff --git a/lib/components/disclaimer_msg.dart b/lib/components/disclaimer_msg.dart index 999056f1..78ebb0a5 100644 --- a/lib/components/disclaimer_msg.dart +++ b/lib/components/disclaimer_msg.dart @@ -1,265 +1,196 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2019/1/12 - * Time: 下午9:19 - * email: zhu.yan@alibaba-inc.com - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/12 +/// Time: 下午9:19 +/// email: zhu.yan@alibaba-inc.com + +import 'dart:async'; + import 'package:flutter/material.dart'; -//import 'package:flutter_rookie_book/model/collection_general.dart'; -//import 'package:flutter_rookie_book/model/collection_general.dart'; +import 'package:shared_preferences/shared_preferences.dart'; -const disclaimerText1 = '\r\r\r\r\r\r本APP属于个人的非赢利性开源项目,以供开源社区使用,凡本APP转载的所有的文章 、图片、音频、视频文件等资料的版权归版权所有人所有,本APP采用的非本站原创文章及图片等内容无法一一和版权者联系,如果本网所选内容的文章作者及编辑认为其作品不宜上网供大家浏览,或不应无偿使用请及时用电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。'; -const disclaimerText2 = '\n\r\r\r\r\r\r对于已经授权本APP独家使用并提供给本站资料的版权所有人的文章、图片等资料,如需转载使用,需取得本站和版权所有人的同意。本APP所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。'; - +const disclaimerText1 = + '\r\r\r\r\r\r本APP属于个人的非赢利性开源项目,以供开源社区使用,凡本APP转载的所有的文章 、图片、音频、视频文件等资料的版权归版权所有人所有,本APP采用的非本站原创文章及图片等内容无法一一和版权者联系,如果本网所选内容的文章作者及编辑认为其作品不宜上网供大家浏览,或不应无偿使用请及时用电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。'; +const disclaimerText2 = + '\n\r\r\r\r\r\r对于已经授权本APP独家使用并提供给本站资料的版权所有人的文章、图片等资料,如需转载使用,需取得本站和版权所有人的同意。本APP所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。'; class DisclaimerMsg extends StatefulWidget { final State pWidget; - DisclaimerMsg({ Key key, this.pWidget }) : super(key: key); + + DisclaimerMsg({Key key, this.pWidget}) : super(key: key); + DisclaimerMsgState createState() => DisclaimerMsgState(); } class DisclaimerMsgState extends State { + Future _prefs = SharedPreferences.getInstance(); + Future _unKnow; var _valBool = false; - var _page; - //CollectionControlModel _collectionControl = new CollectionControlModel(); - //List _collectionList = []; - // void init(BuildContext context) { - // Toast.show(context: context, message: "👉 APP免责声明",cb:showAlertDialog); - // } + var _readed = false; + + //SharedPreferences 存储结果 + void refs(bool value) async { + final SharedPreferences prefs = await _prefs; + final bool unKnow = value; + if (mounted) { + setState(() { + _unKnow = prefs.setBool("disclaimer::Boolean", unKnow).then((bool success) { + return unKnow; + }); + }); + } + } @override void initState() { super.initState(); -// _collectionList.clear(); -// _collectionControl.getAllCollection().then((resultList) { -// resultList.forEach((item) { -// _collectionList.add(item); -// print('=============db=========${item}'); -// }); -// }); - _page = widget.pWidget; - } - - - - void refs(bool value){ - if(this.mounted){ - setState(() { - _valBool=value; - _page.save(value); - }); - -// _collectionControl -// .insert(CollectionGeneral(key: 'disclaimer', values: value.toString())) -// .then((result) { -// print('result2====${result}'); -// } -// ); - } + //获取SharedPreferences 存储结果 + _unKnow = _prefs.then((SharedPreferences prefs) { + return (prefs.getBool('disclaimer::Boolean') ?? false); + }); + _unKnow.then((bool value) { + _valBool = value; + _readed = value; + }); } void showAlertDialog(BuildContext context) { -// new Future.delayed(Duration(seconds: 5)).then((value) { -// Navigator.of(context).pop(); -// }); showDialog( context: context, barrierDismissible: false, // user must tap button! builder: (BuildContext context) { return AlertDialog( //title: Text('免责声明'), - content:SingleChildScrollView( - child: ListBody( - children: [ - Container( - padding: EdgeInsets.fromLTRB(5.0, 5.0, 10.0, 10.0), - //width: 100, - height: 35, - child: Text('免责声明',style:TextStyle(fontSize: 18,fontWeight:FontWeight.w700 )), - decoration: BoxDecoration( - //color: Colors.blue, - image: DecorationImage( - fit: BoxFit.fitWidth, - image: AssetImage('assets/images/paimaiLogo.png') - ), - borderRadius: BorderRadius.all( - Radius.circular(10.0), - ), - //alignment: Alignment.bottomRight, - ) - ), - SizedBox(height:20), - Text(disclaimerText1), - Text(disclaimerText2), - ], - ), - ), - shape:RoundedRectangleBorder(borderRadius: new BorderRadius.circular(20.0)), // 圆角 - actions: [ - Container( - width: 270, - alignment: Alignment.centerLeft, - padding: new EdgeInsets.fromLTRB(0.0, 0.0, 30.0, 0.0), - child: - Row( - mainAxisAlignment:MainAxisAlignment.spaceAround, - //crossAxisAlignment:CrossAxisAlignment.start, + content: SingleChildScrollView( + child: ListBody( children: [ - Row( - mainAxisAlignment:MainAxisAlignment.center, - children: [ - Checkbox( - activeColor: Theme.of(context).primaryColor, - tristate:false, - value: _valBool, - onChanged: (bool bol) { - refs(bol); - Navigator.of(context).pop(); // here I pop to avoid multiple Dialogs - showAlertDialog(context); //here i call the same function - } - ), - Text('不再自动提示',style:TextStyle(fontSize: 14)), - ], - ), - new Flexible( - flex: 1, - child: Container(width: 100,) - ), - FlatButton( - child: Text('知道了',style:TextStyle(fontSize: 16,color: Colors.white)), - color: Theme.of(context).primaryColor, - onPressed: () { - Navigator.of(context).pop(); - }, - ), - ] -// SizedBox( -// width:150, -// height:55, -// child: CheckboxListTile( -// title: Text('不再显示',style:TextStyle(fontSize: 14)), -// controlAffinity: ListTileControlAffinity.leading, -// activeColor: Colors.red, -// value: _valBool, -// onChanged: (bool value) { -// refs(value); -// Navigator.of(context).pop(); // here I pop to avoid multiple Dialogs -// showAlertDialog(context); //here i call the same function -// } -// ) -// //secondary: const Icon(Icons.hourglass_empty), -// ), -// Checkbox( -// activeColor: Colors.red, -// tristate:false, -// value: _valBool, -// onChanged: (bool bol) { -// refs(bol); -// Navigator.of(context).pop(); // here I pop to avoid multiple Dialogs -// showAlertDialog(context); //here i call the same function -// } -// ), -// Text('不再显示',style:TextStyle(fontSize: 14)), -// FlatButton( -// child: Text('知道了',style:TextStyle(fontSize: 16,color: Colors.green)), -// onPressed: () { -// Navigator.of(context).pop(); -// }, -// ), -// ], + Container( + padding: EdgeInsets.fromLTRB(5.0, 5.0, 10.0, 10.0), + //width: 100, + height: 35, + child: Text('免责声明', + style: TextStyle( + fontSize: 18, fontWeight: FontWeight.w700)), + decoration: BoxDecoration( + //color: Colors.blue, + image: DecorationImage( + fit: BoxFit.fitWidth, + image: AssetImage('assets/images/paimaiLogo.png')), + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + //alignment: Alignment.bottomRight, + )), + SizedBox(height: 20), + Text(disclaimerText1), + Text(disclaimerText2), + ], + ), + ), + shape: RoundedRectangleBorder( + borderRadius: new BorderRadius.circular(20.0)), // 圆角 + + actions: [ + new Container( + width: 250, + child: _create(), ) - )], + ], ); }, ); } - Widget build(BuildContext context) { - return new GestureDetector( - onTap: () { - showAlertDialog(context); - }, - child: Stack( - //alignment: const Alignment(1.6, 1.6), - children: [ - new Container( - width:90.0, - alignment: Alignment.center, - decoration: new BoxDecoration( - borderRadius:new BorderRadius.horizontal(right: Radius.circular(10)), - color: Colors.black45, - ), - child: new Text( - '🔔 免责声明', - style: new TextStyle( - fontSize: 14.0, - //fontWeight: FontWeight.bold, - color: Colors.white, - ), - ), - ), - ], - ) - ); - } - Widget build2(BuildContext context) { - return Container( - padding: new EdgeInsets.all(0.0), - alignment:Alignment.centerRight, - child:FlatButton( - //padding: new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0), - child: new Text( - '👉 APP免责声明', - style: new TextStyle( - fontSize: 12.0, //textsize - color: Colors.black54, // textcolor - ), - ), - //color: Theme.of(context).accentColor, - color: Theme.of(context).accentColor, - //elevation: 0.0,//shadow - //splashColor: Colors.blueGrey, + Row _create() { + //已读 + if (_readed) { + return Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + FlatButton( + padding: EdgeInsets.symmetric(horizontal: 20.0), + child: Text('已阅读知晓', + style: TextStyle(fontSize: 16, color: Colors.white)), + //可点击 + color: Theme.of(context).primaryColor, onPressed: () { - showAlertDialog(context); - //Toast.show(context: context, message: "👉 APP免责声明",cb:showAlertDialog); - }) - ); - } -} + Navigator.of(context).pop(); + }, + ), + SizedBox( + width: 10.0, + ) + ], + ); + } -class Toast { - static void show({@required BuildContext context, @required String message,Function cb}) { - //创建一个OverlayEntry对象 - OverlayEntry overlayEntry = new OverlayEntry(builder: (context) { - return new Positioned( - top: MediaQuery.of(context).size.height * 0.12, - right:5.0, - child:RaisedButton( - padding: new EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), - child: new Text( - '👉 APP免责声明', - style: new TextStyle( - fontSize: 14.0, //textsize - color: Colors.black54, // textcolor + //第一次读取 + return Row(mainAxisAlignment: MainAxisAlignment.spaceAround, + //crossAxisAlignment:CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Checkbox( + activeColor: Theme.of(context).primaryColor, + tristate: false, + value: _valBool, + onChanged: (bool bol) { + if(mounted) { + setState(() { + _valBool = bol; + }); + } + Navigator.of(context).pop(); // here I pop to avoid multiple Dialogs + showAlertDialog(context); //here i call the same function + }), + Text('不再自动提示', style: TextStyle(fontSize: 14)), + ], + ), + FlatButton( + child: Text('知道了', + style: TextStyle(fontSize: 16, color: Colors.white)), + //可点击 + color: _valBool + ? Theme.of(context).primaryColor + : Theme.of(context).primaryColor.withAlpha(800), + onPressed: () { + // if (_valBool) { + refs(_valBool); + Navigator.of(context).pop(); + // } + }, + ), + ]); + } + + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + showAlertDialog(context); + }, + child: Stack( + //alignment: const Alignment(1.6, 1.6), + children: [ + Container( + width: 90.0, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: + BorderRadius.horizontal(right: Radius.circular(10)), + color: Colors.black45, + ), + child: Text( + '🔔 免责声明', + style: TextStyle( + fontSize: 14.0, + //fontWeight: FontWeight.bold, + color: Colors.white, ), ), - //color: Theme.of(context).accentColor, - color: Colors.red, - //elevation: 0.0,//shadow - //splashColor: Colors.blueGrey, - onPressed: () { - if(cb is Function){ - cb(context); - } - }) - ); - }); - //往Overlay中插入插入OverlayEntry - Overlay.of(context).insert(overlayEntry); - new Future.delayed(Duration(seconds: 2)).then((value) { - //overlayEntry.remove(); - }); + ), + ], + )); } -} \ No newline at end of file +} diff --git a/lib/components/full_screen_code_dialog.dart b/lib/components/full_screen_code_dialog.dart new file mode 100644 index 00000000..76147749 --- /dev/null +++ b/lib/components/full_screen_code_dialog.dart @@ -0,0 +1,81 @@ +/// @Author: 一凨 +/// @Date: 2019-01-14 11:42:32 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-14 14:42:00 + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/utils/example_code_parser.dart'; +import 'package:flutter_go/utils/syntax_highlighter.dart'; + +class FullScreenCodeDialog extends StatefulWidget { + const FullScreenCodeDialog({this.filePath}); + + final String filePath; + _FullScreenCodeDialogState createState() => _FullScreenCodeDialogState(); +} + +class _FullScreenCodeDialogState extends State { + String _exampleCode; + + @override + void didChangeDependencies() { + print('widget.filePath=======${widget.filePath}'); + getExampleCode(context,'${widget.filePath}', DefaultAssetBundle.of(context)) + .then((String code) { + if (mounted) { + setState(() { + _exampleCode = code ?? 'Example code not found'; + }); + } + }); + super.didChangeDependencies(); + } + + @override + Widget build(BuildContext context) { + final SyntaxHighlighterStyle style = + Theme.of(context).brightness == Brightness.dark + ? SyntaxHighlighterStyle.darkThemeStyle() + : SyntaxHighlighterStyle.lightThemeStyle(); + + Widget body; + if (_exampleCode == null) { + body = const Center(child: CircularProgressIndicator()); + } else { + Widget _codeWidget; + try{ + DartSyntaxHighlighter(style).format(_exampleCode); + _codeWidget = RichText( + text: TextSpan( + style: const TextStyle(fontFamily: 'monospace', fontSize: 10.0), + children: [ + DartSyntaxHighlighter(style).format(_exampleCode) + ],), + ); + }catch (err){ + _codeWidget = Text(_exampleCode); + } + body = SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: _codeWidget, + ), + ); + } + + return Scaffold( + appBar: AppBar( + leading: IconButton( + icon: const Icon( + Icons.clear, + semanticLabel: 'Close', + ), + onPressed: () { + Navigator.pop(context); + }), + title: const Text('Example code'), + ), + body: body); + } +} diff --git a/lib/components/home_banner.dart b/lib/components/home_banner.dart index 5d8cf9cd..5dd335fd 100644 --- a/lib/components/home_banner.dart +++ b/lib/components/home_banner.dart @@ -1,5 +1,7 @@ import 'dart:async'; + import 'package:flutter/material.dart'; + import '../model/story.dart'; class HomeBanner extends StatefulWidget { diff --git a/lib/components/list_refresh.dart b/lib/components/list_refresh.dart index 6a8cd00a..b4a13244 100644 --- a/lib/components/list_refresh.dart +++ b/lib/components/list_refresh.dart @@ -1,11 +1,12 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2019/1/4 - * Time: 上午1:16 - * email: zhu.yan@alibaba-inc.com - * tartget: FlatButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/4 +/// Time: 上午1:16 +/// email: zhu.yan@alibaba-inc.com +/// target: ListRefresh 的示例 + +import 'dart:async'; + import 'package:flutter/material.dart'; class ListRefresh extends StatefulWidget { @@ -40,9 +41,7 @@ class _ListRefreshState extends State { }); } - /* - * 回弹效果 - * */ +// 回弹效果 backElasticEffect() { // double edge = 50.0; // double offsetFromBottom = _scrollController.position.maxScrollExtent - _scrollController.position.pixels; @@ -54,13 +53,13 @@ class _ListRefreshState extends State { // } } - /* - * list探底,执行的具体事件 - * */ +// list探底,执行的具体事件 Future _getMoreData() async { if (!isLoading && _hasMore) { // 如果上一次异步请求数据完成 同时有数据可以加载 - setState(() => isLoading = true); + if (mounted) { + setState(() => isLoading = true); + } //if(_hasMore){ // 还有数据可以拉新 List newEntries = await mokeHttpRequest(); //if (newEntries.isEmpty) { @@ -79,9 +78,7 @@ class _ListRefreshState extends State { } } - /* - * 伪装吐出新数据 - * */ +// 伪装吐出新数据 Future mokeHttpRequest() async { if (widget.requestApi is Function) { final listObj = await widget.requestApi({'pageIndex': _pageIndex}); @@ -94,11 +91,8 @@ class _ListRefreshState extends State { }); } } - - /* - * 下拉加载的事件,清空之前list内容,取前X个 - * 其实就是列表重置 - * */ +// 下拉加载的事件,清空之前list内容,取前X个 +// 其实就是列表重置 Future _handleRefresh() async { List newEntries = await mokeHttpRequest(); if (this.mounted) { @@ -112,9 +106,7 @@ class _ListRefreshState extends State { } } - /* - * 加载中的提示 - * */ +// 加载中的提示 Widget _buildLoadText() { return Container( child: Padding( @@ -125,9 +117,7 @@ class _ListRefreshState extends State { )); } - /* - * 上提加载loading的widget,如果数据到达极限,显示没有更多 - * */ +// 上提加载loading的widget,如果数据到达极限,显示没有更多 Widget _buildProgressIndicator() { if (_hasMore) { return new Padding( diff --git a/lib/components/list_view_item.dart b/lib/components/list_view_item.dart new file mode 100644 index 00000000..c8aa682d --- /dev/null +++ b/lib/components/list_view_item.dart @@ -0,0 +1,53 @@ +/// @Author: 一凨 +/// @Date: 2019-01-14 17:53:54 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-14 17:57:51 + +import 'package:flutter/material.dart'; +import '../routers/application.dart'; +import '../routers/routers.dart'; +import 'dart:core'; + + +class ListViewItem extends StatelessWidget { + final String itemUrl; + final String itemTitle; + final String data; + + const ListViewItem({Key key, this.itemUrl, this.itemTitle, this.data}) + : super(key: key); + + + @override + Widget build(BuildContext context) { + return Card( + color: Colors.white, + elevation: 4.0, + margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 6.0), + child: ListTile( + onTap: () { + // _launchURL(itemUrl, context); + Application.router.navigateTo(context, '${Routes.webViewPage}?title=${Uri.encodeComponent(itemTitle)}&url=${Uri.encodeComponent(itemUrl)}'); + }, + title: Padding( + child: Text( + itemTitle, + style: TextStyle(color: Colors.black, fontSize: 15.0), + ), + padding: EdgeInsets.only(top: 10.0), + ), + subtitle: Row( + children: [ + Padding( + child: Text(data, + style: TextStyle(color: Colors.black54, fontSize: 10.0)), + padding: EdgeInsets.only(top: 10.0, bottom: 10.0), + ) + ], + ), + trailing: + Icon(Icons.keyboard_arrow_right, color: Colors.grey, size: 30.0), + ), + ); + } +} diff --git a/lib/components/markdown.dart b/lib/components/markdown.dart index ba7ea5d3..02cf6af7 100644 --- a/lib/components/markdown.dart +++ b/lib/components/markdown.dart @@ -1,7 +1,8 @@ import 'package:flutter_markdown/flutter_markdown.dart' as md; -import '../common/high_light_code.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_go/utils/high_light_code.dart'; + /// 使用方法 /// MarkdownBody(markdown) final hightlighter = new HighLight(); diff --git a/lib/components/pagination.dart b/lib/components/pagination.dart index 438be3fe..e7fdd379 100644 --- a/lib/components/pagination.dart +++ b/lib/components/pagination.dart @@ -3,9 +3,10 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; + import './home_banner.dart'; import '../model/story.dart'; -import 'package:url_launcher/url_launcher.dart'; class Pagination extends StatelessWidget { static final String routeName = '/material/page-selector'; diff --git a/lib/components/search_input.dart b/lib/components/search_input.dart index a62bce1e..b0abdf03 100644 --- a/lib/components/search_input.dart +++ b/lib/components/search_input.dart @@ -1,6 +1,11 @@ import 'dart:async'; + import 'package:flutter/material.dart'; +import 'package:fluro/fluro.dart'; import 'package:meta/meta.dart'; +import 'package:flutter_go/resources/widget_name_to_icon.dart'; +import 'package:flutter_go/routers/application.dart'; +import '../model/search_history.dart'; typedef String FormFieldFormatter(T v); typedef bool MaterialSearchFilter(T v, String c); @@ -18,13 +23,14 @@ class MaterialSearchResult extends StatelessWidget { this.onTap }) : super(key: key); - final T value; + final String value; final VoidCallback onTap; final String text; final IconData icon; @override Widget build(BuildContext context) { + return new InkWell( onTap: this.onTap, child: new Container( @@ -32,8 +38,8 @@ class MaterialSearchResult extends StatelessWidget { padding: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 10.0), child: new Row( children: [ - new Container(width: 30.0, child: new Icon(icon)) ?? null, - new Expanded(child: new Text(text, style: Theme.of(context).textTheme.subhead)), + new Container(width: 30.0, margin: EdgeInsets.only(right: 10), child: new Icon(icon)) ?? null, + new Expanded(child: new Text(value, style: Theme.of(context).textTheme.subhead)), new Text(text, style: Theme.of(context).textTheme.subhead) ], ), @@ -407,11 +413,9 @@ class History extends StatefulWidget { _History createState() => _History(); } -/* -* AppBar 默认的实例,有状态 -* */ +// AppBar 默认的实例,有状态 class _History extends State { - + SearchHistoryList searchHistoryList = new SearchHistoryList(); @override void initState() { @@ -422,11 +426,68 @@ class _History extends State { void dispose() { super.dispose(); } + buildChips(BuildContext context) { + List list = []; + List historyList = searchHistoryList.getList(); + print("historyList> $historyList"); + Color bgColor = Theme.of(context).primaryColor; + historyList.forEach((SearchHistory value) { + Widget icon = CircleAvatar( + backgroundColor: bgColor, + child: Text( + value.name.substring(0, 1), + style: TextStyle(color: Colors.white), + ), + ); + if (WidgetName2Icon.icons[value.name] != null) { + icon = Icon(WidgetName2Icon.icons[value.name], size: 25); + } + + list.add( + InkWell( + onTap: () { + Application.router.navigateTo(context, "${value.targetRouter}", transition: TransitionType.inFromRight); + }, + child: Chip( + avatar: icon, + label: Text("${value.name}"), + ), + ) + ); + }); + return list; + } @override Widget build(BuildContext context) { - return new Center( - child: Text('这是一个即将完善的历史记录的面板'), + List childList = buildChips(context); + if (childList.length == 0) { + return Center( + child: Text("当前历史面板为空"), + ); + } + return Column( + children: [ + Container( + alignment: Alignment.centerLeft, + padding: EdgeInsets.fromLTRB(12.0, 12, 12, 0), + child: InkWell( + onLongPress: () { + searchHistoryList.clear(); + }, + child: Text('历史搜索'), + ), + ), + Container( + padding: EdgeInsets.only(left: 10), + alignment: Alignment.topLeft, + child: Wrap( + spacing: 6.0, // gap between adjacent chips + runSpacing: 0.0, // gap between lines + children: childList + ), + ) + ], ); } } \ No newline at end of file diff --git a/lib/components/widget_demo.dart b/lib/components/widget_demo.dart new file mode 100644 index 00000000..ecdec4b4 --- /dev/null +++ b/lib/components/widget_demo.dart @@ -0,0 +1,200 @@ +/// @author Nealyang +/// 新widget详情页模板 + +import 'dart:core'; + +import 'package:flutter/material.dart'; + +import '../routers/application.dart'; +import '../routers/routers.dart'; +import '../components/markdown.dart'; +import '../model/collection.dart'; +import '../widgets/index.dart'; +import '../event/event_bus.dart'; +import '../event/event_model.dart'; + +class WidgetDemo extends StatefulWidget { + final List contentList; + final String docUrl; + final String title; + final String codeUrl; + final Widget bottomNaviBar; + + WidgetDemo( + {Key key, + @required this.title, + @required this.contentList, + @required this.codeUrl, + @required this.docUrl, + this.bottomNaviBar}) + : super(key: key); + + _WidgetDemoState createState() => _WidgetDemoState(); +} + +class _WidgetDemoState extends State { + bool _hasCollected = false; + CollectionControlModel _collectionControl = new CollectionControlModel(); + var _collectionIcons; + List widgetDemosList = new WidgetDemoList().getDemos(); + String _router = ''; + final GlobalKey _scaffoldKey = GlobalKey(); + + List _buildContent() { + List _list = [ + SizedBox( + height: 10.0, + ), + ]; + widget.contentList.forEach((item) { + if (item.runtimeType == String) { + _list.add(MarkdownBody(item)); + _list.add( + SizedBox( + height: 20.0, + ), + ); + } else { + _list.add(item); + } + }); + return _list; + } + + @override + void initState() { + super.initState(); + _collectionControl.getRouterByName(widget.title).then((list) { + widgetDemosList.forEach((item) { + if (item.name == widget.title) { + _router = item.routerName; + } + }); + if (this.mounted) { + setState(() { + _hasCollected = list.length > 0; + }); + } + }); + } + +// 点击收藏按钮 + _getCollection() { + if (_hasCollected) { + // 删除操作 + _collectionControl.deleteByName(widget.title).then((result) { + if (result > 0 && this.mounted) { + setState(() { + _hasCollected = false; + }); + _scaffoldKey.currentState + .showSnackBar(SnackBar(content: Text('已取消收藏'))); + if (ApplicationEvent.event != null) { + ApplicationEvent.event + .fire(CollectionEvent(widget.title, _router, true)); + } + return; + } + print('删除错误'); + }); + } else { + // 插入操作 + _collectionControl + .insert(Collection(name: widget.title, router: _router)) + .then((result) { + if (this.mounted) { + setState(() { + _hasCollected = true; + }); + + if (ApplicationEvent.event != null) { + ApplicationEvent.event + .fire(CollectionEvent(widget.title, _router, false)); + } + + _scaffoldKey.currentState + .showSnackBar(SnackBar(content: Text('收藏成功'))); + } + }); + } + } + + void _selectValue(value) { + if (value == 'doc') { + // _launchURL(widget.docUrl); + Application.router.navigateTo(context, + '${Routes.webViewPage}?title=${Uri.encodeComponent(widget.title)} Doc&&url=${Uri.encodeComponent(widget.docUrl)}'); + } else if (value == 'code') { + Application.router.navigateTo(context, + '${Routes.codeView}?filePath=${Uri.encodeComponent(widget.codeUrl)}'); + } + } + + @override + Widget build(BuildContext context) { + if (_hasCollected) { + _collectionIcons = Icons.favorite; + } else { + _collectionIcons = Icons.favorite_border; + } + return Scaffold( + key: _scaffoldKey, + appBar: AppBar( + title: Text(widget.title), + actions: [ + new IconButton( + tooltip: 'goBack home', + onPressed: () { + Navigator.popUntil(context, ModalRoute.withName('/')); + }, + icon: Icon(Icons.home), + ), + new IconButton( + tooltip: 'collection', + onPressed: _getCollection, + icon: Icon(_collectionIcons), + ), + PopupMenuButton( + onSelected: _selectValue, + itemBuilder: (BuildContext context) => >[ + const PopupMenuItem( + value: 'doc', + child: ListTile( + leading: Icon( + Icons.library_books, + size: 22.0, + ), + title: Text('查看文档'), + ), + ), + const PopupMenuDivider(), + const PopupMenuItem( + value: 'code', + child: ListTile( + leading: Icon( + Icons.code, + size: 22.0, + ), + title: Text('查看Demo'), + ), + ), + ], + ), + ], + ), + body: Container( + padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0), + child: ListView( + shrinkWrap: true, + padding: const EdgeInsets.all(0.0), + children: [ + Column( + children: _buildContent(), + ), + ], + ), + ), + bottomNavigationBar: + (widget.bottomNaviBar is Widget) ? widget.bottomNaviBar : null); + } +} diff --git a/lib/components/widget_item.dart b/lib/components/widget_item.dart index b13966cf..e8dd6958 100644 --- a/lib/components/widget_item.dart +++ b/lib/components/widget_item.dart @@ -1,9 +1,9 @@ -/** - * @author 一凨 - */ +/// @author 一凨 + import 'package:flutter/material.dart'; -import '../common/style.dart'; -import '../common/widget_name_to_icon.dart'; + +import 'package:flutter_go/utils/style.dart'; +import 'package:flutter_go/resources/widget_name_to_icon.dart'; String _widgetName; @@ -13,9 +13,15 @@ class WidgetItem extends StatelessWidget { final int index; //用于计算border final int totalCount; final int rowLength; + final String textSize; WidgetItem( - {this.title, this.onTap, this.index, this.totalCount, this.rowLength}); + {this.title, + this.onTap, + this.index, + this.totalCount, + this.rowLength, + this.textSize}); Border _buildBorder(context) { Border _border; @@ -64,6 +70,9 @@ class WidgetItem extends StatelessWidget { Icons.crop, ); } + final textStyle = (textSize == 'middle') + ? TextStyle(fontSize: 13.8, fontFamily: 'MediumItalic') + : TextStyle(fontSize: 16.0); return InkWell( onTap: onTap, child: Container( @@ -80,7 +89,7 @@ class WidgetItem extends StatelessWidget { SizedBox( height: 8.0, ), - Text(_widgetName), + Text(_widgetName, style: textStyle), ], ), ), diff --git a/lib/components/widget_item_container.dart b/lib/components/widget_item_container.dart index 2ddf3029..a1461857 100644 --- a/lib/components/widget_item_container.dart +++ b/lib/components/widget_item_container.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:fluro/fluro.dart'; import './widget_item.dart'; import '../routers/application.dart'; import '../widgets/index.dart'; @@ -7,6 +8,7 @@ class WidgetItemContainer extends StatelessWidget { final int columnCount; //一行几个 final List categories; final bool isWidgetPoint; + // 所有的可用demos; final List widgetDemosList = new WidgetDemoList().getDemos(); @@ -41,15 +43,16 @@ class WidgetItemContainer extends StatelessWidget { targetRouter = item.routerName; } }); - Application.router.navigateTo(context, "$targetRouter"); + Application.router.navigateTo(context, "$targetRouter", transition: TransitionType.inFromRight); } else { Application.router - .navigateTo(context, "/category/${item.name}"); + .navigateTo(context, "/category/${item.name}", transition: TransitionType.inFromRight); } }, index: addI, totalCount: length, rowLength: columnCount, + textSize: isWidgetPoint ? 'middle' : 'small', ), ), ); diff --git a/lib/event/event_bus.dart b/lib/event/event_bus.dart new file mode 100644 index 00000000..ce2123df --- /dev/null +++ b/lib/event/event_bus.dart @@ -0,0 +1,5 @@ +import 'package:event_bus/event_bus.dart'; + +class ApplicationEvent{ + static EventBus event; +} \ No newline at end of file diff --git a/lib/event/event_model.dart b/lib/event/event_model.dart new file mode 100644 index 00000000..f72f0cb6 --- /dev/null +++ b/lib/event/event_model.dart @@ -0,0 +1,7 @@ +class CollectionEvent{ + final String widgetName; + final String router; + final bool isRemove; + // token uid... + CollectionEvent(this.widgetName,this.router,this.isRemove); +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 2b14dc77..8d268d7b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,27 +1,37 @@ import 'package:flutter/material.dart'; import 'package:fluro/fluro.dart'; import 'package:flutter/rendering.dart'; - -import 'views/first_page.dart'; -import 'views/widget_page.dart'; -import 'views/fourth_page.dart'; -import 'views/collection_page.dart'; import 'routers/routers.dart'; import 'routers/application.dart'; -import 'common/provider.dart'; -import 'model/widget.dart'; -import './widgets/index.dart'; -import 'package:flutter_go/components/search_input.dart'; + +import 'package:flutter_go/utils/provider.dart'; +import 'package:flutter_go/utils/shared_preferences.dart'; +import 'package:flutter_go/views/first_page/home.dart'; +import 'package:flutter_go/model/search_history.dart'; +//import 'views/welcome_page/index.dart'; const int ThemeColor = 0xFFC91B3A; +SpUtil sp; +var db; class MyApp extends StatelessWidget { - MyApp() { + MyApp() { final router = new Router(); + Routes.configureRoutes(router); + Application.router = router; } - + showWelcomePage() { + // 暂时关掉欢迎介绍 + return AppPage(); +// bool showWelcome = sp.getBool(SharedPreferencesKeys.showWelcome); +// if (showWelcome == null || showWelcome == true) { +// return WelcomePage(); +// } else { +// return AppPage(); +// } + } @override Widget build(BuildContext context) { return new MaterialApp( @@ -39,158 +49,20 @@ class MyApp extends StatelessWidget { size: 35.0, ), ), - home: new MyHomePage(), + home: new Scaffold( + body: showWelcomePage() + ), onGenerateRoute: Application.router.generator, ); } } -var db; void main() async { final provider = new Provider(); await provider.init(true); + sp = await SpUtil.getInstance(); + new SearchHistoryList(sp); db = Provider.db; runApp(new MyApp()); } - -class MyHomePage extends StatefulWidget { - @override - State createState() { - return _MyHomePageState(); - } -} - -class _MyHomePageState extends State - with SingleTickerProviderStateMixin { - WidgetControlModel widgetControl = new WidgetControlModel(); - TabController controller; - bool isSearch = false; - String data = '无'; - String data2ThirdPage = '这是传给ThirdPage的值'; - String appBarTitle = tabData[0]['text']; - static List tabData = [ - {'text': '业界动态', 'icon': new Icon(Icons.language)}, - {'text': 'WIDGET', 'icon': new Icon(Icons.extension)}, - {'text': '组件收藏', 'icon': new Icon(Icons.star)}, - {'text': '关于手册', 'icon': new Icon(Icons.favorite)} - ]; - - List myTabs = []; - - @override - void initState() { - super.initState(); - controller = new TabController( - initialIndex: 0, vsync: this, length: 4); // 这里的length 决定有多少个底导 submenus - for (int i = 0; i < tabData.length; i++) { - myTabs.add(new Tab(text: tabData[i]['text'], icon: tabData[i]['icon'])); - } - controller.addListener(() { - if (controller.indexIsChanging) { - _onTabChange(); - } - }); - Application.controller = controller; - } - - @override - void dispose() { - controller.dispose(); - super.dispose(); - } - - void onWidgetTap(WidgetPoint widgetPoint, BuildContext context) { - List widgetDemosList = new WidgetDemoList().getDemos(); - String targetName = widgetPoint.name; - String targetRouter = '/category/error/404'; - widgetDemosList.forEach((item) { - if (item.name == targetName) { - targetRouter = item.routerName; - } - }); - Application.router.navigateTo(context, "$targetRouter"); - } - - Widget buildSearchInput(BuildContext context) { - return new SearchInput((value) async { - if (value != '') { - List list = await widgetControl.search(value); - - return list - .map((item) => new MaterialSearchResult( - value: item.name, - text: item.name, - onTap: () { - onWidgetTap(item, context); - }, - )) - .toList(); - } else { - return null; - } - }, (value) {}, () {}); - } - - @override - Widget build(BuildContext context) { - return new Scaffold( - appBar: new AppBar(title: buildSearchInput(context)), - body: new TabBarView(controller: controller, children: [ - new FirstPage(), - new WidgetPage(db), - new CollectionPage(), - new FourthPage() - ]), - bottomNavigationBar: Material( - color: const Color(0xFFF0EEEF), //底部导航栏主题颜色 - child: SafeArea( - child: Container( - height: 65.0, - decoration: BoxDecoration( - color: const Color(0xFFF0F0F0), - boxShadow: [ - BoxShadow( - color: const Color(0xFFd0d0d0), - blurRadius: 3.0, - spreadRadius: 2.0, - offset: Offset(-1.0, -1.0), - ), - ], - ), - child: TabBar( - controller: controller, - indicatorColor: Theme.of(context).primaryColor, //tab标签的下划线颜色 - // labelColor: const Color(0xFF000000), - indicatorWeight: 3.0, - labelColor: Theme.of(context).primaryColor, - unselectedLabelColor: const Color(0xFF8E8E8E), - tabs: [ - Tab(text: '业界动态', icon: Icon(Icons.language)), - Tab(text: '组件', icon: Icon(Icons.extension)), - Tab(text: '组件收藏', icon: Icon(Icons.favorite)), - Tab(text: '关于手册', icon: Icon(Icons.line_weight)), - ], - ), - ), - ), - ), - ); - } - - void _onTabChange() { - if (this.mounted) { - this.setState(() { - appBarTitle = tabData[controller.index]['text']; - }); - } - } - -// void _onDataChange(val) { -// if (this.mounted) { -// setState(() { -// data = val; -// }); -// } -// } -} diff --git a/lib/model/base.dart b/lib/model/base.dart index cff6fb06..43cb7a55 100644 --- a/lib/model/base.dart +++ b/lib/model/base.dart @@ -1,6 +1,5 @@ import 'package:sqflite/sqflite.dart'; - class BaseModel{ Database db; final String table = ''; diff --git a/lib/model/cat.dart b/lib/model/cat.dart index bf86764d..e9ecae7b 100644 --- a/lib/model/cat.dart +++ b/lib/model/cat.dart @@ -1,6 +1,7 @@ import 'dart:async'; -import '../common/sql.dart'; + +import 'package:flutter_go/utils/sql.dart'; abstract class CatInterface{ int get id; diff --git a/lib/model/collection.dart b/lib/model/collection.dart index a8d4ca5e..388fb3d8 100644 --- a/lib/model/collection.dart +++ b/lib/model/collection.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2019-01-07 16:24:42 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-08 17:37:42 - */ +/// @Author: 一凨 +/// @Date: 2019-01-07 16:24:42 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-08 17:37:42 + import 'dart:async'; -import '../common/sql.dart'; + +import 'package:flutter_go/utils/sql.dart'; abstract class CollectionInterface { String get name; diff --git a/lib/model/search_history.dart b/lib/model/search_history.dart new file mode 100644 index 00000000..da2e4cdd --- /dev/null +++ b/lib/model/search_history.dart @@ -0,0 +1,101 @@ +/// +/// Created with Android Studio. +/// User: 三帆 +/// Date: 18/02/2019 +/// Time: 14:19 +/// email: sanfan.hx@alibaba-inc.com +/// target: 搜索WidgetDemo中的历史记录model +/// + +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter_go/utils/shared_preferences.dart'; + + +class SearchHistory { + final String name; + final String targetRouter; + + SearchHistory({@required this.name, @required this.targetRouter}); +} + +class SearchHistoryList { + static SpUtil _sp; + static SearchHistoryList _instance; + static List _searchHistoryList = []; + + static SearchHistoryList _getInstance(SpUtil sp) { + if (_instance == null) { + _sp = sp; + String json = sp.get(SharedPreferencesKeys.searchHistory); + _instance = new SearchHistoryList.fromJSON(json); + } + return _instance; + } + + factory SearchHistoryList([SpUtil sp]) { + if (sp == null && _instance == null) { + print(new ArgumentError( + ['SearchHistoryList need instantiatied SpUtil at first timte '])); + } + return _getInstance(sp); + } + +// List _searchHistoryList = []; + + // 存放的最大数量 + int _count = 10; + + SearchHistoryList.fromJSON(String jsonData) { + _searchHistoryList = []; + if (jsonData == null) { + return; + } + List jsonList = json.decode(jsonData); + jsonList.forEach((value) { + _searchHistoryList.add(SearchHistory( + name: value['name'], targetRouter: value['targetRouter'])); + }); + } + + List getList() { + return _searchHistoryList; + } + + clear() { + _sp.remove(SharedPreferencesKeys.searchHistory); + _searchHistoryList = []; + } + + save() { + _sp.putString(SharedPreferencesKeys.searchHistory, this.toJson()); + } + + add(SearchHistory item) { + print("_searchHistoryList> ${_searchHistoryList.length}"); + for (SearchHistory value in _searchHistoryList) { + if (value.name == item.name) { + return; + } + } + if (_searchHistoryList.length > _count) { + _searchHistoryList.removeAt(0); + } + _searchHistoryList.add(item); + save(); + } + + toJson() { + List> jsonList = []; + _searchHistoryList.forEach((SearchHistory value) { + jsonList.add({'name': value.name, 'targetRouter': value.targetRouter}); + }); + return json.encode(jsonList); + } + + @override + String toString() { + return this.toJson(); + } +} diff --git a/lib/model/widget.dart b/lib/model/widget.dart index db9afcc4..bcc6ae7f 100644 --- a/lib/model/widget.dart +++ b/lib/model/widget.dart @@ -1,8 +1,10 @@ import 'dart:async'; -import '../common/sql.dart'; + import "package:flutter/material.dart"; +import 'package:flutter_go/utils/sql.dart'; + abstract class WidgetInterface { int get id; diff --git a/lib/resources/icon_names.dart b/lib/resources/icon_names.dart new file mode 100644 index 00000000..e7562778 --- /dev/null +++ b/lib/resources/icon_names.dart @@ -0,0 +1,17 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/23 +/// Time: 上午2:14 +/// email: zhu.yan@alibaba-inc.com +/// target: IconNames 的示例 + +import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart'; + +class IconNames { + static List names = [Icons.ac_unit,Icons.access_alarm,Icons.access_alarms,Icons.access_time,Icons.accessibility,Icons.accessibility_new,Icons.accessible,Icons.accessible_forward,Icons.account_balance,Icons.account_balance_wallet,Icons.account_box,Icons.account_circle,Icons.adb,Icons.add,Icons.add_a_photo,Icons.add_alarm,Icons.add_alert,Icons.add_box,Icons.add_call,Icons.add_circle,Icons.add_circle_outline,Icons.add_comment,Icons.add_location,Icons.add_photo_alternate,Icons.add_shopping_cart,Icons.add_to_home_screen,Icons.add_to_photos,Icons.add_to_queue,Icons.adjust,Icons.airline_seat_flat,Icons.airline_seat_flat_angled,Icons.airline_seat_individual_suite,Icons.airline_seat_legroom_extra,Icons.airline_seat_legroom_normal,Icons.airline_seat_legroom_reduced,Icons.airline_seat_recline_extra,Icons.airline_seat_recline_normal,Icons.airplanemode_active,Icons.airplanemode_inactive,Icons.airplay,Icons.airport_shuttle,Icons.alarm,Icons.alarm_add,Icons.alarm_off,Icons.alarm_on,Icons.album,Icons.all_inclusive,Icons.all_out,Icons.alternate_email,Icons.android,Icons.announcement,Icons.apps,Icons.archive,Icons.arrow_back,Icons.arrow_back_ios,Icons.arrow_downward,Icons.arrow_drop_down,Icons.arrow_drop_down_circle,Icons.arrow_drop_up,Icons.arrow_forward,Icons.arrow_forward_ios,Icons.arrow_left,Icons.arrow_right,Icons.arrow_upward,Icons.art_track,Icons.aspect_ratio,Icons.assessment,Icons.assignment,Icons.assignment_ind,Icons.assignment_late,Icons.assignment_return,Icons.assignment_returned,Icons.assignment_turned_in,Icons.assistant,Icons.assistant_photo,Icons.atm,Icons.attach_file,Icons.attach_money,Icons.attachment,Icons.audiotrack,Icons.autorenew,Icons.av_timer,Icons.backspace,Icons.backup,Icons.battery_alert,Icons.battery_charging_full,Icons.battery_full,Icons.battery_std,Icons.battery_unknown,Icons.beach_access,Icons.beenhere,Icons.block,Icons.bluetooth,Icons.bluetooth_audio,Icons.bluetooth_connected,Icons.bluetooth_disabled,Icons.bluetooth_searching,Icons.blur_circular,Icons.blur_linear,Icons.blur_off,Icons.blur_on,Icons.book,Icons.bookmark,Icons.bookmark_border,Icons.border_all,Icons.border_bottom,Icons.border_clear,Icons.border_color,Icons.border_horizontal,Icons.border_inner,Icons.border_left,Icons.border_outer,Icons.border_right,Icons.border_style,Icons.border_top,Icons.border_vertical,Icons.branding_watermark,Icons.brightness_1,Icons.brightness_2,Icons.brightness_3,Icons.brightness_4,Icons.brightness_5,Icons.brightness_6,Icons.brightness_7,Icons.brightness_auto,Icons.brightness_high,Icons.brightness_low,Icons.brightness_medium,Icons.broken_image,Icons.brush,Icons.bubble_chart,Icons.bug_report,Icons.build,Icons.burst_mode,Icons.business,Icons.business_center,Icons.cached,Icons.cake,Icons.calendar_today,Icons.calendar_view_day,Icons.call,Icons.call_end,Icons.call_made,Icons.call_merge,Icons.call_missed,Icons.call_missed_outgoing,Icons.call_received,Icons.call_split,Icons.call_to_action,Icons.camera,Icons.camera_alt,Icons.camera_enhance,Icons.camera_front,Icons.camera_rear,Icons.camera_roll,Icons.cancel,Icons.card_giftcard,Icons.card_membership,Icons.card_travel,Icons.casino,Icons.cast,Icons.cast_connected,Icons.category,Icons.center_focus_strong,Icons.center_focus_weak,Icons.change_history,Icons.chat,Icons.chat_bubble,Icons.chat_bubble_outline,Icons.check,Icons.check_box,Icons.check_box_outline_blank,Icons.check_circle,Icons.check_circle_outline,Icons.chevron_left,Icons.chevron_right,Icons.child_care,Icons.child_friendly,Icons.chrome_reader_mode,Icons.class_,Icons.clear,Icons.clear_all,Icons.close,Icons.closed_caption,Icons.cloud,Icons.cloud_circle,Icons.cloud_done,Icons.cloud_download,Icons.cloud_off,Icons.cloud_queue,Icons.cloud_upload,Icons.code,Icons.collections,Icons.collections_bookmark,Icons.color_lens,Icons.colorize,Icons.comment,Icons.compare,Icons.compare_arrows,Icons.computer,Icons.confirmation_number,Icons.contact_mail,Icons.contact_phone,Icons.contacts,Icons.content_copy,Icons.content_cut,Icons.content_paste,Icons.control_point,Icons.control_point_duplicate,Icons.copyright,Icons.create,Icons.create_new_folder,Icons.credit_card,Icons.crop,Icons.crop_3_2,Icons.crop_5_4,Icons.crop_7_5,Icons.crop_16_9,Icons.crop_din,Icons.crop_free,Icons.crop_landscape,Icons.crop_original,Icons.crop_portrait,Icons.crop_rotate,Icons.crop_square,Icons.dashboard,Icons.data_usage,Icons.date_range,Icons.dehaze,Icons.delete,Icons.delete_forever,Icons.delete_outline,Icons.delete_sweep,Icons.departure_board,Icons.description,Icons.desktop_mac,Icons.desktop_windows,Icons.details,Icons.developer_board,Icons.developer_mode,Icons.device_hub,Icons.device_unknown,Icons.devices,Icons.devices_other,Icons.dialer_sip,Icons.dialpad,Icons.directions,Icons.directions_bike,Icons.directions_boat,Icons.directions_bus,Icons.directions_car,Icons.directions_railway,Icons.directions_run,Icons.directions_subway,Icons.directions_transit,Icons.directions_walk,Icons.disc_full,Icons.dns,Icons.do_not_disturb,Icons.do_not_disturb_alt,Icons.do_not_disturb_off,Icons.do_not_disturb_on,Icons.dock,Icons.domain,Icons.done,Icons.done_all,Icons.done_outline,Icons.donut_large,Icons.donut_small,Icons.drafts,Icons.drag_handle,Icons.drive_eta,Icons.dvr,Icons.edit,Icons.edit_attributes,Icons.edit_location,Icons.eject,Icons.email,Icons.enhanced_encryption,Icons.equalizer,Icons.error,Icons.error_outline,Icons.euro_symbol,Icons.ev_station,Icons.event,Icons.event_available,Icons.event_busy,Icons.event_note,Icons.event_seat,Icons.exit_to_app,Icons.expand_less,Icons.expand_more,Icons.explicit,Icons.explore,Icons.exposure,Icons.exposure_neg_1,Icons.exposure_neg_2,Icons.exposure_plus_1,Icons.exposure_plus_2,Icons.exposure_zero,Icons.extension,Icons.face,Icons.fast_forward,Icons.fast_rewind,Icons.fastfood,Icons.favorite,Icons.favorite_border,Icons.featured_play_list,Icons.featured_video,Icons.feedback,Icons.fiber_dvr,Icons.fiber_manual_record,Icons.fiber_new,Icons.fiber_pin,Icons.fiber_smart_record,Icons.file_download,Icons.file_upload,Icons.filter,Icons.filter_1,Icons.filter_2,Icons.filter_3,Icons.filter_4,Icons.filter_5,Icons.filter_6,Icons.filter_7,Icons.filter_8,Icons.filter_9,Icons.filter_9_plus,Icons.filter_b_and_w,Icons.filter_center_focus,Icons.filter_drama,Icons.filter_frames,Icons.filter_hdr,Icons.filter_list,Icons.filter_none,Icons.filter_tilt_shift,Icons.filter_vintage,Icons.find_in_page,Icons.find_replace,Icons.fingerprint,Icons.first_page,Icons.fitness_center,Icons.flag,Icons.flare,Icons.flash_auto,Icons.flash_off,Icons.flash_on,Icons.flight,Icons.flight_land,Icons.flight_takeoff,Icons.flip,Icons.flip_to_back,Icons.flip_to_front,Icons.folder,Icons.folder_open,Icons.folder_shared,Icons.folder_special,Icons.font_download,Icons.format_align_center,Icons.format_align_justify,Icons.format_align_left,Icons.format_align_right,Icons.format_bold,Icons.format_clear,Icons.format_color_fill,Icons.format_color_reset,Icons.format_color_text,Icons.format_indent_decrease,Icons.format_indent_increase,Icons.format_italic,Icons.format_line_spacing,Icons.format_list_bulleted,Icons.format_list_numbered,Icons.format_list_numbered_rtl,Icons.format_paint,Icons.format_quote,Icons.format_shapes,Icons.format_size,Icons.format_strikethrough,Icons.format_textdirection_l_to_r,Icons.format_textdirection_r_to_l,Icons.format_underlined,Icons.forum,Icons.forward,Icons.forward_5,Icons.forward_10,Icons.forward_30,Icons.four_k,Icons.free_breakfast,Icons.fullscreen,Icons.fullscreen_exit,Icons.functions,Icons.g_translate,Icons.gamepad,Icons.games,Icons.gavel,Icons.gesture,Icons.get_app,Icons.gif,Icons.golf_course,Icons.gps_fixed,Icons.gps_not_fixed,Icons.gps_off,Icons.grade,Icons.gradient,Icons.grain,Icons.graphic_eq,Icons.grid_off,Icons.grid_on,Icons.group,Icons.group_add,Icons.group_work,Icons.hd,Icons.hdr_off,Icons.hdr_on,Icons.hdr_strong,Icons.hdr_weak,Icons.headset,Icons.headset_mic,Icons.headset_off,Icons.healing,Icons.hearing,Icons.help,Icons.help_outline,Icons.high_quality,Icons.highlight,Icons.highlight_off,Icons.history,Icons.home,Icons.hot_tub,Icons.hotel,Icons.hourglass_empty,Icons.hourglass_full,Icons.http,Icons.https,Icons.image,Icons.image_aspect_ratio,Icons.import_contacts,Icons.import_export,Icons.important_devices,Icons.inbox,Icons.indeterminate_check_box,Icons.info,Icons.info_outline,Icons.input,Icons.insert_chart,Icons.insert_comment,Icons.insert_drive_file,Icons.insert_emoticon,Icons.insert_invitation,Icons.insert_link,Icons.insert_photo,Icons.invert_colors,Icons.invert_colors_off,Icons.iso,Icons.keyboard,Icons.keyboard_arrow_down,Icons.keyboard_arrow_left,Icons.keyboard_arrow_right,Icons.keyboard_arrow_up,Icons.keyboard_backspace,Icons.keyboard_capslock,Icons.keyboard_hide,Icons.keyboard_return,Icons.keyboard_tab,Icons.keyboard_voice,Icons.kitchen,Icons.label,Icons.label_important,Icons.label_outline,Icons.landscape,Icons.language,Icons.laptop,Icons.laptop_chromebook,Icons.laptop_mac,Icons.laptop_windows,Icons.last_page,Icons.launch,Icons.layers,Icons.layers_clear,Icons.leak_add,Icons.leak_remove,Icons.lens,Icons.library_add,Icons.library_books,Icons.library_music,Icons.lightbulb_outline,Icons.line_style,Icons.line_weight,Icons.linear_scale,Icons.link,Icons.link_off,Icons.linked_camera,Icons.list,Icons.live_help,Icons.live_tv,Icons.local_activity,Icons.local_airport,Icons.local_atm,Icons.local_bar,Icons.local_cafe,Icons.local_car_wash,Icons.local_convenience_store,Icons.local_dining,Icons.local_drink,Icons.local_florist,Icons.local_gas_station,Icons.local_grocery_store,Icons.local_hospital,Icons.local_hotel,Icons.local_laundry_service,Icons.local_library,Icons.local_mall,Icons.local_movies,Icons.local_offer,Icons.local_parking,Icons.local_pharmacy,Icons.local_phone,Icons.local_pizza,Icons.local_play,Icons.local_post_office,Icons.local_printshop,Icons.local_see,Icons.local_shipping,Icons.local_taxi,Icons.location_city,Icons.location_disabled,Icons.location_off,Icons.location_on,Icons.location_searching,Icons.lock,Icons.lock_open,Icons.lock_outline,Icons.looks,Icons.looks_3,Icons.looks_4,Icons.looks_5,Icons.looks_6,Icons.looks_one,Icons.looks_two,Icons.loop,Icons.loupe,Icons.low_priority,Icons.loyalty,Icons.mail,Icons.mail_outline,Icons.map,Icons.markunread,Icons.markunread_mailbox,Icons.maximize,Icons.memory,Icons.menu,Icons.merge_type,Icons.message,Icons.mic,Icons.mic_none,Icons.mic_off,Icons.minimize,Icons.missed_video_call,Icons.mms,Icons.mobile_screen_share,Icons.mode_comment,Icons.mode_edit,Icons.monetization_on,Icons.money_off,Icons.monochrome_photos,Icons.mood,Icons.mood_bad,Icons.more,Icons.more_horiz,Icons.more_vert,Icons.motorcycle,Icons.mouse,Icons.move_to_inbox,Icons.movie,Icons.movie_creation,Icons.movie_filter,Icons.multiline_chart,Icons.music_note,Icons.music_video,Icons.my_location,Icons.nature,Icons.nature_people,Icons.navigate_before,Icons.navigate_next,Icons.navigation,Icons.near_me,Icons.network_cell,Icons.network_check,Icons.network_locked,Icons.network_wifi,Icons.new_releases,Icons.next_week,Icons.nfc,Icons.no_encryption,Icons.no_sim,Icons.not_interested,Icons.not_listed_location,Icons.note,Icons.note_add,Icons.notification_important,Icons.notifications,Icons.notifications_active,Icons.notifications_none,Icons.notifications_off,Icons.notifications_paused,Icons.offline_bolt,Icons.offline_pin,Icons.ondemand_video,Icons.opacity,Icons.open_in_browser,Icons.open_in_new,Icons.open_with,Icons.outlined_flag,Icons.pages,Icons.pageview,Icons.palette,Icons.pan_tool,Icons.panorama,Icons.panorama_fish_eye,Icons.panorama_horizontal,Icons.panorama_vertical,Icons.panorama_wide_angle,Icons.party_mode,Icons.pause,Icons.pause_circle_filled,Icons.pause_circle_outline,Icons.payment,Icons.people,Icons.people_outline,Icons.perm_camera_mic,Icons.perm_contact_calendar,Icons.perm_data_setting,Icons.perm_device_information,Icons.perm_identity,Icons.perm_media,Icons.perm_phone_msg,Icons.perm_scan_wifi,Icons.person,Icons.person_add,Icons.person_outline,Icons.person_pin,Icons.person_pin_circle,Icons.personal_video,Icons.pets,Icons.phone,Icons.phone_android,Icons.phone_bluetooth_speaker,Icons.phone_forwarded,Icons.phone_in_talk,Icons.phone_iphone,Icons.phone_locked,Icons.phone_missed,Icons.phone_paused,Icons.phonelink,Icons.phonelink_erase,Icons.phonelink_lock,Icons.phonelink_off,Icons.phonelink_ring,Icons.phonelink_setup,Icons.photo,Icons.photo_album,Icons.photo_camera,Icons.photo_filter,Icons.photo_library,Icons.photo_size_select_actual,Icons.photo_size_select_large,Icons.photo_size_select_small,Icons.picture_as_pdf,Icons.picture_in_picture,Icons.picture_in_picture_alt,Icons.pie_chart,Icons.pie_chart_outlined,Icons.pin_drop,Icons.place,Icons.play_arrow,Icons.play_circle_filled,Icons.play_circle_outline,Icons.play_for_work,Icons.playlist_add,Icons.playlist_add_check,Icons.playlist_play,Icons.plus_one,Icons.poll,Icons.polymer,Icons.pool,Icons.portable_wifi_off,Icons.portrait,Icons.power,Icons.power_input,Icons.power_settings_new,Icons.pregnant_woman,Icons.present_to_all,Icons.print,Icons.priority_high,Icons.public,Icons.publish,Icons.query_builder,Icons.question_answer,Icons.queue,Icons.queue_music,Icons.queue_play_next,Icons.radio,Icons.radio_button_checked,Icons.radio_button_unchecked,Icons.rate_review,Icons.receipt,Icons.recent_actors,Icons.record_voice_over,Icons.redeem,Icons.redo,Icons.refresh,Icons.remove,Icons.remove_circle,Icons.remove_circle_outline,Icons.remove_from_queue,Icons.remove_red_eye,Icons.remove_shopping_cart,Icons.reorder,Icons.repeat,Icons.repeat_one,Icons.replay,Icons.replay_5,Icons.replay_10,Icons.replay_30,Icons.reply,Icons.reply_all,Icons.report,Icons.report_off,Icons.report_problem,Icons.restaurant,Icons.restaurant_menu,Icons.restore,Icons.restore_from_trash,Icons.restore_page,Icons.ring_volume,Icons.room,Icons.room_service,Icons.rotate_90_degrees_ccw,Icons.rotate_left,Icons.rotate_right,Icons.rounded_corner,Icons.router,Icons.rowing,Icons.rss_feed,Icons.rv_hookup,Icons.satellite,Icons.save,Icons.save_alt,Icons.scanner,Icons.scatter_plot,Icons.schedule,Icons.school,Icons.score,Icons.screen_lock_landscape,Icons.screen_lock_portrait,Icons.screen_lock_rotation,Icons.screen_rotation,Icons.screen_share,Icons.sd_card,Icons.sd_storage,Icons.search,Icons.security,Icons.select_all,Icons.send,Icons.sentiment_dissatisfied,Icons.sentiment_neutral,Icons.sentiment_satisfied,Icons.sentiment_very_dissatisfied,Icons.sentiment_very_satisfied,Icons.settings,Icons.settings_applications,Icons.settings_backup_restore,Icons.settings_bluetooth,Icons.settings_brightness,Icons.settings_cell,Icons.settings_ethernet,Icons.settings_input_antenna,Icons.settings_input_component,Icons.settings_input_composite,Icons.settings_input_hdmi,Icons.settings_input_svideo,Icons.settings_overscan,Icons.settings_phone,Icons.settings_power,Icons.settings_remote,Icons.settings_system_daydream,Icons.settings_voice,Icons.share,Icons.shop,Icons.shop_two,Icons.shopping_basket,Icons.shopping_cart,Icons.short_text,Icons.show_chart,Icons.shuffle,Icons.shutter_speed,Icons.signal_cellular_4_bar,Icons.signal_cellular_connected_no_internet_4_bar,Icons.signal_cellular_no_sim,Icons.signal_cellular_null,Icons.signal_cellular_off,Icons.signal_wifi_4_bar,Icons.signal_wifi_4_bar_lock,Icons.signal_wifi_off,Icons.sim_card,Icons.sim_card_alert,Icons.skip_next,Icons.skip_previous,Icons.slideshow,Icons.slow_motion_video,Icons.smartphone,Icons.smoke_free,Icons.smoking_rooms,Icons.sms,Icons.sms_failed,Icons.snooze,Icons.sort,Icons.sort_by_alpha,Icons.spa,Icons.space_bar,Icons.speaker,Icons.speaker_group,Icons.speaker_notes,Icons.speaker_notes_off,Icons.speaker_phone,Icons.spellcheck,Icons.star,Icons.star_border,Icons.star_half,Icons.stars,Icons.stay_current_landscape,Icons.stay_current_portrait,Icons.stay_primary_landscape,Icons.stay_primary_portrait,Icons.stop,Icons.stop_screen_share,Icons.storage,Icons.store,Icons.store_mall_directory,Icons.straighten,Icons.streetview,Icons.strikethrough_s,Icons.style,Icons.subdirectory_arrow_left,Icons.subdirectory_arrow_right,Icons.subject,Icons.subscriptions,Icons.subtitles,Icons.subway,Icons.supervised_user_circle,Icons.supervisor_account,Icons.surround_sound,Icons.swap_calls,Icons.swap_horiz,Icons.swap_horizontal_circle,Icons.swap_vert,Icons.swap_vertical_circle,Icons.switch_camera,Icons.switch_video,Icons.sync,Icons.sync_disabled,Icons.sync_problem,Icons.system_update,Icons.system_update_alt,Icons.tab,Icons.tab_unselected,Icons.table_chart,Icons.tablet,Icons.tablet_android,Icons.tablet_mac,Icons.tag_faces,Icons.tap_and_play,Icons.terrain,Icons.text_fields,Icons.text_format,Icons.text_rotate_up,Icons.text_rotate_vertical,Icons.text_rotation_angledown,Icons.text_rotation_angleup,Icons.text_rotation_down,Icons.text_rotation_none,Icons.textsms,Icons.texture,Icons.theaters,Icons.threed_rotation,Icons.threesixty,Icons.thumb_down,Icons.thumb_up,Icons.thumbs_up_down,Icons.time_to_leave,Icons.timelapse,Icons.timeline,Icons.timer,Icons.timer_3,Icons.timer_10,Icons.timer_off,Icons.title,Icons.toc,Icons.today,Icons.toll,Icons.tonality,Icons.touch_app,Icons.toys,Icons.track_changes,Icons.traffic,Icons.train,Icons.tram,Icons.transfer_within_a_station,Icons.transform,Icons.transit_enterexit,Icons.translate,Icons.trending_down,Icons.trending_flat,Icons.trending_up,Icons.trip_origin,Icons.tune,Icons.turned_in,Icons.turned_in_not,Icons.tv,Icons.unarchive,Icons.undo,Icons.unfold_less,Icons.unfold_more,Icons.update,Icons.usb,Icons.verified_user,Icons.vertical_align_bottom,Icons.vertical_align_center,Icons.vertical_align_top,Icons.vibration,Icons.video_call,Icons.video_label,Icons.video_library,Icons.videocam,Icons.videocam_off,Icons.videogame_asset,Icons.view_agenda,Icons.view_array,Icons.view_carousel,Icons.view_column,Icons.view_comfy,Icons.view_compact,Icons.view_day,Icons.view_headline,Icons.view_list,Icons.view_module,Icons.view_quilt,Icons.view_stream,Icons.view_week,Icons.vignette,Icons.visibility,Icons.visibility_off,Icons.voice_chat,Icons.voicemail,Icons.volume_down,Icons.volume_mute,Icons.volume_off,Icons.volume_up,Icons.vpn_key,Icons.vpn_lock,Icons.wallpaper,Icons.warning,Icons.watch,Icons.watch_later,Icons.wb_auto,Icons.wb_cloudy,Icons.wb_incandescent,Icons.wb_iridescent,Icons.wb_sunny,Icons.wc,Icons.web,Icons.web_asset,Icons.weekend,Icons.whatshot,Icons.widgets,Icons.wifi,Icons.wifi_lock,Icons.wifi_tethering,Icons.work,Icons.wrap_text,Icons.youtube_searched_for,Icons.zoom_in,Icons.zoom_out,Icons.zoom_out_map]; +} + +class CupertinoIIconNames { + static List names = [CupertinoIcons.add,CupertinoIcons.add_circled,CupertinoIcons.add_circled_solid,CupertinoIcons.back,CupertinoIcons.battery_25_percent,CupertinoIcons.battery_75_percent,CupertinoIcons.battery_charging,CupertinoIcons.battery_empty,CupertinoIcons.battery_full,CupertinoIcons.bluetooth,CupertinoIcons.book,CupertinoIcons.book_solid,CupertinoIcons.bookmark,CupertinoIcons.bookmark_solid,CupertinoIcons.check_mark,CupertinoIcons.check_mark_circled,CupertinoIcons.check_mark_circled_solid,CupertinoIcons.clear,CupertinoIcons.clear_circled,CupertinoIcons.clear_circled_solid,CupertinoIcons.clear_thick,CupertinoIcons.clear_thick_circled,CupertinoIcons.clock,CupertinoIcons.clock_solid,CupertinoIcons.collections,CupertinoIcons.collections_solid,CupertinoIcons.conversation_bubble,CupertinoIcons.create,CupertinoIcons.create_solid,CupertinoIcons.delete,CupertinoIcons.delete_simple,CupertinoIcons.delete_solid,CupertinoIcons.down_arrow,CupertinoIcons.ellipsis,CupertinoIcons.eye,CupertinoIcons.eye_solid,CupertinoIcons.flag,CupertinoIcons.folder,CupertinoIcons.folder_open,CupertinoIcons.folder_solid,CupertinoIcons.forward,CupertinoIcons.fullscreen,CupertinoIcons.fullscreen_exit,CupertinoIcons.gear,CupertinoIcons.gear_big,CupertinoIcons.gear_solid,CupertinoIcons.group,CupertinoIcons.group_solid,CupertinoIcons.home,CupertinoIcons.info,CupertinoIcons.left_chevron,CupertinoIcons.location,CupertinoIcons.location_solid,CupertinoIcons.loop,CupertinoIcons.loop_thick,CupertinoIcons.mail,CupertinoIcons.mail_solid,CupertinoIcons.mic,CupertinoIcons.mic_off,CupertinoIcons.mic_solid,CupertinoIcons.minus_circled,CupertinoIcons.music_note,CupertinoIcons.padlock,CupertinoIcons.padlock_solid,CupertinoIcons.pause,CupertinoIcons.pause_solid,CupertinoIcons.pen,CupertinoIcons.pencil,CupertinoIcons.person,CupertinoIcons.person_add,CupertinoIcons.person_add_solid,CupertinoIcons.person_solid,CupertinoIcons.phone,CupertinoIcons.phone_solid,CupertinoIcons.photo_camera,CupertinoIcons.photo_camera_solid,CupertinoIcons.play_arrow,CupertinoIcons.play_arrow_solid,CupertinoIcons.plus_circled,CupertinoIcons.profile_circled,CupertinoIcons.refresh,CupertinoIcons.refresh_bold,CupertinoIcons.refresh_circled,CupertinoIcons.refresh_circled_solid,CupertinoIcons.refresh_thick,CupertinoIcons.refresh_thin,CupertinoIcons.reply,CupertinoIcons.reply_all,CupertinoIcons.reply_thick_solid,CupertinoIcons.restart,CupertinoIcons.right_chevron,CupertinoIcons.search,CupertinoIcons.settings,CupertinoIcons.settings_solid,CupertinoIcons.share,CupertinoIcons.share_solid,CupertinoIcons.share_up,CupertinoIcons.shopping_cart,CupertinoIcons.shuffle_thick,CupertinoIcons.switch_camera,CupertinoIcons.switch_camera_solid,CupertinoIcons.tag,CupertinoIcons.tag_solid,CupertinoIcons.tags,CupertinoIcons.tags_solid,CupertinoIcons.time,CupertinoIcons.time_solid,CupertinoIcons.up_arrow,CupertinoIcons.video_camera,CupertinoIcons.video_camera_solid,CupertinoIcons.volume_down,CupertinoIcons.volume_mute,CupertinoIcons.volume_off,CupertinoIcons.volume_up]; +} \ No newline at end of file diff --git a/lib/resources/shared_preferences_keys.dart b/lib/resources/shared_preferences_keys.dart new file mode 100644 index 00000000..ad7398ae --- /dev/null +++ b/lib/resources/shared_preferences_keys.dart @@ -0,0 +1,38 @@ + +// Created with Android Studio. +// User: 三帆 +// Date: 31/01/2019 +// Time: 18:13 +// email: sanfan.hx@alibaba-inc.com +// target: xxx +// + + +//enum DateType { +// Int, +// Double, +// Bool, +// String, +// Dynamic +//} + +//class spKey { +// String name; +// DateType type; +// +// spKey({this.name, this.type}); +//} + +class SharedPreferencesKeys { + /// boolean + /// 用于欢迎页面. 只有第一次访问才会显示. 或者手动将这个值设为false + static String showWelcome = 'loginWelcone'; + /// json + /// 用于存放搜索页的搜索数据. + /// [{ + /// name: 'name' + /// + /// }] + static String searchHistory = 'searchHistory'; +} + diff --git a/lib/resources/widget_name_to_icon.dart b/lib/resources/widget_name_to_icon.dart new file mode 100644 index 00000000..644d145d --- /dev/null +++ b/lib/resources/widget_name_to_icon.dart @@ -0,0 +1,171 @@ +import 'package:flutter/material.dart'; +class WidgetName2Icon { + static Map icons = { + "Element":Icons.explicit, + "Components":Icons.extension, + "Themes":Icons.filter_b_and_w, + "Form":Icons.table_chart, + "Frame":Icons.aspect_ratio, + "Media":Icons.subscriptions, + "Input":Icons.input, + "TextField":Icons.text_fields, + "Checkbox":Icons.check_box, + "CheckboxListTile":Icons.playlist_add_check, + "Button":Icons.aspect_ratio, + "FlatButton":Icons.outlined_flag, + "RaisedButton":Icons.picture_in_picture_alt, + "IconButton":Icons.import_contacts, + "PopupMenuButton":Icons.power_input, + "FloatingActionButton":Icons.flash_off, + "RawMaterialButton":Icons.rowing, + "DropdownButton":Icons.drag_handle, + "OutlineButton":Icons.done_outline, + "Text":Icons.text_format, + "RichText":Icons.text_rotation_angleup, + "Radio":Icons.radio_button_checked, + "RadioListTile":Icons.list, + "Slider":Icons.slideshow, + "SliderTheme":Icons.theaters, + "SliderComponentShape":Icons.format_shapes, + "SliderThemeData":Icons.data_usage, + "Switch":Icons.switch_camera, + "SwitchListTile":Icons.switch_video, + "AnimatedSwitcher":Icons.airplanemode_active, + "Align":Icons.format_align_left, + "Stack":Icons.storage, + "IndexedStack":Icons.star, + "Layout":Icons.layers, + "Row":Icons.recent_actors, + "Column":Icons.cloud_off, + "Container":Icons.edit_location, + "Center":Icons.gesture, + "Box":Icons.hdr_strong, + "ConstrainedBox":Icons.account_box, + "OverflowBox":Icons.email, + "DecoratedBox":Icons.settings_overscan, + "FittedBox":Icons.data_usage, + "LimitedBox":Icons.format_align_justify, + "RenderBox":Icons.error, + "RotateBox":Icons.navigate_next, + "SizedOverflowBox":Icons.undo, + "TextBox":Icons.wallpaper, + "UnconstrainedBox":Icons.account_box, + "Axis":Icons.access_alarm, + "MainAxis":Icons.add_circle, + "CrossAxis":Icons.dehaze, + "FlipAxis":Icons.zoom_out, + "Expanded":Icons.all_out, + "Spacing":Icons.crop_free, + "Padding":Icons.crop, + "SliverPadding":Icons.euro_symbol, + "AnimatedPadding":Icons.zoom_out_map, + "Table":Icons.table_chart, + "Image":Icons.image, + "AssetImage":Icons.image_aspect_ratio, + "DecorationImage":Icons.picture_in_picture, + "DecorationImagePainter":Icons.image, + "ExactAssetImage":Icons.assessment, + "FadeInImage":Icons.flip, + "FileImage":Icons.filter, + "NetworkImage":Icons.network_wifi, + "RawImage":Icons.text_rotation_down, + "PaintImage":Icons.format_paint, + "PrecacheImage":Icons.perm_camera_mic, + "MemoryImage":Icons.memory, + "Icon":Icons.event_available, + "ImageIcon":Icons.image, + "IconTheme":Icons.table_chart, + "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, + "MaterialGap":Icons.view_week, + "MaterialSlice":Icons.format_list_numbered_rtl , + "MaterialColor":Icons.color_lens, + "Cupertino":Icons.phone_iphone, + "Scroll":Icons.swap_vertical_circle, + "Tab":Icons.tab, + "Menu":Icons.menu, + "PopupMenuDivider":Icons.remove, + "PopupMenuEntry":Icons.menu, + "CheckedPopupMenuItem":Icons.playlist_add_check, + "DropdownMenuItem":Icons.playlist_play, + "Grid":Icons.grid_on, + "Scaffold":Icons.local_convenience_store, + "Dialog":Icons.add_alert, + "Bar":Icons.border_horizontal, + "Card":Icons.credit_card, + "Panel":Icons.video_label, + "Navigation":Icons.navigation, + "List":Icons.list, + "ScrollView":Icons.move_to_inbox, + "Scrollable":Icons.swap_vertical_circle, + "ScrollbarPainter":Icons.format_paint, + "ScrollMetrics":Icons.camera, + "ScrollPhysics":Icons.control_point_duplicate, + "BoxScrollView":Icons.inbox, + "Chip":Icons.sim_card, + "ChipTheme":Icons.sd_card, + "CustomScrollView":Icons.autorenew, + "NestedScrollView":Icons.panorama_fish_eye, + "ChipThemeData":Icons.sim_card_alert, + "ChoiceChip":Icons.insert_drive_file, + "FilterChip":Icons.note_add, + "InputChip":Icons.restore_page, + "RawChip":Icons.save, + "LinearProgressIndicator":Icons.trending_flat , + "CircularProgressIndicator":Icons.rotate_left , + "ExpansionPanel":Icons.view_stream, + "ExpansionPanelList":Icons.view_headline, + "BottomNavigationBar":Icons.call_to_action, + "ListView":Icons.view_list , + "ListBody":Icons.list , + "AnimatedList":Icons.format_line_spacing , + "SliverAppBar":Icons.content_paste, + "AppBar":Icons.card_membership, + "BottomAppBar":Icons.call_to_action, + "BottomNavigationBarItem":Icons.crop_original, + "FlexibleSpaceBar":Icons.aspect_ratio, + "ButtonBar":Icons.branding_watermark, + "SnackBar":Icons.sms_failed, + "Progress":Icons.sync, + "Pick":Icons.event_note, + "DayPicker":Icons.calendar_today, + "MonthPicker":Icons.date_range, + "YearPicker":Icons.event_busy, + "ShowdatePicker":Icons.event, + "MaterialPageRoute":Icons.album, + "MaterialAccentColor":Icons.brush, + "SnackBarAction":Icons.assessment, + "TabBar":Icons.burst_mode, + "AlertDialog":Icons.sms_failed, + "AboutDialog":Icons.sms, + "SimpleDialog":Icons.message, + "ScaffoldState":Icons.local_bar, + "GridTile":Icons.apps, + "MergeableMaterialItem":Icons.view_list, + "CupertinoApp":Icons.face, + "CupertinoButton":Icons.crop_7_5, + "CupertinoColors":Icons.color_lens, + "CupertinoIcons":Icons.insert_emoticon, + "CupertinoNavigationBar":Icons.payment, + "CupertinoPageRoute":Icons.router, + "CupertinoPageScaffold":Icons.pages, + "CupertinoPicker":Icons.add_alarm, + "CupertinoPopupSurface":Icons.center_focus_weak, + "CupertinoScrollbar": Icons.fullscreen, + "CupertinoSlider": Icons.switch_camera, + "CupertinoSegmentedControl": Icons.business_center, + "CupertinoSliverNavigationBar": Icons.subtitles, + "CupertinoSwitch": Icons.radio_button_checked, + "CupertinoTabBar": Icons.tab, + "CupertinoTabScaffold": Icons.crop_original, + "CupertinoTabView": Icons.tablet, + "CupertinoTimerPicker": Icons.timer + }; +} diff --git a/lib/routers/application.dart b/lib/routers/application.dart index 0005b856..8a03d9c7 100644 --- a/lib/routers/application.dart +++ b/lib/routers/application.dart @@ -1,10 +1,15 @@ -import 'package:fluro/fluro.dart'; import 'package:flutter/material.dart'; +import 'package:fluro/fluro.dart'; + +import 'package:flutter_go/utils/shared_preferences.dart'; + class Application { static Router router; static TabController controller; + static SpUtil sharePeferences; + 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/routers/router_handler.dart b/lib/routers/router_handler.dart index cd16e709..01519cd5 100644 --- a/lib/routers/router_handler.dart +++ b/lib/routers/router_handler.dart @@ -1,9 +1,18 @@ import 'package:flutter/material.dart'; import 'package:fluro/fluro.dart'; -import '../views/category.dart'; + +import 'package:flutter_go/components/category.dart'; import '../widgets/404.dart'; -import '../common/full_screen_code_dialog.dart'; -import '../views/web_view_page.dart'; +import 'package:flutter_go/components/full_screen_code_dialog.dart'; +import 'package:flutter_go/views/web_page/web_view_page.dart'; +import 'package:flutter_go/views/first_page/home.dart'; + +// app的首页 +var homeHandler = new Handler( + handlerFunc: (BuildContext context, Map> params) { + return new AppPage(); + }, +); var categoryHandler = new Handler( handlerFunc: (BuildContext context, Map> params) { diff --git a/lib/routers/routers.dart b/lib/routers/routers.dart index 833b442e..4e589b61 100644 --- a/lib/routers/routers.dart +++ b/lib/routers/routers.dart @@ -1,11 +1,13 @@ import 'package:fluro/fluro.dart'; import 'package:flutter/material.dart'; + import '../widgets/index.dart'; import './router_handler.dart'; class Routes { static String root = "/"; + static String home = "/home"; static String widgetDemo = '/widget-demo'; static String codeView = '/code-view'; static String webViewPage = '/web-view-page'; @@ -15,16 +17,16 @@ class Routes { router.notFoundHandler = new Handler( handlerFunc: (BuildContext context, Map> params) { }); - + router.define(home, handler: homeHandler); router.define('/category/:type', handler: categoryHandler); router.define('/category/error/404', handler: widgetNotFoundHandler); router.define(codeView,handler:fullScreenCodeDialog); router.define(webViewPage,handler:webViewPageHand); - widgetDemosList.forEach((demo) { - Handler handler = new Handler( - handlerFunc: (BuildContext context, Map> params) { - return demo.buildRouter(context); + widgetDemosList.forEach((demo) { + Handler handler = new Handler( + handlerFunc: (BuildContext context, Map> params) { + return demo.buildRouter(context); }); router.define('${demo.routerName}', handler: handler); }); diff --git a/lib/utils/example_code_parser.dart b/lib/utils/example_code_parser.dart new file mode 100644 index 00000000..7b09b532 --- /dev/null +++ b/lib/utils/example_code_parser.dart @@ -0,0 +1,40 @@ +/// @Author: 一凨 +/// @Date: 2019-01-14 11:42:36 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-14 16:53:11 + +import 'dart:async'; + +import 'package:flutter/services.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:flutter/material.dart'; + +import 'package:flutter_go/routers/application.dart'; + + +Map _exampleCode; +String _code; + +void _launchURL(String url) async { + if (await canLaunch(url)) { + await launch(url); + } else { + throw 'Could not launch $url'; + } +} + +Future getExampleCode(context,String filePath, AssetBundle bundle) async { + if (_exampleCode == null) await _parseExampleCode(context,filePath, bundle); + return _code; +} + +Future _parseExampleCode(context,String filePath, AssetBundle bundle) async { + String code; + try { + code = await bundle.loadString('lib/widgets/$filePath'); + } catch (err) { + Navigator.of(context).pop(); + _launchURL(Application.github['widgetsURL'] + filePath); + } + _code = code; +} diff --git a/lib/utils/high_light_code.dart b/lib/utils/high_light_code.dart new file mode 100644 index 00000000..1ac0fdcd --- /dev/null +++ b/lib/utils/high_light_code.dart @@ -0,0 +1,359 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:string_scanner/string_scanner.dart'; + +/// final SyntaxHighlighterStyle style = SyntaxHighlighterStyle.lightThemeStyle(); +/// DartSyntaxHighlighter(style).format(source) + +class SyntaxHighlighterStyle { + SyntaxHighlighterStyle({ + this.baseStyle, + this.numberStyle, + this.commentStyle, + this.keywordStyle, + this.stringStyle, + this.punctuationStyle, + this.classStyle, + this.constantStyle + }); + + static SyntaxHighlighterStyle lightThemeStyle() { + return SyntaxHighlighterStyle( + baseStyle: const TextStyle(color: Color(0xFF000000)), + numberStyle: const TextStyle(color: Color(0xFF1565C0)), + commentStyle: const TextStyle(color: Color(0xFF9E9E9E)), + keywordStyle: const TextStyle(color: Color(0xFF9C27B0)), + stringStyle: const TextStyle(color: Color(0xFF43A047)), + punctuationStyle: const TextStyle(color: Color(0xFF000000)), + classStyle: const TextStyle(color: Color(0xFF512DA8)), + constantStyle: const TextStyle(color: Color(0xFF795548)) + ); + } + + static SyntaxHighlighterStyle darkThemeStyle() { + return SyntaxHighlighterStyle( + baseStyle: const TextStyle(color: Color(0xFFFFFFFF)), + numberStyle: const TextStyle(color: Color(0xFF1565C0)), + commentStyle: const TextStyle(color: Color(0xFF9E9E9E)), + keywordStyle: const TextStyle(color: Color(0xFF80CBC4)), + stringStyle: const TextStyle(color: Color(0xFF009688)), + punctuationStyle: const TextStyle(color: Color(0xFFFFFFFF)), + classStyle: const TextStyle(color: Color(0xFF009688)), + constantStyle: const TextStyle(color: Color(0xFF795548)) + ); + } + + final TextStyle baseStyle; + final TextStyle numberStyle; + final TextStyle commentStyle; + final TextStyle keywordStyle; + final TextStyle stringStyle; + final TextStyle punctuationStyle; + final TextStyle classStyle; + final TextStyle constantStyle; +} + +abstract class Highlighter { // ignore: one_member_abstracts + TextSpan format(String src); +} + +class DartSyntaxHighlighter extends Highlighter { + DartSyntaxHighlighter([this._style]) { + _spans = <_HighlightSpan>[]; + _style ??= SyntaxHighlighterStyle.darkThemeStyle(); + } + + SyntaxHighlighterStyle _style; + + static const List _keywords = [ + 'abstract', 'as', 'assert', 'async', 'await', 'break', 'case', 'catch', + 'class', 'const', 'continue', 'default', 'deferred', 'do', 'dynamic', 'else', + 'enum', 'export', 'external', 'extends', 'factory', 'false', 'final', + 'finally', 'for', 'get', 'if', 'implements', 'import', 'in', 'is', 'library', + 'new', 'null', 'operator', 'part', 'rethrow', 'return', 'set', 'static', + 'super', 'switch', 'sync', 'this', 'throw', 'true', 'try', 'typedef', 'var', + 'void', 'while', 'with', 'yield' + ]; + + static const List _builtInTypes = [ + 'int', 'double', 'num', 'bool' + ]; + + String _src; + StringScanner _scanner; + + List<_HighlightSpan> _spans; + + @override + TextSpan format(String src) { + _src = src; + _scanner = StringScanner(_src); + + if (_generateSpans()) { + // Successfully parsed the code + final List formattedText = []; + int currentPosition = 0; + + for (_HighlightSpan span in _spans) { + if (currentPosition != span.start) + formattedText.add(TextSpan(text: _src.substring(currentPosition, span.start))); + + formattedText.add(TextSpan(style: span.textStyle(_style), text: span.textForSpan(_src))); + + currentPosition = span.end; + } + + if (currentPosition != _src.length) + formattedText.add(TextSpan(text: _src.substring(currentPosition, _src.length))); + + return TextSpan(style: _style.baseStyle, children: formattedText); + } else { + // Parsing failed, return with only basic formatting + return TextSpan(style: _style.baseStyle, text: src); + } + } + + bool _generateSpans() { + int lastLoopPosition = _scanner.position; + + while (!_scanner.isDone) { + // Skip White space + _scanner.scan(RegExp(r'\s+')); + + // Block comments + if (_scanner.scan(RegExp(r'/\*(.|\n)*\*/'))) { + _spans.add(_HighlightSpan( + _HighlightType.comment, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Line comments + if (_scanner.scan('//')) { + final int startComment = _scanner.lastMatch.start; + + bool eof = false; + int endComment; + if (_scanner.scan(RegExp(r'.*\n'))) { + endComment = _scanner.lastMatch.end - 1; + } else { + eof = true; + endComment = _src.length; + } + + _spans.add(_HighlightSpan( + _HighlightType.comment, + startComment, + endComment + )); + + if (eof) + break; + + continue; + } + + // Raw r"String" + if (_scanner.scan(RegExp(r'r".*"'))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Raw r'String' + if (_scanner.scan(RegExp(r"r'.*'"))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Multiline """String""" + if (_scanner.scan(RegExp(r'"""(?:[^"\\]|\\(.|\n))*"""'))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Multiline '''String''' + if (_scanner.scan(RegExp(r"'''(?:[^'\\]|\\(.|\n))*'''"))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // "String" + if (_scanner.scan(RegExp(r'"(?:[^"\\]|\\.)*"'))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // 'String' + if (_scanner.scan(RegExp(r"'(?:[^'\\]|\\.)*'"))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Double + if (_scanner.scan(RegExp(r'\d+\.\d+'))) { + _spans.add(_HighlightSpan( + _HighlightType.number, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Integer + if (_scanner.scan(RegExp(r'\d+'))) { + _spans.add(_HighlightSpan( + _HighlightType.number, + _scanner.lastMatch.start, + _scanner.lastMatch.end) + ); + continue; + } + + // Punctuation + if (_scanner.scan(RegExp(r'[\[\]{}().!=<>&\|\?\+\-\*/%\^~;:,]'))) { + _spans.add(_HighlightSpan( + _HighlightType.punctuation, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Meta data + if (_scanner.scan(RegExp(r'@\w+'))) { + _spans.add(_HighlightSpan( + _HighlightType.keyword, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Words + if (_scanner.scan(RegExp(r'\w+'))) { + _HighlightType type; + + String word = _scanner.lastMatch[0]; + if (word.startsWith('_')) + word = word.substring(1); + + if (_keywords.contains(word)) + type = _HighlightType.keyword; + else if (_builtInTypes.contains(word)) + type = _HighlightType.keyword; + else if (_firstLetterIsUpperCase(word)) + type = _HighlightType.klass; + else if (word.length >= 2 && word.startsWith('k') && _firstLetterIsUpperCase(word.substring(1))) + type = _HighlightType.constant; + + if (type != null) { + _spans.add(_HighlightSpan( + type, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + } + } + + // Check if this loop did anything + if (lastLoopPosition == _scanner.position) { + // Failed to parse this file, abort gracefully + return false; + } + lastLoopPosition = _scanner.position; + } + + _simplify(); + return true; + } + + void _simplify() { + for (int i = _spans.length - 2; i >= 0; i -= 1) { + if (_spans[i].type == _spans[i + 1].type && _spans[i].end == _spans[i + 1].start) { + _spans[i] = _HighlightSpan( + _spans[i].type, + _spans[i].start, + _spans[i + 1].end + ); + _spans.removeAt(i + 1); + } + } + } + + bool _firstLetterIsUpperCase(String str) { + if (str.isNotEmpty) { + final String first = str.substring(0, 1); + return first == first.toUpperCase(); + } + return false; + } +} + +enum _HighlightType { + number, + comment, + keyword, + string, + punctuation, + klass, + constant +} + +class _HighlightSpan { + _HighlightSpan(this.type, this.start, this.end); + final _HighlightType type; + final int start; + final int end; + + String textForSpan(String src) { + return src.substring(start, end); + } + + TextStyle textStyle(SyntaxHighlighterStyle style) { + if (type == _HighlightType.number) + return style.numberStyle; + else if (type == _HighlightType.comment) + return style.commentStyle; + else if (type == _HighlightType.keyword) + return style.keywordStyle; + else if (type == _HighlightType.string) + return style.stringStyle; + else if (type == _HighlightType.punctuation) + return style.punctuationStyle; + else if (type == _HighlightType.klass) + return style.classStyle; + else if (type == _HighlightType.constant) + return style.constantStyle; + else + return style.baseStyle; + } +} diff --git a/lib/utils/net_utils.dart b/lib/utils/net_utils.dart new file mode 100644 index 00000000..764fed18 --- /dev/null +++ b/lib/utils/net_utils.dart @@ -0,0 +1,19 @@ +import 'dart:async'; + +import 'package:dio/dio.dart'; + + +var dio = new Dio(); + +class NetUtils { + + static Future get(String url,{Map params}) async{ + var response = await dio.get(url, data: params); + return response.data; + } + + static Future post(String url,Map params) async{ + var response = await dio.post(url, data: params); + return response.data; + } +} \ No newline at end of file diff --git a/lib/utils/provider.dart b/lib/utils/provider.dart new file mode 100644 index 00000000..89003886 --- /dev/null +++ b/lib/utils/provider.dart @@ -0,0 +1,93 @@ +import 'dart:async'; +import 'dart:io'; +import 'dart:typed_data'; + +import 'package:path/path.dart'; +import 'package:sqflite/sqflite.dart'; +import 'package:flutter/services.dart' show rootBundle; + +//const createSql = { +// 'cat': """ +// CREATE TABLE "cat" ( +// `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, +// `name` TEXT NOT NULL UNIQUE, +// `depth` INTEGER NOT NULL DEFAULT 1, +// `parentId` INTEGER NOT NULL, +// `desc` TEXT +// ); +// """, +// 'collectio': """ +// CREATE TABLE collection (id INTEGER PRIMARY KEY NOT NULL UNIQUE, name TEXT NOT NULL, router TEXT); +// """, +// 'widget': """ +// CREATE TABLE widget (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, name TEXT NOT NULL, cnName TEXT NOT NULL, image TEXT NOT NULL, doc TEXT, demo TEXT, catId INTEGER NOT NULL REFERENCES cat (id), owner TEXT); +// """; +//}; + +class Provider { + static Database db; + + // 获取数据库中所有的表 + Future getTables() async { + if (db == null) { + return Future.value([]); + } + List tables = await db.rawQuery('SELECT name FROM sqlite_master WHERE type = "table"'); + List targetList = []; + tables.forEach((item) { + targetList.add(item['name']); + }); + return targetList; + } + + // 检查数据库中, 表是否完整, 在部份android中, 会出现表丢失的情况 + Future checkTableIsRight() async { + List expectTables = ['cat', 'widget', 'collection']; + + List tables = await getTables(); + + for(int i = 0; i < expectTables.length; i++) { + if (!tables.contains(expectTables[i])) { + return false; + } + } + return true; + + } + + //初始化数据库 + + Future init(bool isCreate) async { + //Get a location using getDatabasesPath + String databasesPath = await getDatabasesPath(); + String path = join(databasesPath, 'flutter.db'); + print(path); + try { + db = await openDatabase(path); + } catch (e) { + print("Error $e"); + } + bool tableIsRight = await this.checkTableIsRight(); + + if (!tableIsRight) { + // 关闭上面打开的db,否则无法执行open + db.close(); + // Delete the database + await deleteDatabase(path); + ByteData data = await rootBundle.load(join("assets", "app.db")); + List bytes = + data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); + await new File(path).writeAsBytes(bytes); + + db = await openDatabase(path, version: 1, + onCreate: (Database db, int version) async { + print('db created version is $version'); + }, onOpen: (Database db) async { + print('new db opened'); + }); + } else { + print("Opening existing database"); + } + } + +} diff --git a/lib/utils/shared_preferences.dart b/lib/utils/shared_preferences.dart new file mode 100644 index 00000000..81f7dc70 --- /dev/null +++ b/lib/utils/shared_preferences.dart @@ -0,0 +1,120 @@ + +import 'dart:async'; + +import 'package:shared_preferences/shared_preferences.dart'; + +export 'package:flutter_go/resources/shared_preferences_keys.dart'; + +/// 用来做shared_preferences的存储 +class SpUtil { + static SpUtil _instance; + static Future get instance async { + return await getInstance(); + } + + static SharedPreferences _spf; + + + SpUtil._(); + + Future _init() async { + _spf = await SharedPreferences.getInstance(); + } + + static Future getInstance() async { + if (_instance == null) { + _instance = new SpUtil._(); + await _instance._init(); + + } + return _instance; + } + + static bool _beforeCheck() { + if (_spf == null) { + return true; + } + return false; + } + // 判断是否存在数据 + bool hasKey(String key) { + Set keys = getKeys(); + return keys.contains(key); + } + + Set getKeys() { + if (_beforeCheck()) return null; + return _spf.getKeys(); + } + + get(String key) { + if (_beforeCheck()) return null; + return _spf.get(key); + } + + getString(String key) { + if (_beforeCheck()) return null; + return _spf.getString(key); + } + + Future putString(String key, String value) { + if (_beforeCheck()) return null; + return _spf.setString(key, value); + } + + bool getBool(String key) { + if (_beforeCheck()) return null; + return _spf.getBool(key); + } + + Future putBool(String key, bool value) { + if (_beforeCheck()) return null; + return _spf.setBool(key, value); + } + + int getInt(String key) { + if (_beforeCheck()) return null; + return _spf.getInt(key); + } + + Future putInt(String key, int value) { + if (_beforeCheck()) return null; + return _spf.setInt(key, value); + } + + double getDouble(String key) { + if (_beforeCheck()) return null; + return _spf.getDouble(key); + } + + Future putDouble(String key, double value) { + if (_beforeCheck()) return null; + return _spf.setDouble(key, value); + } + + List getStringList(String key) { + return _spf.getStringList(key); + } + + Future putStringList(String key, List value) { + if (_beforeCheck()) return null; + return _spf.setStringList(key, value); + } + + dynamic getDynamic(String key) { + if (_beforeCheck()) return null; + return _spf.get(key); + } + + + + Future remove(String key) { + if (_beforeCheck()) return null; + return _spf.remove(key); + } + + Future clear() { + if (_beforeCheck()) return null; + return _spf.clear(); + } +} \ No newline at end of file diff --git a/lib/utils/sql.dart b/lib/utils/sql.dart new file mode 100644 index 00000000..8568fcb4 --- /dev/null +++ b/lib/utils/sql.dart @@ -0,0 +1,97 @@ +import 'dart:async'; + +import 'package:sqflite/sqflite.dart'; + +import './provider.dart'; + +class BaseModel{ + Database db; + final String table = ''; + var query; + BaseModel(this.db){ + query = db.query; + } +} + +class Sql extends BaseModel { + final String tableName; + Sql.setTable(String name) + : tableName = name, + super(Provider.db); + + // sdf + Future get() async{ + return await this.query(tableName); + } + String getTableName () { + return tableName; + } + + Future delete(String value,String key) async{ + return await this.db.delete(tableName,where:'$key = ?',whereArgs:[value]); + } + + Future getByCondition({Map conditions}) async { + if (conditions == null || conditions.isEmpty) { + return this.get(); + } + String stringConditions = ''; + + int index = 0; + conditions.forEach((key, value) { + if (value == null) { + return ; + } + if (value.runtimeType == String) { + stringConditions = '$stringConditions $key = "$value"'; + } + if (value.runtimeType == int) { + stringConditions = '$stringConditions $key = $value'; + } + + if (index >= 0 && index < conditions.length -1) { + stringConditions = '$stringConditions and'; + } + index++; + }); + // print("this is string condition for sql > $stringConditions"); + return await this.query(tableName, where: stringConditions); + } + Future> insert(Map json) async { + var id = await this.db.insert(tableName, json); + json['id'] = id; + return json; + } + /// + /// 搜索 + /// @param Object condition + /// @mods [And, Or] default is Or + /// search({'name': "hanxu', 'id': 1}; + /// + Future search({Map conditions, String mods = 'Or'}) async { + if (conditions == null || conditions.isEmpty) { + return this.get(); + } + String stringConditions = ''; + int index = 0; + conditions.forEach((key, value) { + if (value == null) { + return ; + } + + if (value.runtimeType == String) { + stringConditions = '$stringConditions $key like "%$value%"'; + } + if (value.runtimeType == int) { + stringConditions = '$stringConditions $key = "%$value%"'; + } + + if (index >= 0 && index < conditions.length -1) { + stringConditions = '$stringConditions $mods'; + } + index++; + }); + + return await this.query(tableName, where: stringConditions); + } +} \ No newline at end of file diff --git a/lib/utils/style.dart b/lib/utils/style.dart new file mode 100644 index 00000000..31d9bb8d --- /dev/null +++ b/lib/utils/style.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; + +//颜色配置 +class AppColor{ + static const int white = 0xFFFFFFFF; + static const int mainTextColor = 0xFF121917; + static const int subTextColor = 0xff959595; +} + +//文本设置 +class AppText{ + static const middleSize = 16.0; + + static const middleText = TextStyle( + color: Color(AppColor.mainTextColor), + fontSize: middleSize, + ); + + static const middleSubText = TextStyle( + color: Color(AppColor.subTextColor), + fontSize: middleSize, + ); +} +class WidgetDemoColor { + static const int fontColor = 0xFF607173; + static const int iconColor = 0xFF607173; + static const int borderColor = 0xFFEFEFEF; + +} diff --git a/lib/utils/syntax_highlighter.dart b/lib/utils/syntax_highlighter.dart new file mode 100644 index 00000000..1b36f07c --- /dev/null +++ b/lib/utils/syntax_highlighter.dart @@ -0,0 +1,357 @@ +/// @Author: 一凨 +/// @Date: 2019-01-14 11:42:39 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-14 11:42:39 + +import 'package:flutter/material.dart'; +import 'package:string_scanner/string_scanner.dart'; + +class SyntaxHighlighterStyle { + SyntaxHighlighterStyle({ + this.baseStyle, + this.numberStyle, + this.commentStyle, + this.keywordStyle, + this.stringStyle, + this.punctuationStyle, + this.classStyle, + this.constantStyle + }); + + static SyntaxHighlighterStyle lightThemeStyle() { + return SyntaxHighlighterStyle( + baseStyle: const TextStyle(color: Color(0xFF000000)), + numberStyle: const TextStyle(color: Color(0xFF1565C0)), + commentStyle: const TextStyle(color: Color(0xFF9E9E9E)), + keywordStyle: const TextStyle(color: Color(0xFF9C27B0)), + stringStyle: const TextStyle(color: Color(0xFF43A047)), + punctuationStyle: const TextStyle(color: Color(0xFF000000)), + classStyle: const TextStyle(color: Color(0xFF512DA8)), + constantStyle: const TextStyle(color: Color(0xFF795548)) + ); + } + + static SyntaxHighlighterStyle darkThemeStyle() { + return SyntaxHighlighterStyle( + baseStyle: const TextStyle(color: Color(0xFFFFFFFF)), + numberStyle: const TextStyle(color: Color(0xFF1565C0)), + commentStyle: const TextStyle(color: Color(0xFF9E9E9E)), + keywordStyle: const TextStyle(color: Color(0xFF80CBC4)), + stringStyle: const TextStyle(color: Color(0xFF009688)), + punctuationStyle: const TextStyle(color: Color(0xFFFFFFFF)), + classStyle: const TextStyle(color: Color(0xFF009688)), + constantStyle: const TextStyle(color: Color(0xFF795548)) + ); + } + + final TextStyle baseStyle; + final TextStyle numberStyle; + final TextStyle commentStyle; + final TextStyle keywordStyle; + final TextStyle stringStyle; + final TextStyle punctuationStyle; + final TextStyle classStyle; + final TextStyle constantStyle; +} + +abstract class SyntaxHighlighter { // ignore: one_member_abstracts + TextSpan format(String src); +} + +class DartSyntaxHighlighter extends SyntaxHighlighter { + DartSyntaxHighlighter([this._style]) { + _spans = <_HighlightSpan>[]; + _style ??= SyntaxHighlighterStyle.darkThemeStyle(); + } + + SyntaxHighlighterStyle _style; + + static const List _keywords = [ + 'abstract', 'as', 'assert', 'async', 'await', 'break', 'case', 'catch', + 'class', 'const', 'continue', 'default', 'deferred', 'do', 'dynamic', 'else', + 'enum', 'export', 'external', 'extends', 'factory', 'false', 'final', + 'finally', 'for', 'get', 'if', 'implements', 'import', 'in', 'is', 'library', + 'new', 'null', 'operator', 'part', 'rethrow', 'return', 'set', 'static', + 'super', 'switch', 'sync', 'this', 'throw', 'true', 'try', 'typedef', 'var', + 'void', 'while', 'with', 'yield' + ]; + + static const List _builtInTypes = [ + 'int', 'double', 'num', 'bool' + ]; + + String _src; + StringScanner _scanner; + + List<_HighlightSpan> _spans; + + @override + TextSpan format(String src) { + _src = src; + _scanner = StringScanner(_src); + + if (_generateSpans()) { + // Successfully parsed the code + final List formattedText = []; + int currentPosition = 0; + + for (_HighlightSpan span in _spans) { + if (currentPosition != span.start) + formattedText.add(TextSpan(text: _src.substring(currentPosition, span.start))); + + formattedText.add(TextSpan(style: span.textStyle(_style), text: span.textForSpan(_src))); + + currentPosition = span.end; + } + + if (currentPosition != _src.length) + formattedText.add(TextSpan(text: _src.substring(currentPosition, _src.length))); + + return TextSpan(style: _style.baseStyle, children: formattedText); + } else { + // Parsing failed, return with only basic formatting + return TextSpan(style: _style.baseStyle, text: src); + } + } + + bool _generateSpans() { + int lastLoopPosition = _scanner.position; + + while (!_scanner.isDone) { + // Skip White space + _scanner.scan(RegExp(r'\s+')); + + // Block comments + if (_scanner.scan(RegExp(r'/\*(.|\n)*\*/'))) { + _spans.add(_HighlightSpan( + _HighlightType.comment, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Line comments + if (_scanner.scan('//')) { + final int startComment = _scanner.lastMatch.start; + + bool eof = false; + int endComment; + if (_scanner.scan(RegExp(r'.*\n'))) { + endComment = _scanner.lastMatch.end - 1; + } else { + eof = true; + endComment = _src.length; + } + + _spans.add(_HighlightSpan( + _HighlightType.comment, + startComment, + endComment + )); + + if (eof) + break; + + continue; + } + + // Raw r"String" + if (_scanner.scan(RegExp(r'r".*"'))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Raw r'String' + if (_scanner.scan(RegExp(r"r'.*'"))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Multiline """String""" + if (_scanner.scan(RegExp(r'"""(?:[^"\\]|\\(.|\n))*"""'))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Multiline '''String''' + if (_scanner.scan(RegExp(r"'''(?:[^'\\]|\\(.|\n))*'''"))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // "String" + if (_scanner.scan(RegExp(r'"(?:[^"\\]|\\.)*"'))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // 'String' + if (_scanner.scan(RegExp(r"'(?:[^'\\]|\\.)*'"))) { + _spans.add(_HighlightSpan( + _HighlightType.string, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Double + if (_scanner.scan(RegExp(r'\d+\.\d+'))) { + _spans.add(_HighlightSpan( + _HighlightType.number, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Integer + if (_scanner.scan(RegExp(r'\d+'))) { + _spans.add(_HighlightSpan( + _HighlightType.number, + _scanner.lastMatch.start, + _scanner.lastMatch.end) + ); + continue; + } + + // Punctuation + if (_scanner.scan(RegExp(r'[\[\]{}().!=<>&\|\?\+\-\*/%\^~;:,]'))) { + _spans.add(_HighlightSpan( + _HighlightType.punctuation, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Meta data + if (_scanner.scan(RegExp(r'@\w+'))) { + _spans.add(_HighlightSpan( + _HighlightType.keyword, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + continue; + } + + // Words + if (_scanner.scan(RegExp(r'\w+'))) { + _HighlightType type; + + String word = _scanner.lastMatch[0]; + if (word.startsWith('_')) + word = word.substring(1); + + if (_keywords.contains(word)) + type = _HighlightType.keyword; + else if (_builtInTypes.contains(word)) + type = _HighlightType.keyword; + else if (_firstLetterIsUpperCase(word)) + type = _HighlightType.klass; + else if (word.length >= 2 && word.startsWith('k') && _firstLetterIsUpperCase(word.substring(1))) + type = _HighlightType.constant; + + if (type != null) { + _spans.add(_HighlightSpan( + type, + _scanner.lastMatch.start, + _scanner.lastMatch.end + )); + } + } + + // Check if this loop did anything + if (lastLoopPosition == _scanner.position) { + // Failed to parse this file, abort gracefully + return false; + } + lastLoopPosition = _scanner.position; + } + + _simplify(); + return true; + } + + void _simplify() { + for (int i = _spans.length - 2; i >= 0; i -= 1) { + if (_spans[i].type == _spans[i + 1].type && _spans[i].end == _spans[i + 1].start) { + _spans[i] = _HighlightSpan( + _spans[i].type, + _spans[i].start, + _spans[i + 1].end + ); + _spans.removeAt(i + 1); + } + } + } + + bool _firstLetterIsUpperCase(String str) { + if (str.isNotEmpty) { + final String first = str.substring(0, 1); + return first == first.toUpperCase(); + } + return false; + } +} + +enum _HighlightType { + number, + comment, + keyword, + string, + punctuation, + klass, + constant +} + +class _HighlightSpan { + _HighlightSpan(this.type, this.start, this.end); + final _HighlightType type; + final int start; + final int end; + + String textForSpan(String src) { + return src.substring(start, end); + } + + TextStyle textStyle(SyntaxHighlighterStyle style) { + if (type == _HighlightType.number) + return style.numberStyle; + else if (type == _HighlightType.comment) + return style.commentStyle; + else if (type == _HighlightType.keyword) + return style.keywordStyle; + else if (type == _HighlightType.string) + return style.stringStyle; + else if (type == _HighlightType.punctuation) + return style.punctuationStyle; + else if (type == _HighlightType.klass) + return style.classStyle; + else if (type == _HighlightType.constant) + return style.constantStyle; + else + return style.baseStyle; + } +} diff --git a/lib/utils/util.dart b/lib/utils/util.dart new file mode 100644 index 00000000..1b9fab38 --- /dev/null +++ b/lib/utils/util.dart @@ -0,0 +1,90 @@ +import 'package:flutter/material.dart'; + +const Map emumMap = const { + "Objective-C": Color(0xFF438EFF), + "Perl": Color(0xFF0298C3), + "Python": Color(0xFF0298C3), + "JavaScript": Color(0xFFF1E05A), + "PHP": Color(0xFF4F5D95), + "R": Color(0xFF188CE7), + "Lua": Color(0xFFC22D40), + "Scala": Color(0xFF020080), + "Swift": Color(0xFFFFAC45), + "Kotlin": Color(0xFFF18E33), + "Vue": Colors.black, + "Ruby": Color(0xFF701617), + "Shell": Color(0xFF89E051), + "TypeScript": Color(0xFF2B7489), + "C++": Color(0xFFF34B7D), + "CSS": Color(0xFF563C7C), + "Java": Color(0xFFB07219), + "C#": Color(0xFF178600), + "Go": Color(0xFF375EAB), + "Erlang": Color(0xFFB83998), + "C": Color(0xFF555555), +}; + +class Util { + static String getTimeDuration(String comTime) { + var nowTime = DateTime.now(); + var compareTime = DateTime.parse(comTime); + if (nowTime.isAfter(compareTime)) { + if (nowTime.year == compareTime.year) { + if (nowTime.month == compareTime.month) { + if (nowTime.day == compareTime.day) { + if (nowTime.hour == compareTime.hour) { + if (nowTime.minute == compareTime.minute) { + return '片刻之间'; + } + return (nowTime.minute - compareTime.minute).toString() + '分钟前'; + } + return (nowTime.hour - compareTime.hour).toString() + '小时前'; + } + return (nowTime.day - compareTime.day).toString() + '天前'; + } + return (nowTime.month - compareTime.month).toString() + '月前'; + } + return (nowTime.year - compareTime.year).toString() + '年前'; + } + return 'time error'; + } + + static double setPercentage(percentage, context) { + return MediaQuery.of(context).size.width * percentage; + } + + static Color getLangColor(String language) { + if (emumMap.containsKey(language)) { + return emumMap[language]; + } + return Colors.black26; + } + + static String getTimeDate(String comTime) { + var compareTime = DateTime.parse(comTime); + String weekDay = ''; + switch (compareTime.weekday) { + case 2: + weekDay = '周二'; + break; + case 3: + weekDay = '周三'; + break; + case 4: + weekDay = '周四'; + break; + case 5: + weekDay = '周五'; + break; + case 6: + weekDay = '周六'; + break; + case 7: + weekDay = '周日'; + break; + default: + weekDay = '周一'; + } + return '${compareTime.month}-${compareTime.day} $weekDay'; + } +} diff --git a/lib/views/collection_page/collection_page.dart b/lib/views/collection_page/collection_page.dart new file mode 100644 index 00000000..6b4c609b --- /dev/null +++ b/lib/views/collection_page/collection_page.dart @@ -0,0 +1,152 @@ +/// @Author: 一凨 +/// @Date: 2019-01-08 17:12:58 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-14 20:13:28 + +import 'package:flutter/material.dart'; +import 'package:event_bus/event_bus.dart'; + +import 'package:flutter_go/model/collection.dart'; +import 'package:flutter_go/routers/application.dart'; +import 'package:flutter_go/routers/routers.dart'; +import 'package:flutter_go/event/event_bus.dart'; +import 'package:flutter_go/event/event_model.dart'; + + +class CollectionPage extends StatefulWidget { + _CollectionPageState createState() => _CollectionPageState(); +} + +class _CollectionPageState extends State { + _CollectionPageState() { + final eventBus = new EventBus(); + ApplicationEvent.event = eventBus; + } + CollectionControlModel _collectionControl = new CollectionControlModel(); + List _collectionList = []; + ScrollController _scrollController = new ScrollController(); + var _icons; + + @override + void initState() { + super.initState(); + _getList(); + ApplicationEvent.event.on().listen((event) { + _getList(); + }); + } + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } + + void _getList() { + _collectionList.clear(); + _collectionControl.getAllCollection().then((resultList) { + resultList.forEach((item) { + _collectionList.add(item); + }); + if (this.mounted) { + setState(() { + _collectionList = _collectionList; + }); + } + }); + } + + Widget _renderList(context, index) { + if (index == 0) { + return Container( + height: 40.0, + padding: const EdgeInsets.only(left: 10.0), + child: Row( + children: [ + Icon( + Icons.warning, + size: 22.0, + ), + SizedBox( + width: 5.0, + ), + Text('模拟器重新运行会丢失收藏'), + ], + ), + ); + } + if (_collectionList[index - 1].router.contains('http')) { + if (_collectionList[index - 1].name.endsWith('Doc')) { + _icons = Icons.library_books; + } else { + _icons = Icons.language; + } + } else { + _icons = Icons.extension; + } + return Container( + padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 5.0), + margin: const EdgeInsets.only(bottom: 7.0), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + new BoxShadow( + color: const Color(0xFFd0d0d0), + blurRadius: 1.0, + spreadRadius: 2.0, + offset: Offset(3.0, 2.0), + ), + ], + ), + child: ListTile( + leading: Icon( + _icons, + size: 30.0, + color: Theme.of(context).primaryColor, + ), + title: Text( + Uri.decodeComponent(_collectionList[index - 1].name), + overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 17.0), + ), + trailing: + Icon(Icons.keyboard_arrow_right, color: Colors.grey, size: 30.0), + onTap: () { + if (_collectionList[index - 1].router.contains('http')) { + // 注意这里title已经转义过了 + Application.router.navigateTo(context, + '${Routes.webViewPage}?title=${_collectionList[index - 1].name}&url=${Uri.encodeComponent(_collectionList[index - 1].router)}'); + } else { + Application.router + .navigateTo(context, "${_collectionList[index - 1].router}"); + } + }, + ), + ); + } + + @override + Widget build(BuildContext context) { + if (_collectionList.length == 0) { + return ListView( + children: [ + Column( + children: [ + Image.asset( + 'assets/images/nothing.png', + fit: BoxFit.contain, + width: MediaQuery.of(context).size.width / 2, + ), + Text('暂无收藏,赶紧去收藏一个吧!'), + ], + ), + ], + ); + } + return ListView.builder( + itemBuilder: _renderList, + itemCount: _collectionList.length + 1, + controller: _scrollController, + ); + } +} diff --git a/lib/views/first_page/first_page.dart b/lib/views/first_page/first_page.dart new file mode 100644 index 00000000..e121390f --- /dev/null +++ b/lib/views/first_page/first_page.dart @@ -0,0 +1,138 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +import 'package:flutter_go/components/list_view_item.dart'; +import 'package:flutter_go/components/list_refresh.dart' as listComp; +import 'package:flutter_go/components/pagination.dart'; +import 'package:flutter_go/views/first_page/first_page_item.dart'; +import 'package:flutter_go/components/disclaimer_msg.dart'; +import 'package:flutter_go/utils/net_utils.dart'; + +// ValueKey key; + +class FirstPage extends StatefulWidget { + @override + FirstPageState createState() => new FirstPageState(); +} + +class FirstPageState extends State with AutomaticKeepAliveClientMixin{ + Future _prefs = SharedPreferences.getInstance(); + Future _unKnow; + GlobalKey key; + + @override + bool get wantKeepAlive => true; + + + @override + void initState() { + super.initState(); + if (key == null) { + key = GlobalKey(); + // key = const Key('__RIKEY1__'); + //获取sharePre + _unKnow = _prefs.then((SharedPreferences prefs) { + return (prefs.getBool('disclaimer::Boolean') ?? false); + }); + + /// 判断是否需要弹出免责声明,已经勾选过不在显示,就不会主动弹 + _unKnow.then((bool value) { + new Future.delayed(const Duration(seconds: 1),(){ + if (!value) { + key.currentState.showAlertDialog(context); + } + }); + }); + } + } + + + Future getIndexListData([Map params]) async { + const juejin_flutter = 'https://timeline-merger-ms.juejin.im/v1/get_tag_entry?src=web&tagId=5a96291f6fb9a0535b535438'; + var pageIndex = (params is Map) ? params['pageIndex'] : 0; + final _param = {'page':pageIndex,'pageSize':20,'sort':'rankIndex'}; + var responseList = []; + var pageTotal = 0; + + try{ + var response = await NetUtils.get(juejin_flutter, params: _param); + responseList = response['d']['entrylist']; + pageTotal = response['d']['total']; + if (!(pageTotal is int) || pageTotal <= 0) { + pageTotal = 0; + } + }catch(e){ + + } + pageIndex += 1; + List resultList = new List(); + for (int i = 0; i < responseList.length; i++) { + try { + FirstPageItem cellData = new FirstPageItem.fromJson(responseList[i]); + resultList.add(cellData); + } catch (e) { + // No specified type, handles all + } + } + Map result = {"list":resultList, 'total':pageTotal, 'pageIndex':pageIndex}; + return result; + } + + Widget makeCard(index,item){ + + var myTitle = '${item.title}'; + var myUsername = '${'👲'}: ${item.username} '; + var codeUrl = '${item.detailUrl}'; + return new ListViewItem(itemUrl:codeUrl,itemTitle: myTitle,data: myUsername,); + } + + headerView(){ + return + Column( + children: [ + Stack( + //alignment: const FractionalOffset(0.9, 0.1),//方法一 + children: [ + Pagination(), + Positioned(//方法二 + top: 10.0, + left: 0.0, + child: DisclaimerMsg(key:key,pWidget:this) + ), + ]), + SizedBox(height: 1, child:Container(color: Theme.of(context).primaryColor)), + SizedBox(height: 10), + ], + ); + + } + + @override + Widget build(BuildContext context) { + super.build(context); + return new Column( + children: [ +// new Stack( +// //alignment: const FractionalOffset(0.9, 0.1),//方法一 +// children: [ +// Pagination(), +// Positioned(//方法二 +// top: 10.0, +// left: 0.0, +// child: DisclaimerMsg(key:key,pWidget:this) +// ), +// ]), +// SizedBox(height: 2, child:Container(color: Theme.of(context).primaryColor)), + new Expanded( + //child: new List(), + child: listComp.ListRefresh(getIndexListData,makeCard,headerView) + ) + ] + + ); + } +} + + diff --git a/lib/views/first_page/first_page_item.dart b/lib/views/first_page/first_page_item.dart new file mode 100644 index 00000000..bef10315 --- /dev/null +++ b/lib/views/first_page/first_page_item.dart @@ -0,0 +1,49 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/5 +/// Time: 下午10:20 +/// email: zhu.yan@alibaba-inc.com +/// target: FirstPageItem + +import 'package:flutter_go/utils/util.dart'; + +class FirstPageItem { + bool hot; + String isCollection; + String tag; + String username; + int collectionCount; + int commentCount; + String title; + String createdTime; + String detailUrl; + + FirstPageItem( + {this.hot, + this.tag, + this.username, + this.collectionCount, + this.createdTime, + this.commentCount, + this.title, + this.detailUrl, + this.isCollection}); + + factory FirstPageItem.fromJson(Map json) { + String _tag = ''; + if(json['tags'].length>0){ + _tag = '${json['tags'][0]['title']}/'; + } + return FirstPageItem( + hot: json['hot'], + collectionCount: json['collectionCount'], + commentCount: json['commentsCount'], + tag: '$_tag${json['category']['name']}', + username: json['user']['username'], + createdTime: Util.getTimeDuration(json['createdAt']), + title: json['title'], + detailUrl: json['originalUrl'], + isCollection: json['type'] , + ); + } +} \ No newline at end of file diff --git a/lib/views/first_page/home.dart b/lib/views/first_page/home.dart new file mode 100644 index 00000000..efb8b1d5 --- /dev/null +++ b/lib/views/first_page/home.dart @@ -0,0 +1,170 @@ + +/// Created with Android Studio. +/// User: 三帆 +/// Date: 16/01/2019 +/// Time: 11:16 +/// email: sanfan.hx@alibaba-inc.com +/// target: app首页 + + +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter_go/utils/shared_preferences.dart'; +import 'package:flutter_go/views/first_page/first_page.dart'; +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/model/widget.dart'; +import 'package:flutter_go/widgets/index.dart'; +import 'package:flutter_go/components/search_input.dart'; +import 'package:flutter_go/model/search_history.dart'; +import 'package:flutter_go/resources/widget_name_to_icon.dart'; + +const int ThemeColor = 0xFFC91B3A; + +class AppPage extends StatefulWidget { + @override + State createState() { + return _MyHomePageState(); + } +} + +class _MyHomePageState extends State + with SingleTickerProviderStateMixin { + SpUtil sp; + WidgetControlModel widgetControl = new WidgetControlModel(); + SearchHistoryList searchHistoryList; + TabController controller; + bool isSearch = false; + String data = '无'; + String data2ThirdPage = '这是传给ThirdPage的值'; + String appBarTitle = tabData[0]['text']; + static List tabData = [ + {'text': '业界动态', 'icon': new Icon(Icons.language)}, + {'text': 'WIDGET', 'icon': new Icon(Icons.extension)}, + {'text': '组件收藏', 'icon': new Icon(Icons.favorite)}, + {'text': '关于手册', 'icon': new Icon(Icons.import_contacts)} + ]; + + List myTabs = []; + + @override + void initState() { + super.initState(); + + initSearchHistory(); + controller = new TabController( + initialIndex: 0, vsync: this, length: 4); // 这里的length 决定有多少个底导 submenus + for (int i = 0; i < tabData.length; i++) { + myTabs.add(new Tab(text: tabData[i]['text'], icon: tabData[i]['icon'])); + } + controller.addListener(() { + if (controller.indexIsChanging) { + _onTabChange(); + } + }); + Application.controller = controller; + } + + @override + void dispose() { + controller.dispose(); + super.dispose(); + } + + initSearchHistory() async { + sp = await SpUtil.getInstance(); + String json = sp.getString(SharedPreferencesKeys.searchHistory); + print("json $json"); + searchHistoryList = SearchHistoryList.fromJSON(json); + } + + void onWidgetTap(WidgetPoint widgetPoint, BuildContext context) { + List widgetDemosList = new WidgetDemoList().getDemos(); + String targetName = widgetPoint.name; + String targetRouter = '/category/error/404'; + widgetDemosList.forEach((item) { + if (item.name == targetName) { + targetRouter = item.routerName; + } + }); + searchHistoryList + .add(SearchHistory(name: targetName, targetRouter: targetRouter)); + print("searchHistoryList ${searchHistoryList.toString()}"); + Application.router.navigateTo(context, "$targetRouter"); + } + + Widget buildSearchInput(BuildContext context) { + return new SearchInput((value) async { + if (value != '') { + List list = await widgetControl.search(value); + + return list + .map((item) => new MaterialSearchResult( + value: item.name, + icon: WidgetName2Icon.icons[item.name] ?? null, + text: 'widget', + onTap: () { + onWidgetTap(item, context); + }, + )) + .toList(); + } else { + return null; + } + }, (value) {}, () {}); + } + + @override + Widget build(BuildContext context) { + var db = Provider.db; + + return new Scaffold( + appBar: new AppBar(title: buildSearchInput(context)), + body: new TabBarView(controller: controller, children: [ + new FirstPage(), + new WidgetPage(db), + new CollectionPage(), + FourthPage() + ]), + bottomNavigationBar: Material( + color: const Color(0xFFF0EEEF), //底部导航栏主题颜色 + child: SafeArea( + child: Container( + height: 65.0, + decoration: BoxDecoration( + color: const Color(0xFFF0F0F0), + boxShadow: [ + BoxShadow( + color: const Color(0xFFd0d0d0), + blurRadius: 3.0, + spreadRadius: 2.0, + offset: Offset(-1.0, -1.0), + ), + ], + ), + child: TabBar( + controller: controller, + indicatorColor: Theme.of(context).primaryColor, + //tab标签的下划线颜色 + // labelColor: const Color(0xFF000000), + indicatorWeight: 3.0, + labelColor: Theme.of(context).primaryColor, + unselectedLabelColor: const Color(0xFF8E8E8E), + tabs: myTabs), + ), + ), + ), + ); + } + + void _onTabChange() { + if (this.mounted) { + this.setState(() { + appBarTitle = tabData[controller.index]['text']; + }); + } + } +} diff --git a/lib/views/fourth_page/page_dragger.dart b/lib/views/fourth_page/page_dragger.dart new file mode 100644 index 00000000..e36b8282 --- /dev/null +++ b/lib/views/fourth_page/page_dragger.dart @@ -0,0 +1,193 @@ + +import 'dart:async'; +import 'dart:ui'; + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/views/fourth_page/pager_indicator.dart'; + +class PageDragger extends StatefulWidget { + + final canDragLeftToRight; + final canDragRightToLeft; + + final StreamController slideUpdateStream; + + + PageDragger({ + this.canDragLeftToRight, + this.canDragRightToLeft, + this.slideUpdateStream, + }); + + @override + _PageDraggerState createState() => _PageDraggerState(); +} + +class _PageDraggerState extends State { + + static const FULL_TRANSTITION_PX = 300.0; + + Offset dragStart; + SlideDirection slideDirection; + double slidePercent = 0.0; + + onDragStart(DragStartDetails details){ + dragStart = details.globalPosition; + } + + onDragUpdate(DragUpdateDetails details) { + if (dragStart != null) { + final newPosition = details.globalPosition; + final dx = dragStart.dx - newPosition.dx; + + if (dx > 0 && widget.canDragRightToLeft) { + slideDirection = SlideDirection.rightToLeft; + } else if (dx < 0 && widget.canDragLeftToRight) { + slideDirection = SlideDirection.leftToRight; + } else { + slideDirection = SlideDirection.none; + } + + if (slideDirection != SlideDirection.none){ + slidePercent = (dx / FULL_TRANSTITION_PX).abs().clamp(0.0, 1.0); + } else { + slidePercent = 0.0; + } + widget.slideUpdateStream.add( + new SlideUpdate( + UpdateType.dragging, + slideDirection, + slidePercent + )); + } + } + + onDragEnd(DragEndDetails details){ + widget.slideUpdateStream.add( + new SlideUpdate( + UpdateType.doneDragging, + SlideDirection.none, + 0.0, + ) + ); + + dragStart = null; + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onHorizontalDragStart: onDragStart , + onHorizontalDragUpdate: onDragUpdate , + onHorizontalDragEnd: onDragEnd , + ); + } +} + +class AnimatedPageDragger{ + + static const PERCENT_PER_MILLISECOND = 0.005; + + final slideDirection; + final transitionGoal; + + AnimationController completionAnimationController; + + AnimatedPageDragger({ + this.slideDirection, + this.transitionGoal, + slidePercent, + StreamController slideUpdateStream, + TickerProvider vsync, + }) { + final startSlidePercent = slidePercent; + var endSlidePercent; + var duration; + + if ( transitionGoal == TransitionGoal.open){ + endSlidePercent = 1.0; + + final slideRemaining = 1.0 - slidePercent; + + duration = new Duration( + milliseconds: (slideRemaining / PERCENT_PER_MILLISECOND).round() + ); + + } else { + endSlidePercent = 0.0; + duration = new Duration( + milliseconds: (slidePercent / PERCENT_PER_MILLISECOND).round() + ); + } + + completionAnimationController = new AnimationController( + duration: duration, + vsync: vsync + ) + ..addListener((){ + slidePercent = lerpDouble( + startSlidePercent, + endSlidePercent, + completionAnimationController.value + ); + + slideUpdateStream.add( + new SlideUpdate( + UpdateType.animating, + slideDirection, + slidePercent, + ) + ); + + }) + + ..addStatusListener((AnimationStatus status){ + + if(status == AnimationStatus.completed){ + slideUpdateStream.add( + new SlideUpdate( + UpdateType.doneAnimating, + slideDirection, + endSlidePercent, + ) + ); + } + + }); + + } + + run(){ + completionAnimationController.forward(from: 0.0); + } + + dispose(){ + completionAnimationController.dispose(); + } + +} + +enum TransitionGoal{ + open, + close, +} + +enum UpdateType{ + dragging, + doneDragging, + animating, + doneAnimating, +} + +class SlideUpdate { + final updateType; + final direction; + final slidePercent; + + SlideUpdate( + this.updateType, + this.direction, + this.slidePercent + ); +} diff --git a/lib/views/fourth_page/page_reveal.dart b/lib/views/fourth_page/page_reveal.dart new file mode 100644 index 00000000..4cd5a48a --- /dev/null +++ b/lib/views/fourth_page/page_reveal.dart @@ -0,0 +1,52 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +class PageReveal extends StatelessWidget { + + final double revealPercent; + final Widget child; + + PageReveal({ + this.revealPercent, + this.child + }); + + @override + Widget build(BuildContext context) { + return ClipOval( + clipper: new CircleRevealClipper(revealPercent), + child: child, + ); + } +} + +class CircleRevealClipper extends CustomClipper{ + + final double revealPercent; + + + CircleRevealClipper( + this.revealPercent + ); + + @override + Rect getClip(Size size) { + + final epicenter = new Offset(size.width / 2, size.height * 0.9); + + double theta = atan(epicenter.dy / epicenter.dx); + final distanceToCorner = epicenter.dy / sin(theta); + + final radius = distanceToCorner * revealPercent; + final diameter = 2 * radius; + + return new Rect.fromLTWH(epicenter.dx - radius, epicenter.dy - radius, diameter, diameter); + } + + @override + bool shouldReclip(CustomClipper oldClipper) { + return true; + } + +} \ No newline at end of file diff --git a/lib/views/fourth_page/pager_indicator.dart b/lib/views/fourth_page/pager_indicator.dart new file mode 100644 index 00000000..c3aa7438 --- /dev/null +++ b/lib/views/fourth_page/pager_indicator.dart @@ -0,0 +1,157 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/views/fourth_page/pages.dart'; + +class PagerIndicator extends StatelessWidget { + + final PagerIndicatorViewModel viewModel; + + PagerIndicator({ + this.viewModel, + }); + + @override + Widget build(BuildContext context) { + + List bubbles = []; + for(var i = 0; i < viewModel.pages.length; ++i ){ + final page = viewModel.pages[i]; + + var percentActive; + + if(i == viewModel.activeIndex){ + percentActive = 1.0 - viewModel.slidePercent; + } else if (i == viewModel.activeIndex - 1 && viewModel.slideDirection == SlideDirection.leftToRight){ + percentActive = viewModel.slidePercent; + } else if (i == viewModel.activeIndex + 1 && viewModel.slideDirection == SlideDirection.rightToLeft){ + percentActive = viewModel.slidePercent; + }else { + percentActive = 0.0; + } + + bool isHollow = i > viewModel.activeIndex || (i == viewModel.activeIndex && viewModel.slideDirection == SlideDirection.leftToRight); + + + + bubbles.add( + new PageBubble( + viewModel: new PageBubbleViewModel( + page.iconAssetPath, + page.color, + isHollow, + percentActive, + ), + ), + ); + } + + final bubbleWidth = 55.0 ; + final baseTranslation = ((viewModel.pages.length * bubbleWidth) / 2) - (bubbleWidth / 2) ; + var translation = baseTranslation - (viewModel.activeIndex * bubbleWidth); + + if (viewModel.slideDirection == SlideDirection.leftToRight){ + translation = bubbleWidth * viewModel.slidePercent + translation; + }else if (viewModel.slideDirection == SlideDirection.rightToLeft){ + translation = bubbleWidth * viewModel.slidePercent - translation; + } + + return new Column( + children: [ + new Expanded(child: new Container()), + new Transform( + transform: new Matrix4.translationValues(0, 0.0, 0.0), + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: bubbles, + ), + ), + ], + ); + } +} + +enum SlideDirection{ + leftToRight, + rightToLeft, + none, +} + + +class PagerIndicatorViewModel{ + final List pages; + final int activeIndex; + final SlideDirection slideDirection; + final double slidePercent; + + PagerIndicatorViewModel( + this.pages, + this.activeIndex, + this.slideDirection, + this.slidePercent + ); + + +} + +class PageBubble extends StatelessWidget { + + final PageBubbleViewModel viewModel; + + + PageBubble({ + this.viewModel + }); + + @override + Widget build(BuildContext context) { + return new Container( + width: 55.0, + height: 65.0, + child: new Center( + child: new Container( + width: lerpDouble(20.0,45.0,viewModel.activePercent), + height: lerpDouble(20.0,45.0,viewModel.activePercent), + decoration: new BoxDecoration( + shape: BoxShape.circle, + color: viewModel.isHollow + ? const Color(0x88FFFFFF).withAlpha(0x88 * viewModel.activePercent.round()) + : const Color(0x88FFFFFF), + border: new Border.all( + color: viewModel.isHollow + ? const Color(0x88FFFFFF).withAlpha((0x88 * (1.0 - viewModel.activePercent)).round()) + : Colors.transparent, + width: 3.0, + ), + ), + child: new Opacity( + opacity: viewModel.activePercent, + child: Image.asset( + viewModel.iconAssetPath, + color: viewModel.color, + ), + ), + ), + ), + ); + } +} + + +class PageBubbleViewModel { + final String iconAssetPath; + final Color color; + final bool isHollow; + final double activePercent; + + PageBubbleViewModel ( + this.iconAssetPath, + this.color, + this.isHollow, + this.activePercent, + ); + + +} + diff --git a/lib/views/fourth_page/pages.dart b/lib/views/fourth_page/pages.dart new file mode 100644 index 00000000..5d088e07 --- /dev/null +++ b/lib/views/fourth_page/pages.dart @@ -0,0 +1,171 @@ +import 'package:flutter/material.dart'; + +import '../../routers/application.dart'; +import '../../routers/routers.dart'; +import '../../utils/shared_preferences.dart'; + +final pages = [ + PageViewModel( + const Color(0xFFcd344f), + //'assets/mountain.png', + 'assets/images/p2.png', + 'FlutterGo是什么?', + '【FlutterGo】 是由"阿里拍卖"前端团队几位 Flutter 粉丝,用业余时间开发的一款,用于 Flutter 教学帮助的App,这里没有高大尚的概念,只有一个一个亲历的尝试,用最直观的方式展示的 Flutter 官方demo', + 'assets/images/plane.png'), + PageViewModel( + const Color(0xFF638de3), + //'assets/world.png', + 'assets/images/p1.png', + 'FLutterGo的背景', + '🐢 官网文档示例较不够健全,不够直观\n🐞 运行widget demo要到处翻阅资料\n🐌 英文文档翻译生涩难懂,学习资料太少\n🚀 需要的效果不知道用哪个widget\n', + 'assets/images/calendar.png'), + PageViewModel( + const Color(0xFFFF682D), + //'assets/home.png', + 'assets/images/p3.png', + 'FlutterGo的特点', + '🐡 详解常用widget多达 140+ 个\n🦋 持续迭代追新官方版本\n🐙 配套Demo详解widget用法\n🚀 一站式搞定所有常用widget,开箱即查\n', + 'assets/images/house.png', + ), +]; +SpUtil sp; + +class Page extends StatelessWidget { + final PageViewModel viewModel; + final double percentVisible; + Page({ + this.viewModel, + this.percentVisible = 1.0, + }); + _goHomePage(context) { + Navigator.of(context) + .pushNamedAndRemoveUntil('/home', (Route route) => false); + } + + Widget creatButton( + BuildContext context, String txt, IconData iconName, String type) { + return RaisedButton.icon( + onPressed: () async { + if (type == 'start') { + await SpUtil.getInstance() + ..putBool(SharedPreferencesKeys.showWelcome, false); + _goHomePage(context); + } else if (type == 'goGithub') { + Application.router.navigateTo(context, + '${Routes.webViewPage}?title=${Uri.encodeComponent(txt)} Doc&&url=${Uri.encodeComponent("https://github.com/alibaba/flutter-go")}'); + } + }, + elevation: 10.0, + color: Colors.black26, + // shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.horizontal(left: Radius.circular(20.0))), + //如果不手动设置icon和text颜色,则默认使用foregroundColor颜色 + icon: Icon(iconName, color: Colors.white, size: 14.0), + label: Text( + txt, + maxLines: 1, + style: TextStyle( + color: Colors.white, fontSize: 14, fontWeight: FontWeight.w700), + )); + } + + @override + Widget build(BuildContext context) { + return Stack( + //alignment: const Alignment(1.2, 0.6), + children: [ + Container( + width: double.infinity, + /// height:MediaQuery.of(context).size.height-200.0, + color: viewModel.color, + padding: const EdgeInsets.fromLTRB(0, 0, 0, 0), + child: Opacity( + opacity: percentVisible, + child: ListView( + children: [ + layout(context), + ], + ), + ) + ), + Positioned( + right: -5.0, + top: 2.0, + child: creatButton(context, 'GitHub', Icons.arrow_forward, 'goGithub') + ), + ] + ); + } + + Column layout(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Transform( + transform: Matrix4.translationValues( + 0.0, 50.0 * (1.0 - percentVisible), 0.0), + child: Padding( + padding: EdgeInsets.only(top: 20.0, bottom: 10.0), + child: Image.asset(viewModel.heroAssetPath, + width: 160.0, height: 160.0), + ), + ), + Transform( + transform: Matrix4.translationValues( + 0.0, 30.0 * (1.0 - percentVisible), 0.0), + child: Padding( + padding: EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Text( + viewModel.title, + style: TextStyle( + color: Colors.white, + fontFamily: 'FlamanteRoma', + fontSize: 28.0, + ), + ), + ), + ), + Transform( + transform: Matrix4.translationValues( + 0.0, 30.0 * (1.0 - percentVisible), 0.0), + child: Padding( + padding: EdgeInsets.only(bottom: 10.0), + child: Text( + viewModel.body, + textAlign: TextAlign.center, + style: TextStyle( + height: 1.2, + color: Colors.white, + fontFamily: 'FlamanteRomaItalic', + fontSize: 18.0, + ), + ), + ), + ), +// ButtonBar( +// alignment: MainAxisAlignment.center, +// children: [ +// creatButton(context, '开始使用', Icons.add_circle_outline, 'start'), +// creatButton(context, 'GitHub', Icons.arrow_forward, 'goGithub'), +// ], +// ) + ]); + } +} + +class PageViewModel { + final Color color; + final String heroAssetPath; + final String title; + final String body; + final String iconAssetPath; + + PageViewModel( + this.color, + this.heroAssetPath, + this.title, + this.body, + this.iconAssetPath, + ); +} diff --git a/lib/views/web_page/web_view_page.dart b/lib/views/web_page/web_view_page.dart new file mode 100644 index 00000000..df3793a5 --- /dev/null +++ b/lib/views/web_page/web_view_page.dart @@ -0,0 +1,122 @@ +/// @Author: 一凨 +/// @Date: 2019-01-14 17:44:47 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-14 19:47:14 + +import 'dart:core'; + +import 'package:flutter/material.dart'; +import 'package:flutter_webview_plugin/flutter_webview_plugin.dart'; + +import 'package:flutter_go/model/collection.dart'; +import 'package:flutter_go/event/event_bus.dart'; +import 'package:flutter_go/event/event_model.dart'; + +class WebViewPage extends StatefulWidget { + final String url; + final String title; + + WebViewPage(this.url, this.title); + _WebViewPageState createState() => _WebViewPageState(); +} + +class _WebViewPageState extends State { + bool _hasCollected = false; + String _router = ''; + var _collectionIcons; + CollectionControlModel _collectionControl = new CollectionControlModel(); + + final GlobalKey _scaffoldKey = GlobalKey(); + @override + void initState() { + super.initState(); + _collectionControl + .getRouterByName(Uri.encodeComponent(widget.title.trim())) + .then((list) { + list.forEach((item) { + if (widget.title.trim() == item['name']) { + _router = item['router']; + } + }); + if (mounted) { + setState(() { + _hasCollected = list.length > 0; + }); + } + }); + } + + // 点击收藏按钮 + _getCollection() { + if (_hasCollected) { + // 删除操作 + _collectionControl + .deleteByName(Uri.encodeComponent(widget.title.trim())) + .then((result) { + if (result > 0 && this.mounted) { + setState(() { + _hasCollected = false; + }); + _scaffoldKey.currentState + .showSnackBar(SnackBar(content: Text('已取消收藏'))); + if (ApplicationEvent.event != null) { + ApplicationEvent.event + .fire(CollectionEvent(widget.title, _router, true)); + } + return; + } + print('删除错误'); + }); + } else { + // 插入操作 + _collectionControl + .insert(Collection( + name: Uri.encodeComponent(widget.title.trim()), + router: widget.url)) + .then((result) { + if (this.mounted) { + setState(() { + _hasCollected = true; + }); + + if (ApplicationEvent.event != null) { + ApplicationEvent.event + .fire(CollectionEvent(widget.title, _router, false)); + } + _scaffoldKey.currentState + .showSnackBar(SnackBar(content: Text('收藏成功'))); + } + }); + } + } + + @override + Widget build(BuildContext context) { + if (_hasCollected) { + _collectionIcons = Icons.favorite; + } else { + _collectionIcons = Icons.favorite_border; + } + return Scaffold( + key: _scaffoldKey, + appBar: AppBar( + title: Text(widget.title), + actions: [ + new IconButton( + tooltip: 'goBack home', + onPressed: _getCollection, + icon: Icon( + _collectionIcons, + ), + ), + ], + ), + body: WebviewScaffold( + url: widget.url, + withZoom: false, + withLocalStorage: true, + withJavascript: true, + ), + ); + } +} diff --git a/lib/views/welcome_page/fourth_page.dart b/lib/views/welcome_page/fourth_page.dart new file mode 100644 index 00000000..57e0af06 --- /dev/null +++ b/lib/views/welcome_page/fourth_page.dart @@ -0,0 +1,123 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:flutter_go/views/fourth_page/page_dragger.dart'; +import 'package:flutter_go/views/fourth_page/page_reveal.dart'; +import 'package:flutter_go/views/fourth_page/pager_indicator.dart'; +import 'package:flutter_go/views/fourth_page/pages.dart'; + +class FourthPage extends StatefulWidget { + @override + FourthPageState createState() => new FourthPageState(); +} + +class FourthPageState extends State with TickerProviderStateMixin { + StreamController slideUpdateStream; + AnimatedPageDragger animatedPageDragger; + + int activeIndex = 0; + SlideDirection slideDirection = SlideDirection.none; + int nextPageIndex = 0; + int waitingNextPageIndex = -1; + + double slidePercent = 0.0; + + FourthPageState() { + slideUpdateStream = new StreamController(); + + slideUpdateStream.stream.listen((SlideUpdate event) { + if (mounted) { + setState(() { + if (event.updateType == UpdateType.dragging) { + slideDirection = event.direction; + slidePercent = event.slidePercent; + + if (slideDirection == SlideDirection.leftToRight) { + nextPageIndex = activeIndex - 1; + } else if (slideDirection == SlideDirection.rightToLeft) { + nextPageIndex = activeIndex + 1; + } else { + nextPageIndex = activeIndex; + } + } else if (event.updateType == UpdateType.doneDragging) { + if (slidePercent > 0.5) { + animatedPageDragger = new AnimatedPageDragger( + slideDirection: slideDirection, + transitionGoal: TransitionGoal.open, + slidePercent: slidePercent, + slideUpdateStream: slideUpdateStream, + vsync: this, + ); + } else { + animatedPageDragger = new AnimatedPageDragger( + slideDirection: slideDirection, + transitionGoal: TransitionGoal.close, + slidePercent: slidePercent, + slideUpdateStream: slideUpdateStream, + vsync: this, + ); + + waitingNextPageIndex = activeIndex; + } + + animatedPageDragger.run(); + } else if (event.updateType == UpdateType.animating) { + slideDirection = event.direction; + slidePercent = event.slidePercent; + } else if (event.updateType == UpdateType.doneAnimating) { + if (waitingNextPageIndex != -1) { + nextPageIndex = waitingNextPageIndex; + waitingNextPageIndex = -1; + } else { + activeIndex = nextPageIndex; + } + + slideDirection = SlideDirection.none; + slidePercent = 0.0; + + animatedPageDragger.dispose(); + } + }); + } + }); + } + + @override + void dispose() { + super.dispose(); + slideUpdateStream.close(); + } + + @override + Widget build(BuildContext context) { + return new Stack( + children: [ + new Page( + // page 的主要内容 + viewModel: pages[activeIndex], + percentVisible: 1.0, + ), + new PageReveal( + revealPercent: slidePercent, + child: new Page( + viewModel: pages[nextPageIndex], + percentVisible: slidePercent, + ), + ), + new PagerIndicator( + viewModel: new PagerIndicatorViewModel( + pages, + activeIndex, + slideDirection, + slidePercent, + ), + ), + new PageDragger( + canDragLeftToRight: activeIndex > 0, + canDragRightToLeft: activeIndex < pages.length - 1, + slideUpdateStream: this.slideUpdateStream, + ) + ], + ); + } +} diff --git a/lib/views/welcome_page/index.dart b/lib/views/welcome_page/index.dart new file mode 100644 index 00000000..36576bcb --- /dev/null +++ b/lib/views/welcome_page/index.dart @@ -0,0 +1,31 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 14/01/2019 +/// Time: 23:00 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; + +import 'package:flutter_go/views/welcome_page/fourth_page.dart'; + +class WelcomePage extends StatefulWidget { + WelcomePage({Key key}) : super(key: key); + + @override + _WelcomePageState createState() { + return new _WelcomePageState(); + } +} + +class _WelcomePageState extends State { + + @override + Widget build(BuildContext context) { + return new Container( + color: Colors.white, + child: FourthPage() + ); + } +} diff --git a/lib/views/widget_page/widget_page.dart b/lib/views/widget_page/widget_page.dart new file mode 100644 index 00000000..dc6b0014 --- /dev/null +++ b/lib/views/widget_page/widget_page.dart @@ -0,0 +1,76 @@ +/// Author: 一凨 +/// Date: 2019-01-11 14:39:48 +/// Last Modified by: 一凨 +/// Last Modified time: 2019-01-11 14:40:09 + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/cate_card.dart'; +import 'package:flutter_go/model/cat.dart'; + +class WidgetPage extends StatefulWidget { + final db; + final CatControlModel catModel; + WidgetPage(this.db) + : catModel = new CatControlModel(), + super(); + + @override + SecondPageState createState() => new SecondPageState(catModel); +} + +class SecondPageState extends State with AutomaticKeepAliveClientMixin{ + CatControlModel catModel; + SecondPageState(this.catModel) : super(); + + TextEditingController controller; + String active = 'test'; + String data = '无'; + + List categories = []; + + @override + bool get wantKeepAlive => true; + + @override + void initState() { + super.initState(); + renderCats(); + } + + void renderCats() { + catModel.getList().then((List data) { + if (data.isNotEmpty) { + setState(() { + categories = data; + }); + } + }); + } + + Widget buildGrid() { + // 存放最后的widget + List tiles = []; + for (Cat item in categories) { + tiles.add(new CateCard(category: item)); + } + return new ListView( + children: tiles, + ); + } + + @override + Widget build(BuildContext context) { + super.build(context); + if (categories.length == 0) { + return ListView( + children: [new Container()], + ); + } + return Container( + color: Theme.of(context).backgroundColor, + child: this.buildGrid(), + ); + } + +} diff --git a/lib/widgets/404.dart b/lib/widgets/404.dart index 1ca56170..7a6a0207 100644 --- a/lib/widgets/404.dart +++ b/lib/widgets/404.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; - class WidgetNotFound extends StatelessWidget { Widget build(BuildContext context) { @@ -9,7 +8,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..a2eb5bd0 100644 --- a/lib/widgets/components/Bar/AppBar/demo.dart +++ b/lib/widgets/components/Bar/AppBar/demo.dart @@ -1,18 +1,15 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午7:33 - * email: zhu.yan@alibaba-inc.com - * tartget: AppBar 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午7:33 +/// email: zhu.yan@alibaba-inc.com +/// target: AppBar 的示例 import 'package:flutter/material.dart'; -/* -* 默认 AppBar 的实例 -* index 当前AppBar 的索引值 -* */ +// 默认 AppBar 的实例 +// index 当前AppBar 的索引值 + class AppBarLessDefaultComplex extends StatefulWidget { const AppBarLessDefaultComplex() : super(); @@ -20,9 +17,7 @@ class AppBarLessDefaultComplex extends StatefulWidget { State createState() => _AppBarLessDefaultComplex(); } -/* -* AppBar 默认的实例,有状态 -* */ +// AppBar 默认的实例,有状态 class _AppBarLessDefaultComplex extends State with SingleTickerProviderStateMixin { ScrollController _scrollViewController; TabController _tabController; @@ -30,8 +25,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 +41,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 +73,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"), ], ), ), @@ -95,9 +90,9 @@ class _AppBarLessDefaultComplex extends State with SingleTickerProviderStateMixi } } -/* -* AppBar 默认的实例,无状态 -* */ + +// AppBar 默认的实例,无状态 + class AppBarLessDefaultSimple extends StatelessWidget { final widget; final parent; @@ -107,7 +102,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 eda42fc0..dac6d0b6 100644 --- a/lib/widgets/components/Bar/AppBar/index.dart +++ b/lib/widgets/components/Bar/AppBar/index.dart @@ -1,17 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午7:30 - * email: zhu.yan@alibaba-inc.com - * tartget: AppBar 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午7:30 +/// email: zhu.yan@alibaba-inc.com +/// target: AppBar 的示例 import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; import './demo.dart' as AppBarDemo; +import 'package:flutter_go/components/widget_demo.dart'; const String _Text0 = """### **简介** @@ -48,50 +45,27 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'AppBar', - codeUrl: 'componentss/Bar/AppBar/demo.dart', - contentList: [allDomes(context, this)], + codeUrl: 'components/Bar/AppBar/demo.dart', + contentList: allDomes(context, this), docUrl: 'https://docs.flutter.io/flutter/material/AppBar-class.html', ); } } -/* - * 所有的 AppBar widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDomes(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - AppBarDemo.AppBarLessDefaultSimple(), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text2), - SizedBox(height: 20.0), // 间距 - AppBarDemo.AppBarLessDefaultComplex(), - SizedBox(height: 20.0), // 间距 - ]) - ); +// 所有的 AppBar widget +// context: 运行上下文 +// that: 指向有状态的 StatefulWidget +List allDomes(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + AppBarDemo.AppBarLessDefaultSimple(), + SizedBox(height: 20.0), // 间距 + _Text2, + SizedBox(height: 20.0), // 间距 + AppBarDemo.AppBarLessDefaultComplex(), + SizedBox(height: 20.0), // 间距 + ]; } - -/* -* 带align的text -* */ -Widget textAlignBar(String txt) { - return new Align( - alignment: FractionalOffset.centerLeft, - child: Column( - children: [ - SizedBox(height: 20.0), - MarkdownBody(data: txt) - ]) - ); -} - - diff --git a/lib/widgets/components/Bar/BottomAppBar/demo.dart b/lib/widgets/components/Bar/BottomAppBar/demo.dart index cea79ea4..5473e0da 100644 --- a/lib/widgets/components/Bar/BottomAppBar/demo.dart +++ b/lib/widgets/components/Bar/BottomAppBar/demo.dart @@ -1,17 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午8:56 - * email: zhu.yan@alibaba-inc.com - * tartget: BottomAppBar 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午8:56 +/// email: zhu.yan@alibaba-inc.com +/// target: BottomAppBar 的示例 import 'package:flutter/material.dart'; -/* -* AppBar 默认的实例,无状态 -* */ +// AppBar 默认的实例,无状态 class AppBarLessDefaultSimple extends StatelessWidget { final widget; final parent; @@ -21,7 +17,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 4e70c2f6..132e2ef1 100644 --- a/lib/widgets/components/Bar/BottomAppBar/index.dart +++ b/lib/widgets/components/Bar/BottomAppBar/index.dart @@ -1,16 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午8:53 - * email: zhu.yan@alibaba-inc.com - * tartget: BottomAppBar 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午8:53 +/// email: zhu.yan@alibaba-inc.com +/// target: BottomAppBar 的示例 + +import 'package:flutter_go/components/widget_demo.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; import './demo.dart' as BottomAppBarDemo; const String _Text0 = @@ -38,32 +36,25 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'BottomAppBar', - codeUrl: 'componentss/Bar/BottomAppBar/demo.dart', - contentList: [allDomes(context, this)], + codeUrl: 'components/Bar/BottomAppBar/demo.dart', + contentList: allDomes(context, this), docUrl: 'https://docs.flutter.io/flutter/material/BottomAppBar-class.html', ); } } -/* - * 所有的 BottomAppBar widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDomes(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - BottomAppBarDemo.AppBarLessDefaultSimple(), - SizedBox(height: 20.0), // 间距 - ]) - ); +// 所有的 BottomAppBar widget +// context: 运行上下文 +// that: 指向有状态的 StatefulWidget +List allDomes(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + BottomAppBarDemo.AppBarLessDefaultSimple(), + SizedBox(height: 20.0), // 间距 + ]; } diff --git a/lib/widgets/components/Bar/ButtonBar/demo.dart b/lib/widgets/components/Bar/ButtonBar/demo.dart index 0ce89f0b..fb78c633 100644 --- a/lib/widgets/components/Bar/ButtonBar/demo.dart +++ b/lib/widgets/components/Bar/ButtonBar/demo.dart @@ -1,17 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午11:11 - * email: zhu.yan@alibaba-inc.com - * tartget: ButtonBar 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午11:11 +/// email: zhu.yan@alibaba-inc.com +/// target: ButtonBar 的示例 import 'package:flutter/material.dart'; -/* -* ButtonBar 默认的实例 -* */ +// ButtonBar 默认的实例 class ButtonBarFullDefault extends StatefulWidget { const ButtonBarFullDefault() : super(); @@ -19,9 +15,7 @@ class ButtonBarFullDefault extends StatefulWidget { State createState() => _ButtonBarFullDefault(); } -/* -* ButtonBar 默认的实例,有状态 -* */ +// ButtonBar 默认的实例,有状态 class _ButtonBarFullDefault extends State { @override Widget build(BuildContext context) { @@ -31,9 +25,7 @@ class _ButtonBarFullDefault extends State { } } -/* -* ButtonBar 默认的实例,无状态 -* */ +// ButtonBar 默认的实例,无状态 class ButtonBarLessDefault extends StatelessWidget { final widget; final parent; @@ -44,9 +36,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 bce2b1ce..5078804c 100644 --- a/lib/widgets/components/Bar/ButtonBar/index.dart +++ b/lib/widgets/components/Bar/ButtonBar/index.dart @@ -1,16 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午11:10 - * email: zhu.yan@alibaba-inc.com - * tartget: ButtonBar 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午11:10 +/// email: zhu.yan@alibaba-inc.com +/// target: ButtonBar 的示例 + +import 'package:flutter_go/components/widget_demo.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; import './demo.dart' as ButtonBarDemo; const String _Text0 = @@ -42,29 +40,22 @@ class _DemoState extends State { return WidgetDemo( title: 'ButtonBar', codeUrl: 'components/Bar/ButtonBar/demo.dart', - contentList: [allDomes(context, this)], + contentList: allDomes(context, this), docUrl: 'https://docs.flutter.io/flutter/material/ButtonBar-class.html', ); } } -/* - * 所有的 ButtonBar widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDomes(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - //SizedBox(height: 20.0), // 间距 - ButtonBarDemo.ButtonBarLessDefault() - ]) - ); +// 所有的 ButtonBar widget +// context: 运行上下文 +// that: 指向有状态的 StatefulWidget +List allDomes(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + //SizedBox(height: 20.0), // 间距 + ButtonBarDemo.ButtonBarLessDefault() + ]; } diff --git a/lib/widgets/components/Bar/FlexibleSpaceBar/demo.dart b/lib/widgets/components/Bar/FlexibleSpaceBar/demo.dart index ca1aeb8b..fa2f6d26 100644 --- a/lib/widgets/components/Bar/FlexibleSpaceBar/demo.dart +++ b/lib/widgets/components/Bar/FlexibleSpaceBar/demo.dart @@ -1,18 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午10:38 - * email: zhu.yan@alibaba-inc.com - * tartget: FlexibleSpaceBar 的示例 - */ - +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午10:38 +/// email: zhu.yan@alibaba-inc.com +/// target: FlexibleSpaceBar 的示例 import 'package:flutter/material.dart'; -/* -* Checkbox 默认FlexibleSpaceBar的实例 -* */ +// Checkbox 默认FlexibleSpaceBar的实例 class FlexibleSpaceBarFullDefault extends StatefulWidget { const FlexibleSpaceBarFullDefault() : super(); @@ -20,9 +15,7 @@ class FlexibleSpaceBarFullDefault extends StatefulWidget { State createState() => _FlexibleSpaceBarFullDefault(); } -/* -* FlexibleSpaceBar 默认的实例,有状态 -* */ +// FlexibleSpaceBar 默认的实例,有状态 class _FlexibleSpaceBarFullDefault extends State { @override Widget build(BuildContext context) { @@ -32,9 +25,7 @@ class _FlexibleSpaceBarFullDefault extends State { } } -/* -* FlexibleSpaceBar 默认的实例,无状态 -* */ +// FlexibleSpaceBar 默认的实例,无状态 class FlexibleSpaceBarLessDefault extends StatelessWidget { final widget; final parent; diff --git a/lib/widgets/components/Bar/FlexibleSpaceBar/index.dart b/lib/widgets/components/Bar/FlexibleSpaceBar/index.dart index d6dbc972..078a25b3 100644 --- a/lib/widgets/components/Bar/FlexibleSpaceBar/index.dart +++ b/lib/widgets/components/Bar/FlexibleSpaceBar/index.dart @@ -1,16 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午10:38 - * email: zhu.yan@alibaba-inc.com - * tartget: FlexibleSpaceBar 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午10:38 +/// email: zhu.yan@alibaba-inc.com +/// target: FlexibleSpaceBar 的示例 + +import 'package:flutter_go/components/widget_demo.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; import './demo.dart' as FlexibleSpaceBarDemo; const String _Text0 = @@ -29,7 +27,7 @@ const String _Text1 = class Demo extends StatefulWidget { - static const String routeName = '/components//Bar/FlexibleSpaceBar'; + static const String routeName = '/components/Bar/FlexibleSpaceBar'; @override _DemoState createState() => _DemoState(); @@ -41,30 +39,23 @@ class _DemoState extends State { return WidgetDemo( title: 'FlexibleSpaceBar', codeUrl: 'components/Bar/FlexibleSpaceBar/demo.dart', - contentList: [allDomes(context, this)], + contentList: allDomes(context, this), docUrl: 'https://docs.flutter.io/flutter/material/FlexibleSpaceBar-class.html', ); } } -/* - * 所有的 FlexibleSpaceBar widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDomes(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - FlexibleSpaceBarDemo.FlexibleSpaceBarLessDefault(), - SizedBox(height: 20.0), // 间距 - ]) - ); +// 所有的 FlexibleSpaceBar widget +// context: 运行上下文 +// that: 指向有状态的 StatefulWidget +List allDomes(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + FlexibleSpaceBarDemo.FlexibleSpaceBarLessDefault(), + SizedBox(height: 20.0), // 间距 + ]; } diff --git a/lib/widgets/components/Bar/SliverAppBar/demo.dart b/lib/widgets/components/Bar/SliverAppBar/demo.dart index 3bc2c5fb..dec30849 100644 --- a/lib/widgets/components/Bar/SliverAppBar/demo.dart +++ b/lib/widgets/components/Bar/SliverAppBar/demo.dart @@ -1,17 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午4:11 - * email: zhu.yan@alibaba-inc.com - * tartget: SliverAppBar 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午4:11 +/// email: zhu.yan@alibaba-inc.com +/// target: SliverAppBar 的示例 import 'package:flutter/material.dart'; -/* -* 默认 SliverAppBar 的实例 -* */ +// 默认 SliverAppBar 的实例 class SliverAppBarFullDefault extends StatefulWidget { const SliverAppBarFullDefault() : super(); @@ -19,9 +15,7 @@ class SliverAppBarFullDefault extends StatefulWidget { State createState() => _SliverAppBarFullDefault(); } -/* -* SliverAppBar 默认的实例,有状态 -* */ +// SliverAppBar 默认的实例,有状态 class _SliverAppBarFullDefault extends State { @override Widget build(BuildContext context) { @@ -31,9 +25,7 @@ class _SliverAppBarFullDefault extends State { } } -/* -* SliverAppBar 默认的实例,无状态 -* */ +// SliverAppBar 默认的实例,无状态 class SliverAppBarLessDefault extends StatelessWidget { // final widget; // final parent; @@ -44,11 +36,11 @@ 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( + child: NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [ SliverAppBar( @@ -89,7 +81,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 +93,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 +119,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 4205f09d..9ca28d7f 100644 --- a/lib/widgets/components/Bar/SliverAppBar/index.dart +++ b/lib/widgets/components/Bar/SliverAppBar/index.dart @@ -1,16 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午4:10 - * email: zhu.yan@alibaba-inc.com - * tartget: SliverAppBar 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午4:10 +/// email: zhu.yan@alibaba-inc.com +/// target: SliverAppBar 的示例 + +import 'package:flutter_go/components/widget_demo.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; import './demo.dart' as SliverAppBarDemo; const String _Text0 = @@ -40,45 +38,23 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'SliverAppBar', - codeUrl: 'componentss/Bar/SliverAppBar/demo.dart', - contentList:[allDomes(context, this)], + codeUrl: 'components/Bar/SliverAppBar/demo.dart', + contentList: allDomes(context, this), docUrl: 'https://docs.flutter.io/flutter/widgets/SliverAppBar-class.html', ); } } -/* - * 所有的 SliverAppBar widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDomes(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - SliverAppBarDemo.SliverAppBarLessDefault() - ]) - ); +// 所有的 SliverAppBar widget +// context: 运行上下文 +// that: 指向有状态的 StatefulWidget +List allDomes(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + SliverAppBarDemo.SliverAppBarLessDefault() + ]; } -/* -* 带align的text -* */ -Widget textAlignBar(String txt) { - return new Align( - alignment: FractionalOffset.centerLeft, - child: Column( - children: [ - SizedBox(height: 20.0), - MarkdownBody(data: txt) - ]) - ); -} - - diff --git a/lib/widgets/components/Bar/SnackBar/demo.dart b/lib/widgets/components/Bar/SnackBar/demo.dart index d4413982..0f463371 100644 --- a/lib/widgets/components/Bar/SnackBar/demo.dart +++ b/lib/widgets/components/Bar/SnackBar/demo.dart @@ -1,18 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/2 - * Time: 上午12:07 - * email: zhu.yan@alibaba-inc.com - * tartget: SnackBar 的示例 - */ - +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/2 +/// Time: 上午12:07 +/// email: zhu.yan@alibaba-inc.com +/// target: SnackBar 的示例 import 'package:flutter/material.dart'; -/* -* SnackBar 默认的实例,无状态 -* */ +// SnackBar 默认的实例,无状态 class SnackBarLessDefault extends StatelessWidget { final widget; final parent; @@ -23,15 +18,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 +38,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 4e7adbb2..e476237b 100644 --- a/lib/widgets/components/Bar/SnackBar/index.dart +++ b/lib/widgets/components/Bar/SnackBar/index.dart @@ -1,16 +1,12 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/2 - * Time: 上午12:06 - * email: zhu.yan@alibaba-inc.com - * tartget: SnackBar 的示例 - */ -import '../../../../common/widget_demo.dart'; - +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/2 +/// Time: 上午12:06 +/// email: zhu.yan@alibaba-inc.com +/// target: SnackBar 的示例 import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as SnackBarDemo; const String _Text0 = @@ -40,46 +36,23 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'SnackBar', - codeUrl: 'componentss/Bar/SnackBar/demo.dart', - contentList: [allDomes(context, this)], + codeUrl: 'components/Bar/SnackBar/demo.dart', + contentList: allDomes(context, this), docUrl: 'https://docs.flutter.io/flutter/material/SnackBar-class.html', ); } } -/* - * 所有的 SnackBar widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDomes(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - SnackBarDemo.SnackBarLessDefault(), - SizedBox(height: 20.0), // 间距 - ]) - ); -} - -/* -* 带align的text -* */ -Widget textAlignBar(String txt) { - return new Align( - alignment: FractionalOffset.centerLeft, - child: Column( - children: [ - SizedBox(height: 20.0), - MarkdownBody(data: txt) - ]) - ); -} - - +// 所有的 SnackBar widget +// context: 运行上下文 +// that: 指向有状态的 StatefulWidget +List allDomes(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + SnackBarDemo.SnackBarLessDefault(), + SizedBox(height: 20.0), // 间距 + ]; +} \ No newline at end of file diff --git a/lib/widgets/components/Bar/SnackBarAction/demo.dart b/lib/widgets/components/Bar/SnackBarAction/demo.dart index e4c4547f..9db5b0a6 100644 --- a/lib/widgets/components/Bar/SnackBarAction/demo.dart +++ b/lib/widgets/components/Bar/SnackBarAction/demo.dart @@ -1,30 +1,27 @@ -/** - * Created with Android Studio. - * User: sanfan.hx - * Date: 2019/1/6 - * Time: 下午17:08 - * email: sanfan.hx@alibaba-inc.com - * tartget: SnackBarAction 的示例 - */ +/// Created with Android Studio. +/// User: sanfan.hx +/// Date: 2019/1/6 +/// Time: 下午17:08 +/// email: sanfan.hx@alibaba-inc.com +/// target: SnackBarAction 的示例 import 'package:flutter/material.dart'; - class SnackBarActionDemo extends StatefulWidget { _Demo createState() => _Demo(); } class _Demo extends State { Widget build(BuildContext context) { - return new Center( - child: new Column( + return Center( + child: Column( children: [ - new GestureDetector( - onTap: () { + new RaisedButton( + onPressed: () { final snackBar = new SnackBar( content: new Text('这是一个SnackBar, 右侧有SnackBarAction, 3秒后消失'), backgroundColor:Color(0xffc91b3a), - action: new SnackBarAction( // 提示信息上添加一个撤消的按钮 + action: SnackBarAction( // 提示信息上添加一个撤消的按钮 textColor:Colors.white, label: '撤消', onPressed: () { @@ -37,10 +34,10 @@ class _Demo extends State { Scaffold.of(context).showSnackBar(snackBar); }, - child: new Text('点我显示有action的SnackBar'), + child: Text('点我显示有action的SnackBar'), ), - new GestureDetector( - onTap: () async { + new RaisedButton( + onPressed: () async { final snackBar = new SnackBar( content: new Text('右侧无SnackBarAction, 3秒后消失'), backgroundColor:Color(0xffc91b3a), @@ -49,7 +46,7 @@ class _Demo extends State { ); Scaffold.of(context).showSnackBar(snackBar); }, - child: new Text('点我显示无SnackBarAction的SnackBar'), + child: Text('点我显示无SnackBarAction的SnackBar'), ), ], ) diff --git a/lib/widgets/components/Bar/SnackBarAction/index.dart b/lib/widgets/components/Bar/SnackBarAction/index.dart index 4d213c0c..7920ea7c 100644 --- a/lib/widgets/components/Bar/SnackBarAction/index.dart +++ b/lib/widgets/components/Bar/SnackBarAction/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: sanfan.hx - * Date: 2019/1/6 - * Time: 下午17:08 - * email: sanfan.hx@alibaba-inc.com - * tartget: SnackBarAction 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: sanfan.hx +/// Date: 2019/1/6 +/// Time: 下午17:08 +/// email: sanfan.hx@alibaba-inc.com +/// target: SnackBarAction 的示例 + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as SnackBarDemo; const String _Text0 = """ diff --git a/lib/widgets/components/Bar/TabBar/demo.dart b/lib/widgets/components/Bar/TabBar/demo.dart index 83caba93..6b706862 100644 --- a/lib/widgets/components/Bar/TabBar/demo.dart +++ b/lib/widgets/components/Bar/TabBar/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/6 - * Time: 下午7:33 - * email: sanfann@alibaba-inc.com - * tartget: TabBar 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/6 +/// Time: 下午7:33 +/// email: sanfann@alibaba-inc.com +/// target: TabBar 的示例 import 'package:flutter/material.dart'; @@ -16,9 +14,7 @@ class TabBarDemo extends StatefulWidget { State createState() => _TabBarDemo(); } -/* -* AppBar 默认的实例,有状态 -* */ +// AppBar 默认的实例,有状态 class _TabBarDemo extends State with SingleTickerProviderStateMixin { ScrollController _scrollViewController; TabController _tabController; @@ -26,8 +22,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 +38,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/Bar/TabBar/index.dart b/lib/widgets/components/Bar/TabBar/index.dart index bb2b364d..f4c16731 100644 --- a/lib/widgets/components/Bar/TabBar/index.dart +++ b/lib/widgets/components/Bar/TabBar/index.dart @@ -1,14 +1,13 @@ -/** - * Created with Android Studio. - * User: sanfan.hx - * Date: 2019/1/6 - * Time: 下午17:08 - * email: sanfan.hx@alibaba-inc.com - * tartget: SnackBarAction 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: sanfan.hx +/// Date: 2019/1/6 +/// Time: 下午17:08 +/// email: sanfan.hx@alibaba-inc.com +/// target: SnackBarAction 的示例 + import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String _Text0 = """ @@ -57,7 +56,7 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'TabBar', - codeUrl: 'components/Bar/TabBar/index.dart', + codeUrl: 'components/Bar/TabBar/demo.dart', contentList: [ _Text0, TabBarDemo() diff --git a/lib/widgets/components/Bar/index.dart b/lib/widgets/components/Bar/index.dart index 10b985bc..b93f7f68 100644 --- a/lib/widgets/components/Bar/index.dart +++ b/lib/widgets/components/Bar/index.dart @@ -1,24 +1,24 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/12/27 - * Time: 下午2:50 - * email: zhu.yan@alibaba-inc.com - * tartget: FlatButton 的示例 - */ -import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/27 +/// Time: 下午2:50 +/// email: zhu.yan@alibaba-inc.com +/// target: Bar 的示例 -import 'SliverAppBar/index.dart' as SliverAppBar; +import "package:flutter/material.dart"; + +import '../../../model/widget.dart'; import 'AppBar/index.dart' as AppBar; import 'BottomAppBar/index.dart' as BottomAppBar; -import 'FlexibleSpaceBar/index.dart' as FlexibleSpaceBar; import 'ButtonBar/index.dart' as ButtonBar; +import 'FlexibleSpaceBar/index.dart' as FlexibleSpaceBar; +import 'SliverAppBar/index.dart' as SliverAppBar; import 'SnackBar/index.dart' as SnackBar; import 'SnackBarAction/index.dart' as SnackBarAction; import 'TabBar/index.dart' as TabBar; + List widgetPoints = [ WidgetPoint( name: 'AppBar', diff --git a/lib/widgets/components/Card/Card/demo.dart b/lib/widgets/components/Card/Card/demo.dart index 107a6bd5..3a1d4269 100644 --- a/lib/widgets/components/Card/Card/demo.dart +++ b/lib/widgets/components/Card/Card/demo.dart @@ -1,17 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午2:57 - * email: zhu.yan@alibaba-inc.com - * tartget: Card 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午2:57 +/// email: zhu.yan@alibaba-inc.com +/// target: Card 的示例 import 'package:flutter/material.dart'; -/* -* Checkbox 默认Card的实例 -* */ + +/// Checkbox 默认Card的实例 class CardFullDefault extends StatefulWidget { const CardFullDefault() : super(); @@ -19,9 +16,8 @@ class CardFullDefault extends StatefulWidget { State createState() => _CardFullDefault(); } -/* -* Card 默认的实例,有状态 -* */ + +/// Card 默认的实例,有状态 class _CardFullDefault extends State { @override Widget build(BuildContext context) { @@ -31,9 +27,7 @@ class _CardFullDefault extends State { } } -/* -* Card 默认的实例,无状态 -* */ +/// Card 默认的实例,无状态 class CardLessDefault extends StatelessWidget { final widget; final parent; @@ -50,9 +44,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, @@ -68,11 +62,11 @@ class CardLessDefault extends StatelessWidget { children: [ FlatButton( child: const Text('BUY TICKETS',style: TextStyle(color: Colors.black, fontSize: 14.0)), - onPressed: () { /* ... */ }, + onPressed: () { }, ), FlatButton( child: const Text('LISTEN',style: TextStyle(color: Colors.black, fontSize: 14.0)), - onPressed: () { /* ... */ }, + onPressed: () { }, ), ], ), diff --git a/lib/widgets/components/Card/Card/index.dart b/lib/widgets/components/Card/Card/index.dart index 0ee2d452..be83fe19 100644 --- a/lib/widgets/components/Card/Card/index.dart +++ b/lib/widgets/components/Card/Card/index.dart @@ -1,16 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午2:56 - * email: zhu.yan@alibaba-inc.com - * tartget: Card 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午2:56 +/// email: zhu.yan@alibaba-inc.com +/// target: Card 的示例 import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as CardDemo; const String _Text0 = @@ -39,29 +36,23 @@ class _DemoState extends State { return WidgetDemo( title: 'Card', codeUrl: 'components/Card/Card/demo.dart', - contentList: [allDomes(context, this)], + contentList: allDomes(context, this), docUrl: 'https://docs.flutter.io/flutter/material/Card-class.html', ); } } -/* - * 所有的 Card widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDomes(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - CardDemo.CardLessDefault() - ]) - ); + +/// 所有的 Card widget +/// context: 运行上下文 +/// that: 指向有状态的 StatefulWidget +List allDomes(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + CardDemo.CardLessDefault() + ]; } diff --git a/lib/widgets/components/Card/index.dart b/lib/widgets/components/Card/index.dart index f226c8e5..91a73932 100644 --- a/lib/widgets/components/Card/index.dart +++ b/lib/widgets/components/Card/index.dart @@ -1,14 +1,13 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/12/27 - * Time: 下午2:50 - * email: zhu.yan@alibaba-inc.com - * tartget: FlatButton 的示例 - */ -import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/27 +/// Time: 下午2:50 +/// email: zhu.yan@alibaba-inc.com +/// target: Card 的示例 +import "package:flutter/material.dart"; + +import '../../../model/widget.dart'; import 'Card/index.dart' as Card; List widgetPoints = [ diff --git a/lib/widgets/components/Chip/Chip/demo.dart b/lib/widgets/components/Chip/Chip/demo.dart index ad128cb4..3ba411cb 100644 --- a/lib/widgets/components/Chip/Chip/demo.dart +++ b/lib/widgets/components/Chip/Chip/demo.dart @@ -1,9 +1,7 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-18 11:40:57 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-14 16:50:43 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-18 11:40:57 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-14 16:50:43 import 'package:flutter/material.dart'; diff --git a/lib/widgets/components/Chip/Chip/index.dart b/lib/widgets/components/Chip/Chip/index.dart index ac24f469..709e5fac 100644 --- a/lib/widgets/components/Chip/Chip/index.dart +++ b/lib/widgets/components/Chip/Chip/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-18 11:40:57 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-18 15:13:23 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-18 11:40:57 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-18 15:13:23 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Chip/ChipTheme/demo.dart b/lib/widgets/components/Chip/ChipTheme/demo.dart index fb4da45d..a764a58d 100644 --- a/lib/widgets/components/Chip/ChipTheme/demo.dart +++ b/lib/widgets/components/Chip/ChipTheme/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-18 15:14:10 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-18 19:15:25 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-18 15:14:10 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-18 19:15:25 + import 'package:flutter/material.dart'; class ChipThemeDemo extends StatefulWidget { diff --git a/lib/widgets/components/Chip/ChipTheme/index.dart b/lib/widgets/components/Chip/ChipTheme/index.dart index e4ff62fe..cc0814f7 100644 --- a/lib/widgets/components/Chip/ChipTheme/index.dart +++ b/lib/widgets/components/Chip/ChipTheme/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-18 15:14:03 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-18 15:14:03 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-18 15:14:03 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-18 15:14:03 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Chip/ChipThemeData/demo.dart b/lib/widgets/components/Chip/ChipThemeData/demo.dart index 7afd3172..9cb2021d 100644 --- a/lib/widgets/components/Chip/ChipThemeData/demo.dart +++ b/lib/widgets/components/Chip/ChipThemeData/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-18 15:14:10 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-18 19:39:41 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-18 15:14:10 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-18 19:39:41 + import 'package:flutter/material.dart'; class ChipThemeDemo extends StatefulWidget { diff --git a/lib/widgets/components/Chip/ChipThemeData/index.dart b/lib/widgets/components/Chip/ChipThemeData/index.dart index 908b4c6f..86c9690c 100644 --- a/lib/widgets/components/Chip/ChipThemeData/index.dart +++ b/lib/widgets/components/Chip/ChipThemeData/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-18 15:14:03 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-18 17:38:56 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-18 15:14:03 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-18 17:38:56 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Chip/ChoiceChip/demo.dart b/lib/widgets/components/Chip/ChoiceChip/demo.dart index 85d5acce..3aabd30f 100644 --- a/lib/widgets/components/Chip/ChoiceChip/demo.dart +++ b/lib/widgets/components/Chip/ChoiceChip/demo.dart @@ -1,9 +1,7 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-19 15:13:24 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-20 19:32:10 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-19 15:13:24 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-20 19:32:10 import 'package:flutter/material.dart'; diff --git a/lib/widgets/components/Chip/ChoiceChip/index.dart b/lib/widgets/components/Chip/ChoiceChip/index.dart index 62f43080..fcc53af4 100644 --- a/lib/widgets/components/Chip/ChoiceChip/index.dart +++ b/lib/widgets/components/Chip/ChoiceChip/index.dart @@ -1,12 +1,10 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-19 15:13:29 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 10:22:57 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-19 15:13:29 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 10:22:57 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Chip/FilterChip/demo.dart b/lib/widgets/components/Chip/FilterChip/demo.dart index f9ea3344..ccac842a 100644 --- a/lib/widgets/components/Chip/FilterChip/demo.dart +++ b/lib/widgets/components/Chip/FilterChip/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-20 10:19:46 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-20 14:09:31 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-20 10:19:46 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-20 14:09:31 + import 'package:flutter/material.dart'; class FilterChipDemo extends StatefulWidget { diff --git a/lib/widgets/components/Chip/FilterChip/index.dart b/lib/widgets/components/Chip/FilterChip/index.dart index a7a7db79..eb069e7f 100644 --- a/lib/widgets/components/Chip/FilterChip/index.dart +++ b/lib/widgets/components/Chip/FilterChip/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-20 10:19:55 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 10:25:22 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-20 10:19:55 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 10:25:22 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Chip/RawChip/demo.dart b/lib/widgets/components/Chip/RawChip/demo.dart index a6d5d6ad..f6d37f3b 100644 --- a/lib/widgets/components/Chip/RawChip/demo.dart +++ b/lib/widgets/components/Chip/RawChip/demo.dart @@ -1,13 +1,10 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-20 20:30:36 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 11:23:21 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-20 20:30:36 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 11:23:21 import 'package:flutter/material.dart'; - class FilterChipDemo extends StatefulWidget { _FilterChipDemoState createState() => _FilterChipDemoState(); } @@ -43,7 +40,6 @@ Iterable get _rawChipWidget sync*{ _lists.remove(value); }); - }, ), diff --git a/lib/widgets/components/Chip/RawChip/index.dart b/lib/widgets/components/Chip/RawChip/index.dart index abebb064..c57c49ca 100644 --- a/lib/widgets/components/Chip/RawChip/index.dart +++ b/lib/widgets/components/Chip/RawChip/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-20 20:30:41 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 11:35:51 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-20 20:30:41 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 11:35:51 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Chip/index.dart b/lib/widgets/components/Chip/index.dart index 8fdb845c..053c51ab 100644 --- a/lib/widgets/components/Chip/index.dart +++ b/lib/widgets/components/Chip/index.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +import '../../../model/widget.dart'; import 'Chip/index.dart' as Chip; import 'ChipTheme/index.dart' as ChipTheme; import 'ChipThemeData/index.dart' as ChipThemeData; @@ -9,7 +9,6 @@ import 'FilterChip/index.dart' as FilterChip; import 'InputChip/index.dart' as InputChip; import 'RawChip/index.dart' as RawChip; - List widgetPoints = [ WidgetPoint( name: 'Chip', diff --git a/lib/widgets/components/Chip/inputChip/demo.dart b/lib/widgets/components/Chip/inputChip/demo.dart index 623d3b19..04739e70 100644 --- a/lib/widgets/components/Chip/inputChip/demo.dart +++ b/lib/widgets/components/Chip/inputChip/demo.dart @@ -1,13 +1,10 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-20 13:32:22 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 11:31:12 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-20 13:32:22 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 11:31:12 import 'package:flutter/material.dart'; - class FilterChipDemo extends StatefulWidget { _FilterChipDemoState createState() => _FilterChipDemoState(); } diff --git a/lib/widgets/components/Chip/inputChip/index.dart b/lib/widgets/components/Chip/inputChip/index.dart index af0f09ab..f7d0a84b 100644 --- a/lib/widgets/components/Chip/inputChip/index.dart +++ b/lib/widgets/components/Chip/inputChip/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-20 13:32:15 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 10:42:05 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-20 13:32:15 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 10:42:05 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Dialog/AboutDialog/demo.dart b/lib/widgets/components/Dialog/AboutDialog/demo.dart index df03d3a2..5f980907 100644 --- a/lib/widgets/components/Dialog/AboutDialog/demo.dart +++ b/lib/widgets/components/Dialog/AboutDialog/demo.dart @@ -1,15 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - class AboutDialogDemo extends StatefulWidget { _Demo createState() => _Demo(); } @@ -19,9 +16,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 +26,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/AboutDialog/index.dart b/lib/widgets/components/Dialog/AboutDialog/index.dart index 6b88c60c..718b582b 100644 --- a/lib/widgets/components/Dialog/AboutDialog/index.dart +++ b/lib/widgets/components/Dialog/AboutDialog/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ @@ -35,7 +35,7 @@ class _DemoState extends State { @override Widget build(BuildContext context) { return WidgetDemo( - title: 'AlertDialog', + title: 'AboutDialog', codeUrl: 'components/Dialog/AboutDialog/demo.dart', contentList: [ _Text0, diff --git a/lib/widgets/components/Dialog/AlertDialog/demo.dart b/lib/widgets/components/Dialog/AlertDialog/demo.dart index 8d68c838..616aa135 100644 --- a/lib/widgets/components/Dialog/AlertDialog/demo.dart +++ b/lib/widgets/components/Dialog/AlertDialog/demo.dart @@ -1,21 +1,14 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; +class AlertDialogDemo extends StatelessWidget{ -class AlertDialogDemo extends StatefulWidget { - _Demo createState() => _Demo(); -} - -class _Demo extends State { - void showAlertDialog(BuildContext context) { showDialog( context: context, @@ -122,12 +115,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 ), @@ -141,3 +134,4 @@ class _Demo extends State { }); } } + diff --git a/lib/widgets/components/Dialog/AlertDialog/index.dart b/lib/widgets/components/Dialog/AlertDialog/index.dart index e9364564..a067842c 100644 --- a/lib/widgets/components/Dialog/AlertDialog/index.dart +++ b/lib/widgets/components/Dialog/AlertDialog/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ diff --git a/lib/widgets/components/Dialog/Dialog/demo.dart b/lib/widgets/components/Dialog/Dialog/demo.dart index 4f7f3818..31d1385c 100644 --- a/lib/widgets/components/Dialog/Dialog/demo.dart +++ b/lib/widgets/components/Dialog/Dialog/demo.dart @@ -1,15 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - class DialogDemo extends StatefulWidget { _Demo createState() => _Demo(); } @@ -42,12 +39,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 +105,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/Dialog/index.dart b/lib/widgets/components/Dialog/Dialog/index.dart index 626cdc92..8df84a94 100644 --- a/lib/widgets/components/Dialog/Dialog/index.dart +++ b/lib/widgets/components/Dialog/Dialog/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ diff --git a/lib/widgets/components/Dialog/SimpleDialog/demo.dart b/lib/widgets/components/Dialog/SimpleDialog/demo.dart index 9e9b002a..58f41ad1 100644 --- a/lib/widgets/components/Dialog/SimpleDialog/demo.dart +++ b/lib/widgets/components/Dialog/SimpleDialog/demo.dart @@ -1,15 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - class SimpleDialogDemo extends StatefulWidget { _Demo createState() => _Demo(); } @@ -20,17 +17,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 +38,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/Dialog/SimpleDialog/index.dart b/lib/widgets/components/Dialog/SimpleDialog/index.dart index 4f607d73..44a94023 100644 --- a/lib/widgets/components/Dialog/SimpleDialog/index.dart +++ b/lib/widgets/components/Dialog/SimpleDialog/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ diff --git a/lib/widgets/components/Dialog/index.dart b/lib/widgets/components/Dialog/index.dart index 3415d3c6..91c5d133 100644 --- a/lib/widgets/components/Dialog/index.dart +++ b/lib/widgets/components/Dialog/index.dart @@ -1,4 +1,5 @@ import "package:flutter/material.dart"; + import '../../../model/widget.dart'; import 'AlertDialog/index.dart' as AlertDialog; import 'Dialog/index.dart' as Dialog; diff --git a/lib/widgets/components/Grid/GridPaper/demo.dart b/lib/widgets/components/Grid/GridPaper/demo.dart index 5a0f17e8..129f9324 100644 --- a/lib/widgets/components/Grid/GridPaper/demo.dart +++ b/lib/widgets/components/Grid/GridPaper/demo.dart @@ -1,15 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - class GridPaperDemo extends StatefulWidget { _Demo createState() => _Demo(); } @@ -21,7 +18,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 +37,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/GridPaper/index.dart b/lib/widgets/components/Grid/GridPaper/index.dart index 1044d44a..abc6eabc 100644 --- a/lib/widgets/components/Grid/GridPaper/index.dart +++ b/lib/widgets/components/Grid/GridPaper/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ diff --git a/lib/widgets/components/Grid/GridTile/demo.dart b/lib/widgets/components/Grid/GridTile/demo.dart index 2936e155..06e3fcec 100644 --- a/lib/widgets/components/Grid/GridTile/demo.dart +++ b/lib/widgets/components/Grid/GridTile/demo.dart @@ -1,27 +1,22 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - class GridTileDemo extends StatefulWidget { _Demo createState() => _Demo(); } class _Demo extends State { - - Widget build(BuildContext context) { return Container( height: 400, color: Color(0xffc91b3a), - child: new GridView.count( + child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 10.0, crossAxisSpacing: 4.0, @@ -36,21 +31,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/GridTile/index.dart b/lib/widgets/components/Grid/GridTile/index.dart index f1b119b1..1f4f809f 100644 --- a/lib/widgets/components/Grid/GridTile/index.dart +++ b/lib/widgets/components/Grid/GridTile/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ diff --git a/lib/widgets/components/Grid/GridTileBar/demo.dart b/lib/widgets/components/Grid/GridTileBar/demo.dart index adf85f36..22628299 100644 --- a/lib/widgets/components/Grid/GridTileBar/demo.dart +++ b/lib/widgets/components/Grid/GridTileBar/demo.dart @@ -1,27 +1,22 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - class GridTileDemo extends StatefulWidget { _Demo createState() => _Demo(); } class _Demo extends State { - - Widget build(BuildContext context) { return Container( height: 400, color: Color(0xffc91b3a), - child: new GridView.count( + child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 10.0, crossAxisSpacing: 4.0, @@ -38,21 +33,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/GridTileBar/index.dart b/lib/widgets/components/Grid/GridTileBar/index.dart index b19b8abd..3579656b 100644 --- a/lib/widgets/components/Grid/GridTileBar/index.dart +++ b/lib/widgets/components/Grid/GridTileBar/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ diff --git a/lib/widgets/components/Grid/GridView/demo.dart b/lib/widgets/components/Grid/GridView/demo.dart index adf85f36..a7bbeb16 100644 --- a/lib/widgets/components/Grid/GridView/demo.dart +++ b/lib/widgets/components/Grid/GridView/demo.dart @@ -1,15 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - class GridTileDemo extends StatefulWidget { _Demo createState() => _Demo(); } @@ -21,7 +18,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 +35,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/index.dart b/lib/widgets/components/Grid/GridView/index.dart index dac9fcd2..0f8beb0d 100644 --- a/lib/widgets/components/Grid/GridView/index.dart +++ b/lib/widgets/components/Grid/GridView/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ diff --git a/lib/widgets/components/Grid/SliverGrid/demo.dart b/lib/widgets/components/Grid/SliverGrid/demo.dart index 8950e17f..f8bfb19a 100644 --- a/lib/widgets/components/Grid/SliverGrid/demo.dart +++ b/lib/widgets/components/Grid/SliverGrid/demo.dart @@ -1,15 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:31 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - class SliverGridDemo extends StatefulWidget { _Demo createState() => _Demo(); } @@ -17,34 +14,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/Grid/SliverGrid/index.dart b/lib/widgets/components/Grid/SliverGrid/index.dart index 6b8c2a6a..c3a50dcf 100644 --- a/lib/widgets/components/Grid/SliverGrid/index.dart +++ b/lib/widgets/components/Grid/SliverGrid/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ @@ -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/Grid/index.dart b/lib/widgets/components/Grid/index.dart index f2f4b06c..4d58edb0 100644 --- a/lib/widgets/components/Grid/index.dart +++ b/lib/widgets/components/Grid/index.dart @@ -1,19 +1,19 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 19:40 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:31 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import "package:flutter/material.dart"; + import '../../../model/widget.dart'; import 'GridTile/index.dart' as GridTile; import 'GridView/index.dart' as GridView; import 'GridTileBar/index.dart' as GridTileBar; import 'GridPaper/index.dart' as GridPaper; import 'SliverGrid/index.dart' as SliverGrid; + List widgetPoints = [ WidgetPoint( name: 'GridTile', diff --git a/lib/widgets/components/LIst/AnimatedList/demo.dart b/lib/widgets/components/LIst/AnimatedList/demo.dart index 04617de1..a4c328f3 100644 --- a/lib/widgets/components/LIst/AnimatedList/demo.dart +++ b/lib/widgets/components/LIst/AnimatedList/demo.dart @@ -1,7 +1,6 @@ - - import 'package:flutter/material.dart'; -import './model.dart'; + +import 'package:flutter_go/widgets/components/List/AnimatedList/model.dart'; class AnimatedListFullDefault extends StatefulWidget { AnimatedListFullDefault({Key key, this.parent}) : super(key: key); @@ -11,11 +10,10 @@ class AnimatedListFullDefault extends StatefulWidget { _AnimatedListFullDefault createState() => _AnimatedListFullDefault(); } -/* -* AnimatedList 默认的实例,有状态 -* */ + +/// 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 +24,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, @@ -43,14 +41,16 @@ class _AnimatedListFullDefault extends State { void remove() { if (_selectedItem != null) { _list.removeAt(_list.indexOf(_selectedItem)); - setState(() { - _selectedItem = null; - }); + if(mounted) { + setState(() { + _selectedItem = null; + }); + } } } 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 39a82dcf..23992c1e 100644 --- a/lib/widgets/components/LIst/AnimatedList/index.dart +++ b/lib/widgets/components/LIst/AnimatedList/index.dart @@ -1,18 +1,15 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/31 - * Time: 下午9:48 - * email: zhu.yan@alibaba-inc.com - * tartget: AnimatedList 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/31 +/// Time: 下午9:48 +/// email: zhu.yan@alibaba-inc.com +/// target: AnimatedList 的示例 + import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; - //var _AnimatedListFullDefault = AnimatedListDemo.AnimatedListFullDefault; GlobalKey globalKey = GlobalKey(); @@ -32,7 +29,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(); @@ -45,45 +42,39 @@ class _DemoState extends State { return WidgetDemo( title: 'AnimatedList', codeUrl: 'components/List/AnimatedList/demo.dart', - contentList: [allDemoBoxs(context, this)], + contentList: allDemoBoxs(context, this), docUrl: 'https://docs.flutter.io/flutter/widgets/AnimatedList-class.html', ); } } -/* - * 所有的 AnimatedList widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDemoBoxs(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - assistButtonLeft(that), - SizedBox(width: 20.0), // 间距 - assistButtonRight(that), - ], - ), - //AnimatedListDemo.AnimatedListFullDefault(key:globalKey,parent:context), - AnimatedListFullDefault(key:globalKey,parent:that), - SizedBox(height: 20.0), // 间距 - ]) - ); + +/// 所有的 AnimatedList widget +/// context: 运行上下文 +/// that: 指向有状态的 StatefulWidget +List allDemoBoxs(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), + // 间距 + _Text1, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + assistButtonLeft(that), + SizedBox(width: 20.0), // 间距 + assistButtonRight(that), + ], + ), + //AnimatedListDemo.AnimatedListFullDefault(key:globalKey,parent:context), + AnimatedListFullDefault(key: globalKey, parent: that), + SizedBox(height: 20.0), // 间距 + ]; } -/* -* 演示辅助按钮 -* */ + +// 演示辅助按钮 Widget assistButtonLeft(that) { return FloatingActionButton( // 文本内容 @@ -98,9 +89,8 @@ Widget assistButtonLeft(that) { ); } -/* -* 演示辅助按钮 -* */ + +// 演示辅助按钮 Widget assistButtonRight(that) { return FloatingActionButton( // 文本内容 diff --git a/lib/widgets/components/LIst/AnimatedList/model.dart b/lib/widgets/components/LIst/AnimatedList/model.dart index d990eb72..3b0b3d59 100644 --- a/lib/widgets/components/LIst/AnimatedList/model.dart +++ b/lib/widgets/components/LIst/AnimatedList/model.dart @@ -1,21 +1,10 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/12/31 - * Time: 下午10:15 - * email: zhu.yan@alibaba-inc.com - * tartget: FlatButton 的示例 - */ -/// Keeps a Dart List in sync with an AnimatedList. -/// -/// The [insert] and [removeAt] methods apply to both the internal list and the -/// animated list that belongs to [listKey]. -/// -/// This class only exposes as much of the Dart List API as is needed by the -/// sample app. More list methods are easily added, however methods that mutate the -/// list must make the same changes to the animated list in terms of -/// [AnimatedListState.insertItem] and [AnimatedList.removeItem]. -/// +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/31 +/// Time: 下午10:15 +/// email: zhu.yan@alibaba-inc.com +/// target: model 的示例 + import 'package:flutter/material.dart'; class ListModel { @@ -25,7 +14,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/demo.dart b/lib/widgets/components/LIst/ListBody/demo.dart index 76a1f679..038c69b2 100644 --- a/lib/widgets/components/LIst/ListBody/demo.dart +++ b/lib/widgets/components/LIst/ListBody/demo.dart @@ -1,17 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/31 - * Time: 下午2:42 - * email: zhu.yan@alibaba-inc.com - * tartget: ListBody 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/31 +/// Time: 下午2:42 +/// email: zhu.yan@alibaba-inc.com +/// target: ListBody 的示例 import 'package:flutter/material.dart'; -/* -* Checkbox 默认ListBody的实例 -* */ +/// Checkbox 默认ListBody的实例 class ListBodyFullDefault extends StatefulWidget { const ListBodyFullDefault() : super(); @@ -19,9 +15,8 @@ class ListBodyFullDefault extends StatefulWidget { State createState() => _ListBodyFullDefault(); } -/* -* ListBody 默认的实例,有状态 -* */ + +/// ListBody 默认的实例,有状态 class _ListBodyFullDefault extends State { @override Widget build(BuildContext context) { @@ -31,9 +26,7 @@ class _ListBodyFullDefault extends State { } } -/* -* ListBody 默认的实例,无状态 -* */ +/// ListBody 默认的实例,无状态 class ListBodyLessDefault extends StatelessWidget { final widget; final parent; diff --git a/lib/widgets/components/LIst/ListBody/index.dart b/lib/widgets/components/LIst/ListBody/index.dart index 8dc071da..5b5bdb56 100644 --- a/lib/widgets/components/LIst/ListBody/index.dart +++ b/lib/widgets/components/LIst/ListBody/index.dart @@ -1,16 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/31 - * Time: 下午2:38 - * email: zhu.yan@alibaba-inc.com - * tartget: ListBody 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/31 +/// Time: 下午2:38 +/// email: zhu.yan@alibaba-inc.com +/// target: ListBody 的示例 import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; + import './demo.dart' as ListBodyDemo; const String _Text0 = @@ -42,29 +40,23 @@ class _DemoState extends State { return WidgetDemo( title: 'ListBody', codeUrl: 'components/List/ListBody/demo.dart', - contentList: [allCheckboxs(context, this)], + contentList: allDomeBox(context, this), docUrl: 'https://docs.flutter.io/flutter/widgets/ListBody-class.html', ); } } -/* - * 所有的 ListBody widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allCheckboxs(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - ListBodyDemo.ListBodyLessDefault(), - SizedBox(height: 20.0), // 间距 - ]) - ); + +/// 所有的 ListBody widget +/// context: 运行上下文 +/// that: 指向有状态的 StatefulWidget +List allDomeBox(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + ListBodyDemo.ListBodyLessDefault(), + SizedBox(height: 20.0), // 间距 + ]; } diff --git a/lib/widgets/components/LIst/ListView/demo.dart b/lib/widgets/components/LIst/ListView/demo.dart index 728db57f..4e31f69f 100644 --- a/lib/widgets/components/LIst/ListView/demo.dart +++ b/lib/widgets/components/LIst/ListView/demo.dart @@ -1,17 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/31 - * Time: 下午2:27 - * email: zhu.yan@alibaba-inc.com - * tartget: ListView 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/31 +/// Time: 下午2:27 +/// email: zhu.yan@alibaba-inc.com +/// target: ListView 的示例 import 'package:flutter/material.dart'; -/* -* ListView 默认ListView的实例 -* */ +/// ListView 默认ListView的实例 class ListViewFullDefault extends StatefulWidget { const ListViewFullDefault() : super(); @@ -19,9 +15,8 @@ class ListViewFullDefault extends StatefulWidget { State createState() => _ListViewFullDefault(); } -/* -* ListView 默认的实例,有状态 -* */ + +/// ListView 默认的实例,有状态 class _ListViewFullDefault extends State { @override Widget build(BuildContext context) { @@ -30,9 +25,8 @@ class _ListViewFullDefault extends State { } } -/* -* ListView 默认的实例,无状态 -* */ + +/// ListView 默认的实例,无状态 class ListViewLessDefault extends StatelessWidget { final widget; final parent; diff --git a/lib/widgets/components/LIst/ListView/index.dart b/lib/widgets/components/LIst/ListView/index.dart index 375d50ad..a953337d 100644 --- a/lib/widgets/components/LIst/ListView/index.dart +++ b/lib/widgets/components/LIst/ListView/index.dart @@ -1,15 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/31 - * Time: 下午2:25 - * email: zhu.yan@alibaba-inc.com - * tartget: ListView 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/31 +/// Time: 下午2:25 +/// email: zhu.yan@alibaba-inc.com +/// target: ListView 的示例 + import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; + import './demo.dart' as ListViewDemo; const String _Text0 = @@ -67,54 +66,33 @@ class _DemoState extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'ListView', - codeUrl: '/componentss/List/ListView/demo.dart', - contentList: [allCheckboxs(context, this)], + codeUrl: 'components/List/ListView/demo.dart', + contentList: allDomeBox(context, this), docUrl: 'https://docs.flutter.io/flutter/widgets/ListView-class.html', ); } } -/* - * 所有的 ListView widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allCheckboxs(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text2), - ListViewDemo.ListViewLessDefault(0), - MarkdownBody(data: _Text3), - ListViewDemo.ListViewLessDefault(1), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text4), - ListViewDemo.ListViewLessDefault(2), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text5), - ListViewDemo.ListViewLessDefault(3), - ]) - ); -} - -/* -* 带align的text -* */ -Widget textAlignBar(String txt) { - return new Align( - alignment: FractionalOffset.centerLeft, - child: Column( - children: [ - SizedBox(height: 20.0), - MarkdownBody(data: txt) - ]) - ); +/// 所有的 ListView widget +/// context: 运行上下文 +/// that: 指向有状态的 StatefulWidget +List allDomeBox(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + _Text2, + ListViewDemo.ListViewLessDefault(0), + _Text3, + ListViewDemo.ListViewLessDefault(1), + SizedBox(height: 20.0), // 间距 + _Text4, + ListViewDemo.ListViewLessDefault(2), + SizedBox(height: 20.0), // 间距 + _Text5, + ListViewDemo.ListViewLessDefault(3), + ]; } diff --git a/lib/widgets/components/LIst/index.dart b/lib/widgets/components/LIst/index.dart index 1ab43434..b2670ac5 100644 --- a/lib/widgets/components/LIst/index.dart +++ b/lib/widgets/components/LIst/index.dart @@ -1,14 +1,13 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/12/27 - * Time: 下午2:50 - * email: zhu.yan@alibaba-inc.com - * tartget: FlatButton 的示例 - */ -import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/27 +/// Time: 下午2:50 +/// email: zhu.yan@alibaba-inc.com +/// target: List 的示例 +import "package:flutter/material.dart"; + +import '../../../model/widget.dart'; import 'ListBody/index.dart' as ListBody; import 'ListView/index.dart' as ListView; import 'AnimatedList/index.dart' as AnimatedList; diff --git a/lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart b/lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart index fe1628fc..967381f5 100644 --- a/lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart +++ b/lib/widgets/components/Menu/CheckedPopupMenuItem/demo.dart @@ -1,11 +1,9 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-22 21:01:51 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 15:37:04 - */ +/// @Author: 一凨 +/// @Date: 2018-12-22 21:01:51 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 15:37:04 + import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; class CheckedPopupMenuItemDemo extends StatefulWidget { _CheckedPopupMenuItemDemoState createState() => @@ -26,27 +24,18 @@ class _CheckedPopupMenuItemDemoState extends State { _checkedValues = [_checkedValue3]; } - void showInSnackBar(String value){ - Fluttertoast.showToast( - msg: value, - toastLength: Toast.LENGTH_SHORT, - gravity: ToastGravity.CENTER, - timeInSecForIos: 1, - backgroundColor: Colors.grey, - textColor: Colors.white - ); - } bool isChecked(String value) => _checkedValues.contains(value); - void showCheckedMenuSelections(String value){ if(_checkedValues.contains(value)){ _checkedValues.remove(value); }else{ _checkedValues.add(value); } - showInSnackBar('Checked $_checkedValues'); + + Scaffold.of(context).showSnackBar( SnackBar( + content: Text('Checked $_checkedValues'))); } @override diff --git a/lib/widgets/components/Menu/CheckedPopupMenuItem/index.dart b/lib/widgets/components/Menu/CheckedPopupMenuItem/index.dart index ddbed396..9d6fb700 100644 --- a/lib/widgets/components/Menu/CheckedPopupMenuItem/index.dart +++ b/lib/widgets/components/Menu/CheckedPopupMenuItem/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-22 21:01:45 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-22 21:26:54 - */ +/// @Author: 一凨 +/// @Date: 2018-12-22 21:01:45 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-22 21:26:54 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Menu/DropdownMenuItem/demo.dart b/lib/widgets/components/Menu/DropdownMenuItem/demo.dart index 4cb94c4e..9c3e423f 100644 --- a/lib/widgets/components/Menu/DropdownMenuItem/demo.dart +++ b/lib/widgets/components/Menu/DropdownMenuItem/demo.dart @@ -1,9 +1,7 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 14:05:32 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 14:05:52 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 14:05:32 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 14:05:52 import 'package:flutter/material.dart'; diff --git a/lib/widgets/components/Menu/DropdownMenuItem/index.dart b/lib/widgets/components/Menu/DropdownMenuItem/index.dart index 4d50b003..c378f5b6 100644 --- a/lib/widgets/components/Menu/DropdownMenuItem/index.dart +++ b/lib/widgets/components/Menu/DropdownMenuItem/index.dart @@ -1,13 +1,12 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 11:20:07 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 14:51:44 - */ -import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; -import './demo.dart'; +/// @Author: 一凨 +/// @Date: 2018-12-27 11:20:07 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 14:51:44 +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart'; const String content0 = ''' ### **简介** diff --git a/lib/widgets/components/Menu/PopupMenuButton/demo.dart b/lib/widgets/components/Menu/PopupMenuButton/demo.dart index 0a54f9d4..b290c760 100644 --- a/lib/widgets/components/Menu/PopupMenuButton/demo.dart +++ b/lib/widgets/components/Menu/PopupMenuButton/demo.dart @@ -1,11 +1,9 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 15:17:10 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 15:39:35 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 15:17:10 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 15:39:35 + import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; class PopupMenuButtonDemo extends StatefulWidget { _PopupMenuButtonDemoState createState() => _PopupMenuButtonDemoState(); @@ -20,18 +18,11 @@ class _PopupMenuButtonDemoState extends State { void showMenuSelection(String value) { if ([_simpleValue1, _simpleValue2, _simpleValue3].contains(value)) _simpleValue = value; - showInSnackBar('You selected: $value'); + Scaffold.of(context).showSnackBar( SnackBar( + content: Text('You selected: $value'))); } - void showInSnackBar(String value) { - Fluttertoast.showToast( - msg: value, - toastLength: Toast.LENGTH_SHORT, - gravity: ToastGravity.CENTER, - timeInSecForIos: 1, - backgroundColor: Colors.grey, - textColor: Colors.white); - } + @override void initState() { diff --git a/lib/widgets/components/Menu/PopupMenuButton/index.dart b/lib/widgets/components/Menu/PopupMenuButton/index.dart index ae6b45e9..cd81f7d5 100644 --- a/lib/widgets/components/Menu/PopupMenuButton/index.dart +++ b/lib/widgets/components/Menu/PopupMenuButton/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 14:43:50 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 15:44:31 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 14:43:50 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 15:44:31 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Menu/PopupMenuDivider/demo.dart b/lib/widgets/components/Menu/PopupMenuDivider/demo.dart index e5ec33e5..3b578b53 100644 --- a/lib/widgets/components/Menu/PopupMenuDivider/demo.dart +++ b/lib/widgets/components/Menu/PopupMenuDivider/demo.dart @@ -1,69 +1,50 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 15:45:26 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 15:45:26 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 15:45:26 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 15:45:26 + import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; +class PopupMenuDividerDemo extends StatefulWidget { + _PopupMenuDividerDemoState createState() => _PopupMenuDividerDemoState(); +} - -class PopupMenuDividerDemo extends StatelessWidget { - - - void showInSnackBar(String value) { - Fluttertoast.showToast( - msg: value, - toastLength: Toast.LENGTH_SHORT, - gravity: ToastGravity.CENTER, - timeInSecForIos: 1, - backgroundColor: Colors.grey, - textColor: Colors.white); +class _PopupMenuDividerDemoState extends State { + void showInSnackBar(String value) { + Scaffold.of(context) + .showSnackBar( SnackBar(content: Text('You selected: $value'))); } - @override Widget build(BuildContext context) { return Container( - child:ListTile( - title: const Text('An item with a sectioned menu'), - trailing: PopupMenuButton( + child: ListTile( + title: const Text('An item with a sectioned menu'), + trailing: PopupMenuButton( padding: EdgeInsets.zero, onSelected: showInSnackBar, itemBuilder: (BuildContext context) => >[ - const PopupMenuItem( - value: 'Preview', - child: ListTile( - leading: Icon(Icons.visibility), - title: Text('Preview') - ) - ), - const PopupMenuItem( - value: 'Share', - child: ListTile( - leading: Icon(Icons.person_add), - title: Text('Share') - ) - ), - const PopupMenuItem( - value: 'Get Link', - child: ListTile( - leading: Icon(Icons.link), - title: Text('Get link') - ) - ), - const PopupMenuDivider(), - const PopupMenuItem( - value: 'Remove', - child: ListTile( - leading: Icon(Icons.delete), - title: Text('Remove') - ) - ) - ] - ) - ), + const PopupMenuItem( + value: 'Preview', + child: ListTile( + leading: Icon(Icons.visibility), + title: Text('Preview'))), + const PopupMenuItem( + value: 'Share', + child: ListTile( + leading: Icon(Icons.person_add), + title: Text('Share'))), + const PopupMenuItem( + value: 'Get Link', + child: ListTile( + leading: Icon(Icons.link), + title: Text('Get link'))), + const PopupMenuDivider(), + const PopupMenuItem( + value: 'Remove', + child: ListTile( + leading: Icon(Icons.delete), title: Text('Remove'))) + ])), ); } -} \ No newline at end of file +} diff --git a/lib/widgets/components/Menu/PopupMenuDivider/index.dart b/lib/widgets/components/Menu/PopupMenuDivider/index.dart index f504ac82..f6c2fd68 100644 --- a/lib/widgets/components/Menu/PopupMenuDivider/index.dart +++ b/lib/widgets/components/Menu/PopupMenuDivider/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 14:51:58 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 15:55:22 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 14:51:58 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 15:55:22 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' @@ -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/Menu/PopupMenuEntry/index.dart b/lib/widgets/components/Menu/PopupMenuEntry/index.dart index e398bd8d..54b15669 100644 --- a/lib/widgets/components/Menu/PopupMenuEntry/index.dart +++ b/lib/widgets/components/Menu/PopupMenuEntry/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 14:51:58 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 16:06:20 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 14:51:58 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 16:06:20 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import '../PopupMenuDivider/demo.dart'; const String content0 = ''' @@ -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 a5aa8090..dbb05dc9 100644 --- a/lib/widgets/components/Menu/PopupMenuItem/index.dart +++ b/lib/widgets/components/Menu/PopupMenuItem/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-29 15:04:51 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-29 15:07:16 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-29 15:04:51 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-29 15:07:16 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import '../PopupMenuDivider/demo.dart'; const String content0 = ''' @@ -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/Menu/PopupMenuItemState/index.dart b/lib/widgets/components/Menu/PopupMenuItemState/index.dart index 036c5eeb..327724b4 100644 --- a/lib/widgets/components/Menu/PopupMenuItemState/index.dart +++ b/lib/widgets/components/Menu/PopupMenuItemState/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-29 15:04:51 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-29 16:22:06 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-29 15:04:51 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-29 16:22:06 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import '../PopupMenuDivider/demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Menu/index.dart b/lib/widgets/components/Menu/index.dart index 323fb8d9..ce1de856 100644 --- a/lib/widgets/components/Menu/index.dart +++ b/lib/widgets/components/Menu/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-22 21:01:42 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 14:53:04 - */ -import 'package:flutter/material.dart'; -import '../../../model/widget.dart'; +/// @Author: 一凨 +/// @Date: 2018-12-22 21:01:42 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 14:53:04 +import 'package:flutter/material.dart'; + +import '../../../model/widget.dart'; import './CheckedPopupMenuItem/index.dart' as CheckedPopupMenuItem; import './DropdownMenuItem/index.dart' as DropdownMenuItem; import './PopupMenuButton/index.dart' as PopupMenuButton; diff --git a/lib/widgets/components/Navigation/BottomNavigationBar/demo.dart b/lib/widgets/components/Navigation/BottomNavigationBar/demo.dart index a34335e1..6771263b 100644 --- a/lib/widgets/components/Navigation/BottomNavigationBar/demo.dart +++ b/lib/widgets/components/Navigation/BottomNavigationBar/demo.dart @@ -1,33 +1,31 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/27 - * Time: 下午6:27 - * email: zhu.yan@alibaba-inc.com - * tartget: BottomNavigationBar 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/27 +/// Time: 下午6:27 +/// email: zhu.yan@alibaba-inc.com +/// target: BottomNavigationBar 的示例 import 'package:flutter/material.dart'; -/* -* BottomNavigationBar 默认的实例 -* */ + +// BottomNavigationBar 默认的实例 class BottomNavigationBarFullDefault extends StatefulWidget { const BottomNavigationBarFullDefault() : super(); @override State createState() => _BottomNavigationBarFullDefault(); } -/* -* BottomNavigationBar 默认的实例,有状态 -* */ + +// BottomNavigationBar 默认的实例,有状态 class _BottomNavigationBarFullDefault extends State { int _currentIndex = 1; void _onItemTapped(int index) { - setState(() { - _currentIndex = index; - }); + if(mounted) { + setState(() { + _currentIndex = index; + }); + } } @override @@ -40,11 +38,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: Text("add"), icon: Icon(Icons.add)), + BottomNavigationBarItem( + title: Text("menu"), icon: Icon(Icons.menu)), + BottomNavigationBarItem( + 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 d5241c19..019ea65b 100644 --- a/lib/widgets/components/Navigation/BottomNavigationBar/index.dart +++ b/lib/widgets/components/Navigation/BottomNavigationBar/index.dart @@ -1,16 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/27 - * Time: 下午6:28 - * email: zhu.yan@alibaba-inc.com - * tartget: BottomNavigationBar 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/27 +/// Time: 下午6:28 +/// email: zhu.yan@alibaba-inc.com +/// target: BottomNavigationBar 的示例 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; + import './demo.dart' as BottomNavigationBarDemo; const String _text0 = @@ -25,7 +23,7 @@ const String _text1 = """### **基本用法** > BottomNavigationBar 底部导航栏通常与Scaffold结合使用 - 它作为 Scaffold.bottomNavigationBar 参数; -- BottomNavigationBar 支持0-4个之间个底部按钮数量,超出4个系统将会报异常; +- BottomNavigationBar 3-5个之间个底部按钮数量是合理的,理论上 icon 大小合适,可以支持更多; - 默认0-3个底部按钮数量时,BottomNavigationBar采用fixed的模式摆放底部按钮,当有4个时默认使用 BottomNavigationBarType.shifting 模式摆放底部按钮; - 下面的底部导航即是效果; """; @@ -43,50 +41,30 @@ class _DemoState extends State { return WidgetDemo( title: 'BottomNavigationBar', codeUrl: 'components/Navigation/BottomNavigationBar/demo.dart', - contentList: [allDemoBoxs(context, this)], + contentList: allDemoBoxs(context, this), docUrl: 'https://docs.flutter.io/flutter/material/BottomNavigationBar-class.html', bottomNaviBar:BottomNavigationBarDemo.BottomNavigationBarFullDefault() ); } } -/* - * 所有的 BottomNavigationBar widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allDemoBoxs(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _text0), - textAlignBar(_text1), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - //BottomNavigationBarDemo.BottomNavigationBarFullDefault(); - ], - ), - SizedBox(width: 20.0), // 间距 - ]) - ); -} -/* -* 带align的text -* */ -Widget textAlignBar(String txt) { - return new Align( - alignment: FractionalOffset.centerLeft, - child: Column( - children: [ - SizedBox(height: 20.0), - MarkdownBody(data: txt) - ]) - ); +// 所有的 BottomNavigationBar widget +// context: 运行上下文 +// that: 指向有状态的 StatefulWidget +List allDemoBoxs(BuildContext context, _DemoState that) { + return [ + _text0, + _text1, + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + //BottomNavigationBarDemo.BottomNavigationBarFullDefault(); + ], + ), + SizedBox(width: 20.0), // 间距 + ]; } diff --git a/lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart b/lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart index 03851151..1cebb426 100644 --- a/lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart +++ b/lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart @@ -1,17 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午10:00 - * email: zhu.yan@alibaba-inc.com - * tartget: BottomNavigationBarItem 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午10:00 +/// email: zhu.yan@alibaba-inc.com +/// target: BottomNavigationBarItem 的示例 import 'package:flutter/material.dart'; -/* -* BottomNavigationBarItem 默认的实例,无状态 -* */ +// BottomNavigationBarItem 默认的实例,无状态 class BottomNavigationBarItemLessDefault extends StatelessWidget { final widget; final parent; @@ -21,20 +17,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 @@ -43,19 +39,3 @@ class BottomNavigationBarItemLessDefault extends StatelessWidget { ); } } - -//backgroundColor: Colors.grey, -// -//// body: new PageView( -//// -//// children: [ -//// new Index(), -//// new Classify(), -//// new Shopping(), -//// new Myself() -//// ], -//// -//// controller: pageController, -//// onPageChanged: onPageChanged -//// ), -// diff --git a/lib/widgets/components/Navigation/BottomNavigationBarItem/index.dart b/lib/widgets/components/Navigation/BottomNavigationBarItem/index.dart index 00b042df..3ff65af9 100644 --- a/lib/widgets/components/Navigation/BottomNavigationBarItem/index.dart +++ b/lib/widgets/components/Navigation/BottomNavigationBarItem/index.dart @@ -1,16 +1,14 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/1 - * Time: 下午9:55 - * email: zhu.yan@alibaba-inc.com - * tartget: BottomNavigationBarItem 的示例 - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/1 +/// Time: 下午9:55 +/// email: zhu.yan@alibaba-inc.com +/// target: BottomNavigationBarItem 的示例 + +import 'package:flutter_go/components/widget_demo.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; import './demo.dart' as BottomNavigationBarItemDemo; const String _Text0 = @@ -19,13 +17,11 @@ const String _Text0 = - material 的 BottomNavigationBar 或带有图标和标题的 iOS主题 CupertinoTabBar 中的交互式按钮; """; - const String _Text1 = """### **基本用法** > 这个类很少单独使用。通常嵌入在上面的一个底部 bottom navigation widgets 中; """; - class Demo extends StatefulWidget { static const String routeName = '/components/Navigation/BottomNavigationBarItem'; @@ -39,45 +35,26 @@ class _DemoState extends State { return WidgetDemo( title: 'BottomNavigationBarItem', codeUrl: 'components/Navigation/BottomNavigationBarItem/demo.dart', - contentList: [allCheckboxs(context, this)], + contentList: allDomeBox(context, this), docUrl: 'https://docs.flutter.io/flutter/widgets/BottomNavigationBarItem-class.html', ); } } -/* - * 所有的 BottomNavigationBarItem widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allCheckboxs(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _Text0), - SizedBox(height: 20.0), // 间距 - MarkdownBody(data: _Text1), - SizedBox(height: 20.0), // 间距 - BottomNavigationBarItemDemo.BottomNavigationBarItemLessDefault(), - SizedBox(height: 20.0), // 间距 - ]) - ); -} -/* -* 带align的text -* */ -Widget textAlignBar(String txt) { - return new Align( - alignment: FractionalOffset.centerLeft, - child: Column( - children: [ - SizedBox(height: 20.0), - MarkdownBody(data: txt) - ]) - ); +// 所有的 BottomNavigationBarItem widget +// context: 运行上下文 +// that: 指向有状态的 StatefulWidget +List allDomeBox(BuildContext context, _DemoState that) { + return [ + _Text0, + SizedBox(height: 20.0), // 间距 + _Text1, + SizedBox(height: 20.0), // 间距 + BottomNavigationBarItemDemo.BottomNavigationBarItemLessDefault(), + SizedBox(height: 20.0), // 间距 + ]; } + diff --git a/lib/widgets/components/Navigation/index.dart b/lib/widgets/components/Navigation/index.dart index f6776ab3..569112d5 100644 --- a/lib/widgets/components/Navigation/index.dart +++ b/lib/widgets/components/Navigation/index.dart @@ -1,14 +1,13 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/12/27 - * Time: 下午2:50 - * email: zhu.yan@alibaba-inc.com - * tartget: FlatButton 的示例 - */ -import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/27 +/// Time: 下午2:50 +/// email: zhu.yan@alibaba-inc.com +/// target: Navigation 的示例 +import "package:flutter/material.dart"; + +import '../../../model/widget.dart'; import 'BottomNavigationBar/index.dart' as BottomNavigationBar; import 'BottomNavigationBarItem/index.dart' as BottomNavigationBarItem; diff --git a/lib/widgets/components/Panel/ExpansionPanel/index.dart b/lib/widgets/components/Panel/ExpansionPanel/index.dart index fba23ad7..b39aa257 100644 --- a/lib/widgets/components/Panel/ExpansionPanel/index.dart +++ b/lib/widgets/components/Panel/ExpansionPanel/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-21 11:35:39 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 11:36:23 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-21 11:35:39 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 11:36:23 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Panel/ExpansionPanelList/demo.dart b/lib/widgets/components/Panel/ExpansionPanelList/demo.dart index 278c09bb..8d8259e5 100644 --- a/lib/widgets/components/Panel/ExpansionPanelList/demo.dart +++ b/lib/widgets/components/Panel/ExpansionPanelList/demo.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; - @visibleForTesting enum Location { Barbados, @@ -15,10 +14,9 @@ enum Location { typedef DemoItemBodyBuilder = Widget Function(DemoItem item); typedef ValueToString = String Function(T value); -/* - * google flutter 详情多个例子地址: - * https://github.com/flutter/flutter/blob/master/examples/flutter_gallery/lib/demo/material/expansion_panels_demo.dart - */ +// google flutter 详情多个例子地址: +// https://github.com/flutter/flutter/blob/master/examples/flutter_gallery/lib/demo/material/expansion_panels_demo.dart + class DualHeaderWithHint extends StatelessWidget { const DualHeaderWithHint({ this.name, diff --git a/lib/widgets/components/Panel/ExpansionPanelList/index.dart b/lib/widgets/components/Panel/ExpansionPanelList/index.dart index ede5dfcc..f9c3657c 100644 --- a/lib/widgets/components/Panel/ExpansionPanelList/index.dart +++ b/lib/widgets/components/Panel/ExpansionPanelList/index.dart @@ -1,12 +1,10 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-20 20:30:41 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 16:15:20 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-20 20:30:41 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2019-01-08 16:15:20 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Panel/ExpansionPanelRadio/index.dart b/lib/widgets/components/Panel/ExpansionPanelRadio/index.dart index 8c9c3c6f..df757027 100644 --- a/lib/widgets/components/Panel/ExpansionPanelRadio/index.dart +++ b/lib/widgets/components/Panel/ExpansionPanelRadio/index.dart @@ -1,13 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-20 20:30:41 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 11:35:48 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-20 20:30:41 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 11:35:48 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; -// import 'demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; const String content0 = ''' ### **简介** diff --git a/lib/widgets/components/Panel/index.dart b/lib/widgets/components/Panel/index.dart index 0cf88d93..dc8f3fae 100644 --- a/lib/widgets/components/Panel/index.dart +++ b/lib/widgets/components/Panel/index.dart @@ -1,12 +1,10 @@ import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +import '../../../model/widget.dart'; import 'ExpansionPanel/index.dart' as ExpansionPanel; import 'ExpansionPanelList/index.dart' as ExpansionPanelList; import 'ExpansionPanelRadio/index.dart' as ExpansionPanelRadio; - - List widgetPoints = [ WidgetPoint( name: 'ExpansionPanel', diff --git a/lib/widgets/components/Pick/CityPIcker/demo.dart b/lib/widgets/components/Pick/CityPIcker/demo.dart new file mode 100644 index 00000000..4e39b2d2 --- /dev/null +++ b/lib/widgets/components/Pick/CityPIcker/demo.dart @@ -0,0 +1,42 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 05/02/2019 +/// Time: 22:06 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + +import 'package:flutter/material.dart'; +import 'package:city_pickers/city_pickers.dart'; + +class CityPickerDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + String _result; + show(context) async { + Result temp = await CityPickers.showCityPicker( + context: context, + // locationCode: '640221', + height: 400, + ); + setState(() { + _result = "${temp.toString()}"; + }); + } + + Widget build(BuildContext context) { + return Center( + child: Column( + children: [ + Text("result: ${_result.toString()}"), + RaisedButton( + onPressed: () {this.show(context); + }, + child: Text("select"), + ), + ], + ) + ); + } +} diff --git a/lib/widgets/components/Pick/CityPIcker/index.dart b/lib/widgets/components/Pick/CityPIcker/index.dart new file mode 100644 index 00000000..066b3aae --- /dev/null +++ b/lib/widgets/components/Pick/CityPIcker/index.dart @@ -0,0 +1,43 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 05/02/2019 +/// Time: 22:06 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import 'demo.dart'; + +const String content0 = ''' +### **简介** +> 显示中国的省市县地区 +通过函数 **showCityPicker** 调用, 在容器窗口上弹出遮罩层 +'''; +const String content1 = ''' +### **基本用法** +- locationCode 初始化地区选择 +- height 弹出层高度 +- context 上下文对象 +'''; +class Demo extends StatefulWidget { + static const String routeName = '/components/Pick/CityPicker'; + _Demo createState() => _Demo(); +} + +class _Demo extends State { + + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CityPicker', + codeUrl: '', + docUrl: '', + contentList: [ + content0, + content1, + CityPickerDemo() + ], + ); + } +} diff --git a/lib/widgets/components/Pick/DayPicker/demo.dart b/lib/widgets/components/Pick/DayPicker/demo.dart index 36f249d1..2ba81f04 100644 --- a/lib/widgets/components/Pick/DayPicker/demo.dart +++ b/lib/widgets/components/Pick/DayPicker/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:32 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-18 19:12:32 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:32 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-18 19:12:32 + import 'dart:async'; import 'package:flutter/material.dart'; @@ -14,8 +13,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 +28,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 +39,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/DayPicker/index.dart b/lib/widgets/components/Pick/DayPicker/index.dart index d171fc18..72cdc9ed 100644 --- a/lib/widgets/components/Pick/DayPicker/index.dart +++ b/lib/widgets/components/Pick/DayPicker/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:16 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 15:50:02 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:16 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-17 15:50:02 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Pick/MonthPicker/demo.dart b/lib/widgets/components/Pick/MonthPicker/demo.dart index 40c053d8..bf4584c5 100644 --- a/lib/widgets/components/Pick/MonthPicker/demo.dart +++ b/lib/widgets/components/Pick/MonthPicker/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:32 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-21 11:26:21 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:32 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-21 11:26:21 + import 'dart:async'; import 'package:flutter/material.dart'; @@ -14,7 +13,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 +27,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/MonthPicker/index.dart b/lib/widgets/components/Pick/MonthPicker/index.dart index cba6ca2a..4f4f864d 100644 --- a/lib/widgets/components/Pick/MonthPicker/index.dart +++ b/lib/widgets/components/Pick/MonthPicker/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:16 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 17:06:34 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:16 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-17 17:06:34 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Pick/ShowdatePicker/demo.dart b/lib/widgets/components/Pick/ShowdatePicker/demo.dart index c18bdded..c5c2c147 100644 --- a/lib/widgets/components/Pick/ShowdatePicker/demo.dart +++ b/lib/widgets/components/Pick/ShowdatePicker/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:32 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-18 19:12:32 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:32 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-18 19:12:32 + import 'dart:async'; import 'package:flutter/material.dart'; @@ -14,8 +13,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 +28,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 +39,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/ShowdatePicker/index.dart b/lib/widgets/components/Pick/ShowdatePicker/index.dart index b19a4c64..fd2fe108 100644 --- a/lib/widgets/components/Pick/ShowdatePicker/index.dart +++ b/lib/widgets/components/Pick/ShowdatePicker/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:16 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 16:00:07 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:16 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-17 16:00:07 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Pick/YearPicker/demo.dart b/lib/widgets/components/Pick/YearPicker/demo.dart index 2a9694e7..b6a74d2c 100644 --- a/lib/widgets/components/Pick/YearPicker/demo.dart +++ b/lib/widgets/components/Pick/YearPicker/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:32 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-11 15:17:26 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:32 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-11 15:17:26 + import 'dart:async'; import 'package:flutter/material.dart'; @@ -14,7 +13,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 +27,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/Pick/YearPicker/index.dart b/lib/widgets/components/Pick/YearPicker/index.dart index cdce256e..9177677a 100644 --- a/lib/widgets/components/Pick/YearPicker/index.dart +++ b/lib/widgets/components/Pick/YearPicker/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:16 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 16:00:07 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:16 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-17 16:00:07 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Pick/index.dart b/lib/widgets/components/Pick/index.dart index eddd9af8..3e61a2ed 100644 --- a/lib/widgets/components/Pick/index.dart +++ b/lib/widgets/components/Pick/index.dart @@ -1,10 +1,11 @@ import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +import '../../../model/widget.dart'; import 'YearPicker/index.dart' as YearPicker; import 'DayPicker/index.dart' as DayPicker; import 'MonthPicker/index.dart' as MonthPicker; import 'ShowdatePicker/index.dart' as ShowdatePicker; +import 'CityPIcker/index.dart' as CityPicker; List widgetPoints = [ WidgetPoint( @@ -27,4 +28,10 @@ List widgetPoints = [ routerName: ShowdatePicker.Demo.routeName, buildRouter: (BuildContext context) => ShowdatePicker.Demo(), ), + WidgetPoint( + name: 'CityPicker', + routerName: CityPicker.Demo.routeName, + buildRouter: (BuildContext context) => CityPicker.Demo(), + ), + ]; diff --git a/lib/widgets/components/Progress/CircularProgressIndicator/index.dart b/lib/widgets/components/Progress/CircularProgressIndicator/index.dart index ac0367c9..c7579ad9 100644 --- a/lib/widgets/components/Progress/CircularProgressIndicator/index.dart +++ b/lib/widgets/components/Progress/CircularProgressIndicator/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:16 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 16:00:07 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:16 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-17 16:00:07 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' @@ -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 0f1082a0..dffc8dfb 100644 --- a/lib/widgets/components/Progress/LinearProgressIndicator/index.dart +++ b/lib/widgets/components/Progress/LinearProgressIndicator/index.dart @@ -1,11 +1,10 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:16 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 16:00:07 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:16 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-17 16:00:07 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String content0 = ''' @@ -38,7 +37,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 a29d07ca..92cce808 100644 --- a/lib/widgets/components/Progress/RefreshProgressIndicator/index.dart +++ b/lib/widgets/components/Progress/RefreshProgressIndicator/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 15:37:16 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 16:00:07 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-17 15:37:16 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-17 16:00:07 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; const String content0 = ''' ### **简介** @@ -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/components/Progress/index.dart b/lib/widgets/components/Progress/index.dart index 13d3b062..c7587c12 100644 --- a/lib/widgets/components/Progress/index.dart +++ b/lib/widgets/components/Progress/index.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +import '../../../model/widget.dart'; import 'LinearProgressIndicator/index.dart' as LinearProgressIndicator; import 'CircularProgressIndicator/index.dart' as CircularProgressIndicator; diff --git a/lib/widgets/components/Scaffold/Scaffold/demo.dart b/lib/widgets/components/Scaffold/Scaffold/demo.dart index 30bed6e8..cd65e73e 100644 --- a/lib/widgets/components/Scaffold/Scaffold/demo.dart +++ b/lib/widgets/components/Scaffold/Scaffold/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/6 - * Time: 下午7:33 - * email: sanfann@alibaba-inc.com - * tartget: TabBar 的示例 - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 2019/1/6 +/// Time: 下午7:33 +/// email: sanfann@alibaba-inc.com +/// target: Scaffold 的示例 import 'package:flutter/material.dart'; @@ -16,9 +14,7 @@ class ScaffoldDemo extends StatefulWidget { State createState() => _ScaffoldDemo(); } -/* -* AppBar 默认的实例,有状态 -* */ +// AppBar 默认的实例,有状态 class _ScaffoldDemo extends State with SingleTickerProviderStateMixin { int count = 0; @@ -37,9 +33,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 9415293e..f90e562c 100644 --- a/lib/widgets/components/Scaffold/Scaffold/index.dart +++ b/lib/widgets/components/Scaffold/Scaffold/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ @@ -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..79f6aea0 100644 --- a/lib/widgets/components/Scaffold/ScaffoldState/demo.dart +++ b/lib/widgets/components/Scaffold/ScaffoldState/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2019/1/6 - * Time: 下午7:33 - * email: sanfann@alibaba-inc.com - * tartget: TabBar 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/6 +/// Time: 下午7:33 +/// email: sanfann@alibaba-inc.com +/// target: ScaffoldState 的示例 import 'package:flutter/material.dart'; @@ -16,9 +14,7 @@ class ScaffoldStateDemo extends StatefulWidget { State createState() => _ScaffoldStateDemo(); } -/* -* AppBar 默认的实例,有状态 -* */ +// AppBar 默认的实例,有状态 class _ScaffoldStateDemo extends State with SingleTickerProviderStateMixin { int count = 0; @@ -28,9 +24,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/Scaffold/ScaffoldState/index.dart b/lib/widgets/components/Scaffold/ScaffoldState/index.dart index 2abc155c..00dc10b0 100644 --- a/lib/widgets/components/Scaffold/ScaffoldState/index.dart +++ b/lib/widgets/components/Scaffold/ScaffoldState/index.dart @@ -1,13 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 10:26 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ -import '../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 10:26 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text0 = """ diff --git a/lib/widgets/components/Scaffold/index.dart b/lib/widgets/components/Scaffold/index.dart index 6fa2308e..53ba01d3 100644 --- a/lib/widgets/components/Scaffold/index.dart +++ b/lib/widgets/components/Scaffold/index.dart @@ -1,13 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 07/01/2019 - * Time: 14:53 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 07/01/2019 +/// Time: 14:53 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import "package:flutter/material.dart"; + import '../../../model/widget.dart'; import 'Scaffold/index.dart' as Scaffold; import 'ScaffoldState/index.dart' as ScaffoldState; diff --git a/lib/widgets/components/Scroll/BoxScrollView/demo.dart b/lib/widgets/components/Scroll/BoxScrollView/demo.dart index 43bda5e7..9562295e 100644 --- a/lib/widgets/components/Scroll/BoxScrollView/demo.dart +++ b/lib/widgets/components/Scroll/BoxScrollView/demo.dart @@ -1,11 +1,9 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-17 13:16:29 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-17 13:43:01 - */ -import 'package:flutter/material.dart'; +/// @Author: 一凨 +/// @Date: 2018-12-17 13:16:29 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-17 13:43:01 +import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; class BoxScrollViewDemo extends StatelessWidget { diff --git a/lib/widgets/components/Scroll/BoxScrollView/index.dart b/lib/widgets/components/Scroll/BoxScrollView/index.dart index 31e892f9..a696fba1 100644 --- a/lib/widgets/components/Scroll/BoxScrollView/index.dart +++ b/lib/widgets/components/Scroll/BoxScrollView/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-17 13:16:46 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-17 13:34:46 - */ +/// @Author: 一凨 +/// @Date: 2018-12-17 13:16:46 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-17 13:34:46 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Scroll/CustomScrollView/demo.dart b/lib/widgets/components/Scroll/CustomScrollView/demo.dart index d6dcc443..b06e2dbb 100644 --- a/lib/widgets/components/Scroll/CustomScrollView/demo.dart +++ b/lib/widgets/components/Scroll/CustomScrollView/demo.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-20 13:40:58 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-20 14:06:31 - */ +/// @Author: 一凨 +/// @Date: 2018-12-20 13:40:58 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-20 14:06:31 + import 'package:flutter/material.dart'; -import './product_list.dart'; + +import 'package:flutter_go/widgets/components/Scroll/CustomScrollView/product_list.dart'; class CustomScrollViewDemo extends StatelessWidget { Widget _buildItem(BuildContext context, ProductItem product) { diff --git a/lib/widgets/components/Scroll/CustomScrollView/index.dart b/lib/widgets/components/Scroll/CustomScrollView/index.dart index 88f2e9d4..cb466740 100644 --- a/lib/widgets/components/Scroll/CustomScrollView/index.dart +++ b/lib/widgets/components/Scroll/CustomScrollView/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-20 13:21:36 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-20 14:08:29 - */ +/// @Author: 一凨 +/// @Date: 2018-12-20 13:21:36 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-20 14:08:29 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Scroll/NestedScrollView/demo.dart b/lib/widgets/components/Scroll/NestedScrollView/demo.dart index be58e513..cdb38f89 100644 --- a/lib/widgets/components/Scroll/NestedScrollView/demo.dart +++ b/lib/widgets/components/Scroll/NestedScrollView/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-20 14:19:26 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-22 20:50:36 - */ +/// @Author: 一凨 +/// @Date: 2018-12-20 14:19:26 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-22 20:50:36 + import 'package:flutter/material.dart'; class NestedScrollViewDemo extends StatefulWidget { diff --git a/lib/widgets/components/Scroll/NestedScrollView/index.dart b/lib/widgets/components/Scroll/NestedScrollView/index.dart index f9786607..6ea21f59 100644 --- a/lib/widgets/components/Scroll/NestedScrollView/index.dart +++ b/lib/widgets/components/Scroll/NestedScrollView/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-20 14:18:36 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-20 14:19:15 - */ +/// @Author: 一凨 +/// @Date: 2018-12-20 14:18:36 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-20 14:19:15 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Scroll/ScrollMetrics/demo.dart b/lib/widgets/components/Scroll/ScrollMetrics/demo.dart index b4f546f0..db2f8aca 100644 --- a/lib/widgets/components/Scroll/ScrollMetrics/demo.dart +++ b/lib/widgets/components/Scroll/ScrollMetrics/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-15 19:43:41 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-15 21:37:03 - */ +/// @Author: 一凨 +/// @Date: 2018-12-15 19:43:41 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-15 21:37:03 + import 'package:flutter/material.dart'; class ScrollMetricsDemo extends StatefulWidget { diff --git a/lib/widgets/components/Scroll/ScrollMetrics/index.dart b/lib/widgets/components/Scroll/ScrollMetrics/index.dart index 48b3fe02..b0a50565 100644 --- a/lib/widgets/components/Scroll/ScrollMetrics/index.dart +++ b/lib/widgets/components/Scroll/ScrollMetrics/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-15 19:44:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-15 20:33:47 - */ +/// @Author: 一凨 +/// @Date: 2018-12-15 19:44:12 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-15 20:33:47 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Scroll/ScrollPhysics/demo.dart b/lib/widgets/components/Scroll/ScrollPhysics/demo.dart index 9cd6018d..e4208050 100644 --- a/lib/widgets/components/Scroll/ScrollPhysics/demo.dart +++ b/lib/widgets/components/Scroll/ScrollPhysics/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-15 20:39:14 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-15 21:27:39 - */ +/// @Author: 一凨 +/// @Date: 2018-12-15 20:39:14 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-15 21:27:39 + import 'package:flutter/material.dart'; class ScrollPhysicsDemo extends StatefulWidget { @@ -11,7 +10,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 +53,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/components/Scroll/ScrollPhysics/index.dart b/lib/widgets/components/Scroll/ScrollPhysics/index.dart index 4af9aa12..1fd5afd6 100644 --- a/lib/widgets/components/Scroll/ScrollPhysics/index.dart +++ b/lib/widgets/components/Scroll/ScrollPhysics/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-15 20:39:18 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-15 21:26:11 - */ +/// @Author: 一凨 +/// @Date: 2018-12-15 20:39:18 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-15 21:26:11 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Scroll/ScrollView/demo.dart b/lib/widgets/components/Scroll/ScrollView/demo.dart index 87a6ace7..f305971a 100644 --- a/lib/widgets/components/Scroll/ScrollView/demo.dart +++ b/lib/widgets/components/Scroll/ScrollView/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-10 21:15:27 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-10 21:16:05 - */ +/// @Author: 一凨 +/// @Date: 2018-12-10 21:15:27 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-10 21:16:05 + import 'package:flutter/material.dart'; class ScrollViewDemo extends StatelessWidget { diff --git a/lib/widgets/components/Scroll/ScrollView/index.dart b/lib/widgets/components/Scroll/ScrollView/index.dart index 9dbe8887..465e6a4a 100644 --- a/lib/widgets/components/Scroll/ScrollView/index.dart +++ b/lib/widgets/components/Scroll/ScrollView/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-10 20:30:53 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-14 20:36:57 - */ +/// @Author: 一凨 +/// @Date: 2018-12-10 20:30:53 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-14 20:36:57 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; diff --git a/lib/widgets/components/Scroll/Scrollable/demo.dart b/lib/widgets/components/Scroll/Scrollable/demo.dart index 6bc820e7..1ab53c44 100644 --- a/lib/widgets/components/Scroll/Scrollable/demo.dart +++ b/lib/widgets/components/Scroll/Scrollable/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-10 21:32:07 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-15 16:26:20 - */ +/// @Author: 一凨 +/// @Date: 2018-12-10 21:32:07 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-15 16:26:20 + import 'package:flutter/material.dart'; class ScrollableDemo extends StatefulWidget { diff --git a/lib/widgets/components/Scroll/Scrollable/index.dart b/lib/widgets/components/Scroll/Scrollable/index.dart index d8f94a7e..82c07fe0 100644 --- a/lib/widgets/components/Scroll/Scrollable/index.dart +++ b/lib/widgets/components/Scroll/Scrollable/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-10 21:31:24 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-15 17:05:20 - */ +/// @Author: 一凨 +/// @Date: 2018-12-10 21:31:24 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-15 17:05:20 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String contentText0 = ''' diff --git a/lib/widgets/components/Scroll/ScrollbarPainter/demo.dart b/lib/widgets/components/Scroll/ScrollbarPainter/demo.dart index 5063ee77..7698eef5 100644 --- a/lib/widgets/components/Scroll/ScrollbarPainter/demo.dart +++ b/lib/widgets/components/Scroll/ScrollbarPainter/demo.dart @@ -1,9 +1,7 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-15 16:25:39 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-15 19:36:43 - */ +/// @Author: 一凨 +/// @Date: 2018-12-15 16:25:39 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-15 19:36:43 import 'dart:async'; diff --git a/lib/widgets/components/Scroll/ScrollbarPainter/index.dart b/lib/widgets/components/Scroll/ScrollbarPainter/index.dart index 5cb56ce0..faf72744 100644 --- a/lib/widgets/components/Scroll/ScrollbarPainter/index.dart +++ b/lib/widgets/components/Scroll/ScrollbarPainter/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-15 16:25:36 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-15 19:38:18 - */ +/// @Author: 一凨 +/// @Date: 2018-12-15 16:25:36 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-15 19:38:18 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String contentText0 = ''' diff --git a/lib/widgets/components/Scroll/index.dart b/lib/widgets/components/Scroll/index.dart index 274b9bff..0bdf7d15 100644 --- a/lib/widgets/components/Scroll/index.dart +++ b/lib/widgets/components/Scroll/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-22 20:37:51 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-22 20:37:51 - */ -import 'package:flutter/material.dart'; -import '../../../model/widget.dart'; +/// @Author: 一凨 +/// @Date: 2018-12-22 20:37:51 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-22 20:37:51 +import 'package:flutter/material.dart'; + +import '../../../model/widget.dart'; import './ScrollView/index.dart' as ScrollView; import './Scrollable/index.dart' as Scrollable; import './ScrollbarPainter/index.dart' as ScrollbarPainter; diff --git a/lib/widgets/components/Tab/Tab/demo.dart b/lib/widgets/components/Tab/Tab/demo.dart index 9254e48f..d5d5774e 100644 --- a/lib/widgets/components/Tab/Tab/demo.dart +++ b/lib/widgets/components/Tab/Tab/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-22 20:38:01 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-22 20:51:47 - */ +/// @Author: 一凨 +/// @Date: 2018-12-22 20:38:01 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-22 20:51:47 + import 'package:flutter/material.dart'; class TabDemo extends StatelessWidget { diff --git a/lib/widgets/components/Tab/Tab/index.dart b/lib/widgets/components/Tab/Tab/index.dart index f2815315..02a80d98 100644 --- a/lib/widgets/components/Tab/Tab/index.dart +++ b/lib/widgets/components/Tab/Tab/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-22 20:37:58 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-22 20:49:56 - */ +/// @Author: 一凨 +/// @Date: 2018-12-22 20:37:58 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-22 20:49:56 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' diff --git a/lib/widgets/components/Tab/index.dart b/lib/widgets/components/Tab/index.dart index d5fd9d61..866d9c8d 100644 --- a/lib/widgets/components/Tab/index.dart +++ b/lib/widgets/components/Tab/index.dart @@ -1,15 +1,13 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-22 20:37:45 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-22 20:43:15 - */ +/// @Author: 一凨 +/// @Date: 2018-12-22 20:37:45 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-22 20:43:15 + import 'package:flutter/material.dart'; + import '../../../model/widget.dart'; - import './Tab/index.dart' as Tab; - List widgetPoints = [ WidgetPoint( name:'Tab', diff --git a/lib/widgets/components/index.dart b/lib/widgets/components/index.dart index 5eb2c87e..2077b0da 100644 --- a/lib/widgets/components/index.dart +++ b/lib/widgets/components/index.dart @@ -1,14 +1,9 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-10 20:34:18 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-22 21:25:40 - */ -// import 'Sc/index.dart' as Form; -// import 'Frame/index.dart' as Frame; -// import 'Media/index.dart' as Media;5 -import 'Scroll/index.dart' as Scroll; +/// @Author: 一凨 +/// @Date: 2018-12-10 20:34:18 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-22 21:25:40 +import 'Scroll/index.dart' as Scroll; import 'Pick/index.dart' as Pick; import 'Chip/index.dart' as Chip; import 'Panel/index.dart' as Panel; diff --git a/lib/widgets/elements/Form/Button/DropdownButton/demo.dart b/lib/widgets/elements/Form/Button/DropdownButton/demo.dart index a2a97503..42450c81 100644 --- a/lib/widgets/elements/Form/Button/DropdownButton/demo.dart +++ b/lib/widgets/elements/Form/Button/DropdownButton/demo.dart @@ -1,31 +1,28 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: DropdownButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: DropdownButton 的示例 + import 'package:flutter/material.dart'; -/* -* DropdownButton 默认按钮的实例 -* isDisabled:是否是禁用,isDisabled 默认为true -* */ +// DropdownButton 默认按钮的实例 +// isDisabled:是否是禁用,isDisabled 默认为true var selectItValue; 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 +33,7 @@ class DropdownButtonDefault extends StatelessWidget { @override Widget build(BuildContext context) { return DropdownButton( - hint: new Text('下拉菜单选择一个人名'), + hint: Text('下拉菜单选择一个人名'), //设置这个value之后,选中对应位置的item, //再次呼出下拉菜单,会自动定位item位置在当前按钮显示的位置处 value: selectItValue, @@ -51,63 +48,61 @@ 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); return items; } -/* -* DropdownButton 自定义的实例 -* */ +// DropdownButton 自定义的实例 class DropdownButtonCustom extends StatelessWidget { final widget; final parent; @@ -124,9 +119,11 @@ class DropdownButtonCustom extends StatelessWidget { value: selectItemValue, //下拉菜单item点击之后的回调 onChanged: (T){ - parent.setState((){ - selectItemValue = T; - }); + if (parent.mounted) { + parent.setState(() { + selectItemValue = T; + }); + } }, //设置阴影的高度 elevation: 24, diff --git a/lib/widgets/elements/Form/Button/DropdownButton/index.dart b/lib/widgets/elements/Form/Button/DropdownButton/index.dart index 4274f5dc..f6d1ae8a 100644 --- a/lib/widgets/elements/Form/Button/DropdownButton/index.dart +++ b/lib/widgets/elements/Form/Button/DropdownButton/index.dart @@ -1,19 +1,15 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: DropdownButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/DropdownButton-class.html - */ -import '../../../../../common/widget_demo.dart'; +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: DropdownButton 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/DropdownButton-class.html import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; -import './demo.dart' as dropdownButton; - +import 'package:flutter_go/components/widget_demo.dart'; +import 'demo.dart' as dropdownButton; const String _dropdownText0 = """### **简介** @@ -51,51 +47,28 @@ class _DemoState extends State { return WidgetDemo( title: 'DropdownButton', codeUrl: 'elements/Form/Button/DropdownButton/demo.dart', - contentList: [allDropdownButtons(context,this)], + contentList: allDropdownButtons(context,this), docUrl: 'https://docs.flutter.io/flutter/material/DropdownButton-class.html', ); } } -/* - * 所有的 DropdownButton 按钮 - */ -Widget allDropdownButtons(BuildContext context,_DemoState that){ - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _dropdownText0), - textAlignBar(_dropdownText1), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - dropdownButton.DropdownButtonDefault(), - ], - ), - textAlignBar(_dropdownText2), - SizedBox(height: 10.0), - dropdownButton.DropdownButtonCustom(context.widget,that), - SizedBox(height: 20.0) - ]) - ); -} - -/* -* 带align的text -* */ -Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new 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) - ]) - ); +// 所有的 DropdownButton 按钮 +List allDropdownButtons(BuildContext context,_DemoState that){ + return [ + _dropdownText0, + _dropdownText1, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + dropdownButton.DropdownButtonDefault(), + ], + ), + _dropdownText2, + SizedBox(height: 10.0), + dropdownButton.DropdownButtonCustom(context.widget, that), + SizedBox(height: 20.0) + ]; } diff --git a/lib/widgets/elements/Form/Button/FlatButton/demo.dart b/lib/widgets/elements/Form/Button/FlatButton/demo.dart index ee2b36c4..94cbcb50 100644 --- a/lib/widgets/elements/Form/Button/FlatButton/demo.dart +++ b/lib/widgets/elements/Form/Button/FlatButton/demo.dart @@ -1,12 +1,12 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: FlatButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: FlatButton 的示例 + import 'dart:math'; + import 'package:flutter/material.dart'; // FlatButton 默认按钮的实例 @@ -29,8 +29,8 @@ class FlatButtonDefault extends StatelessWidget { // FlatButton.icon 默认按钮的实例 -// * Create a text button from a pair of widgets that serve as the button's icon and label -// * isDisabled:是否是禁用 +// Create a text button from a pair of widgets that serve as the button's icon and label +// isDisabled:是否是禁用 class FlatButtonIconDefault extends StatelessWidget { final bool isDisabled; final IconData icon; @@ -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 58fa6ba3..d7e5ba73 100644 --- a/lib/widgets/elements/Form/Button/FlatButton/index.dart +++ b/lib/widgets/elements/Form/Button/FlatButton/index.dart @@ -1,21 +1,16 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: FlatButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/FlatButton-class.html - */ -import '../../../../../common/widget_demo.dart'; +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: FlatButton 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/FlatButton-class.html import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; import './demo.dart' as flatButton; - - const String _flatText0 = """### **简介** > FlatButton 是显示在(零高程)material widget 上的文本标签 @@ -53,23 +48,17 @@ class _DemoState extends State { return WidgetDemo( title: 'FlatButton', codeUrl: 'elements/Form/Button/FlatButton/demo.dart', - contentList: [allFlatButtons(context)], + contentList: allFlatButtons(context), docUrl: 'https://docs.flutter.io/flutter/material/FlatButton-class.html', ); } } -/* - * 所有的 FlatButton 按钮 - */ -Widget allFlatButtons(BuildContext context){ - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _flatText0), - textAlignBar(_flatText1), + // 所有的 FlatButton 按钮 +List allFlatButtons(BuildContext context){ + return [ + _flatText0, + _flatText1, ButtonBar( alignment: MainAxisAlignment.spaceAround, mainAxisSize: MainAxisSize.max, @@ -79,7 +68,7 @@ Widget allFlatButtons(BuildContext context){ flatButton.FlatButtonDefault(false), ], ), - textAlignBar(_flatText2), + _flatText2, ButtonBar( alignment: MainAxisAlignment.spaceAround, //mainAxisSize: MainAxisSize.min, @@ -96,7 +85,7 @@ Widget allFlatButtons(BuildContext context){ flatButton.FlatButtonIconDefault(true, Icons.announcement), ], ), - textAlignBar(_flatText3), + _flatText3, //flatButton.FlatButtonCustom(context,'主要按钮',Colors.blue), flatButton.FlatButtonCustom('主要按钮',Colors.blue), SizedBox(height: 10.0), @@ -109,50 +98,31 @@ 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) - ]) - ); + ]; } -/* - * alert 弹框 - * context:容器的父级 - * */ + // alert 弹框 + // context:容器的父级 void _showMessage(String name, BuildContext context) { showDialog( // alert 的父级 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('取消')) ]); } ); } - -/* -* 带align的text -* */ -Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new 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) - ]) - ); -} diff --git a/lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart b/lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart index f4188499..95303b83 100644 --- a/lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart +++ b/lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart @@ -1,17 +1,14 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: OutlineButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: OutlineButton 的示例 + import 'package:flutter/material.dart'; -/* -* OutlineButton 默认按钮的实例 -* isDisabled:是否是禁用,isDisabled 默认为true -* */ +// OutlineButton 默认按钮的实例 +// isDisabled:是否是禁用,isDisabled 默认为true class FloatingActionButtonDefault extends StatelessWidget { final bool isDisabled; @@ -30,9 +27,7 @@ class FloatingActionButtonDefault extends StatelessWidget { } } -/* -* OutlineButton 自定义的实例 -* */ +// OutlineButton 自定义的实例 class FloatingActionButtonCustom extends StatelessWidget { final String txt; final Color color; @@ -48,8 +43,8 @@ class FloatingActionButtonCustom extends StatelessWidget { @override Widget build(BuildContext context) { - final _onPressed = onPressed; - return new FloatingActionButton( + final _onPressed = (onPressed is Function) ? onPressed : ()=>{}; + return FloatingActionButton( // 子视图,一般为Icon,不推荐使用文字 child: const Icon(Icons.refresh), // FAB的文字解释,FAB被长按时显示,也是无障碍功能 @@ -82,9 +77,7 @@ class FloatingActionButtonCustom extends StatelessWidget { } } -/* -* OutlineButton 自定义的实例2 -* */ +// OutlineButton 自定义的实例2 class FloatingActionButtonCustom2 extends StatelessWidget { final String txt; final Color color; @@ -109,8 +102,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 efabb752..71e5b8ea 100644 --- a/lib/widgets/elements/Form/Button/FloatingActionButton/index.dart +++ b/lib/widgets/elements/Form/Button/FloatingActionButton/index.dart @@ -1,17 +1,16 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: FloatingActionButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/FloatingActionButton-class.html - */ -import '../../../../../common/widget_demo.dart'; +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: FloatingActionButton 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/FloatingActionButton-class.html + import 'dart:math'; + import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as floatingActionButton; @@ -50,9 +49,11 @@ class _DemoState extends State { String buttonShapeType = 'border'; // 边框类型 void setButtonShapeType(){ String _buttonShapeType = (buttonShapeType == 'border') ? 'radius' : 'border'; - this.setState((){ - buttonShapeType = _buttonShapeType; - }); + if(mounted) { + this.setState(() { + buttonShapeType = _buttonShapeType; + }); + } } @override Widget build(BuildContext context) { @@ -60,89 +61,41 @@ class _DemoState extends State { title: 'FloatingActionButton', // desc: _floatingActionTitle, codeUrl: 'elements/Form/Button/FloatingActionButton/demo.dart', - contentList: [allFloatingActionButtons(context,this)], + contentList: allFloatingActionButtons(context,this), docUrl: 'https://docs.flutter.io/flutter/material/FloatingActionButton-class.html', ); } } -/* - * 所有的 FloatingActionButton 按钮 - */ -Widget allFloatingActionButtons(BuildContext context,_DemoState that){ + // 所有的 FloatingActionButton 按钮 +List 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), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _floatingActionText0), - textAlignBar(_floatingActionText1), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - floatingActionButton.FloatingActionButtonDefault(), - SizedBox(width: 20.0), // 间距 - floatingActionButton.FloatingActionButtonDefault(false), - ], - ), - textAlignBar(_floatingActionText2), - SizedBox(height: 10.0), - floatingActionButton.FloatingActionButtonCustom('主要按钮',Colors.deepOrangeAccent,buttonShape), - SizedBox(height: 20.0), - textAlignBar(_floatingActionText3), - SizedBox(height: 20.0), - floatingActionButton.FloatingActionButtonCustom2('扩展按钮',Colors.deepOrangeAccent,buttonShape), - SizedBox(height: 20.0) - ]) - ); + return [ + _floatingActionText0, + _floatingActionText1, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + floatingActionButton.FloatingActionButtonDefault(), + SizedBox(width: 20.0), // 间距 + floatingActionButton.FloatingActionButtonDefault(false), + ], + ), + _floatingActionText2, + SizedBox(height: 10.0), + floatingActionButton.FloatingActionButtonCustom( + '主要按钮', Colors.deepOrangeAccent, buttonShape), + SizedBox(height: 20.0), + _floatingActionText3, + SizedBox(height: 20.0), + floatingActionButton.FloatingActionButtonCustom2( + '扩展按钮', Colors.deepOrangeAccent, buttonShape), + SizedBox(height: 20.0) + ]; } -/* - * alert 弹框 - * context:容器的父级 - * */ -// void _showMessage(String name, BuildContext context) { -// showDialog( -// // alert 的父级 -// context: context, -// builder: (BuildContext context) { -// return AlertDialog( -// title: new Text('提示'), -// content: new Text(name), -// actions: [ -// new FlatButton( -// // alert 的取消按钮 -// onPressed: () { -// // 取消的事件 -// Navigator.of(context).pop(true); -// }, -// child: new Text('取消')) -// ]); -// } -// ); -// } - -/* -* 带align的text -* */ -Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new 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) - ]) - ); -} - -/* -* 绘制边框信息,比如是否有边框,是否是圆角 -* */ +// 绘制边框信息,比如是否有边框,是否是圆角 ShapeBorder drawShape(String type){ final Color _color = _randomColor(); final borderWidth = Random.secure().nextInt(5).toDouble(); @@ -159,7 +112,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, @@ -177,9 +130,7 @@ ShapeBorder drawShape(String type){ } } -/* -* 取随机颜色 -* */ +// 取随机颜色 Color _randomColor() { var red = Random.secure().nextInt(255); var greed = Random.secure().nextInt(255); diff --git a/lib/widgets/elements/Form/Button/IconButton/demo.dart b/lib/widgets/elements/Form/Button/IconButton/demo.dart index cb7a9baa..69915c84 100644 --- a/lib/widgets/elements/Form/Button/IconButton/demo.dart +++ b/lib/widgets/elements/Form/Button/IconButton/demo.dart @@ -1,23 +1,21 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: IconButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: IconButton 的示例 + import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:flutter_go/common/icon_names.dart'; +import 'package:flutter_go/resources/icon_names.dart'; final int len = IconNames.names.length; -/* -* IconButton 默认按钮的实例 -* isDisabled:是否是禁用,isDisabled 默认为true -* */ + +// IconButton 默认按钮的实例 +// isDisabled:是否是禁用,isDisabled 默认为true class IconButtonDefault extends StatelessWidget { final bool isDisabled; @@ -35,9 +33,7 @@ class IconButtonDefault extends StatelessWidget { } } -/* -* IconButton 自定义的实例 -* */ +// IconButton 自定义的实例 class IconButtonCustom extends StatelessWidget { final String txt; final Color color; @@ -75,7 +71,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 1d742771..e15147df 100644 --- a/lib/widgets/elements/Form/Button/IconButton/index.dart +++ b/lib/widgets/elements/Form/Button/IconButton/index.dart @@ -1,20 +1,19 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: IconButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/IconButton-class.html - */ -import '../../../../../common/widget_demo.dart'; + + /// Created with FlutterGo. + /// User: 一晟 + /// Date: 2018/11/14 + /// Time: 下午4:31 + /// email: zhu.yan@alibaba-inc.com + /// target: IconButton 的示例 + /// 对应文档地址:https://docs.flutter.io/flutter/material/IconButton-class.html + import 'dart:math'; + import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as iconButton; - const String _iconText0 = """### **简介** > Icon button “图标按钮” @@ -45,82 +44,59 @@ class _DemoState extends State { String buttonShapeType = 'border'; // 边框类型 void setButtonShapeType(){ String _buttonShapeType = (buttonShapeType == 'border') ? 'radius' : 'border'; - this.setState((){ - buttonShapeType = _buttonShapeType; - }); + if(mounted) { + this.setState(() { + buttonShapeType = _buttonShapeType; + }); + } } @override Widget build(BuildContext context) { return WidgetDemo( title: 'IconButton', codeUrl: 'elements/Form/Button/IconButton/demo.dart', - contentList: [ allIconButtons(context,this)], + contentList: allIconButtons(context,this), docUrl: 'https://docs.flutter.io/flutter/material/IconButton-class.html', ); } } -/* - * 所有的 IconButton 按钮 - */ -Widget allIconButtons(BuildContext context,_DemoState that){ +// 所有的 IconButton 按钮 +List 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), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _iconText0), - textAlignBar(_iconText1), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - iconButton.IconButtonDefault(), - SizedBox(width: 20.0), // 间距 - iconButton.IconButtonDefault(false), - ], - ), - textAlignBar(_iconText2), - SizedBox(height: 10.0), - iconButton.IconButtonCustom('主要按钮',Colors.blue,buttonShape), - SizedBox(height: 10.0), - iconButton.IconButtonCustom('成功按钮',Colors.green,buttonShape), - SizedBox(height: 10.0), - iconButton.IconButtonCustom('信息按钮',Colors.grey,buttonShape), - SizedBox(height: 10.0), - iconButton.IconButtonCustom('警告按钮',Colors.orange,buttonShape), - SizedBox(height: 10.0), - iconButton.IconButtonCustom('危险按钮',Colors.pink,buttonShape), - SizedBox(height: 10.0), - RaisedButton( - // 文本内容 - child: const Text('点击切换,图标按钮', semanticsLabel: 'FLAT BUTTON 1'), - onPressed: ()=> that.setButtonShapeType()), - SizedBox(height: 20.0) - ]) - ); + return [ + _iconText0, + _iconText1, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + iconButton.IconButtonDefault(), + SizedBox(width: 20.0), // 间距 + iconButton.IconButtonDefault(false), + ], + ), + _iconText2, + SizedBox(height: 10.0), + iconButton.IconButtonCustom('主要按钮', Colors.blue, buttonShape), + SizedBox(height: 10.0), + iconButton.IconButtonCustom('成功按钮', Colors.green, buttonShape), + SizedBox(height: 10.0), + iconButton.IconButtonCustom('信息按钮', Colors.grey, buttonShape), + SizedBox(height: 10.0), + iconButton.IconButtonCustom('警告按钮', Colors.orange, buttonShape), + SizedBox(height: 10.0), + iconButton.IconButtonCustom('危险按钮', Colors.pink, buttonShape), + SizedBox(height: 10.0), + RaisedButton( + // 文本内容 + child: const Text('点击切换,图标按钮', semanticsLabel: 'FLAT BUTTON 1'), + onPressed: () => that.setButtonShapeType()), + SizedBox(height: 20.0) + ]; } -/* -* 带align的text -* */ -Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new 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) - ]) - ); -} - -/* -* 绘制边框信息,比如是否有边框,是否是圆角 -* */ +// 绘制边框信息,比如是否有边框,是否是圆角 ShapeBorder drawShape(String type){ final Color _color = _randomColor(); final borderWidth = Random.secure().nextInt(5).toDouble(); @@ -137,7 +113,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, @@ -155,9 +131,7 @@ ShapeBorder drawShape(String type){ } } -/* -* 取随机颜色 -* */ +// 取随机颜色 Color _randomColor() { var red = Random.secure().nextInt(255); var greed = Random.secure().nextInt(255); diff --git a/lib/widgets/elements/Form/Button/OutlineButton/demo.dart b/lib/widgets/elements/Form/Button/OutlineButton/demo.dart index 582d7135..5f169f1c 100644 --- a/lib/widgets/elements/Form/Button/OutlineButton/demo.dart +++ b/lib/widgets/elements/Form/Button/OutlineButton/demo.dart @@ -1,18 +1,16 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: OutlineButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: OutlineButton 的示例 + import 'dart:math'; + import 'package:flutter/material.dart'; -/* -* OutlineButton 默认按钮的实例 -* isDisabled:是否是禁用,isDisabled 默认为true -* */ +// OutlineButton 默认按钮的实例 +// isDisabled:是否是禁用,isDisabled 默认为true class OutlineButtonDefault extends StatelessWidget { final bool isDisabled; @@ -29,11 +27,9 @@ class OutlineButtonDefault extends StatelessWidget { } } -/* -* OutlineButton.icon 默认按钮的实例 -* Create a text button from a pair of widgets that serve as the button's icon and label -* isDisabled:是否是禁用 -* */ +// OutlineButton.icon 默认按钮的实例 +// Create a text button from a pair of widgets that serve as the button's icon and label +// isDisabled:是否是禁用 class OutlineButtonIconDefault extends StatelessWidget { final bool isDisabled; final IconData icon; @@ -56,9 +52,7 @@ class OutlineButtonIconDefault extends StatelessWidget { } } -/* -* OutlineButton 自定义的实例 -* */ +// OutlineButton 自定义的实例 class OutlineButtonCustom extends StatelessWidget { final String txt; final Color color; @@ -79,7 +73,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 +94,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 8c2aaa26..eb31d1e6 100644 --- a/lib/widgets/elements/Form/Button/OutlineButton/index.dart +++ b/lib/widgets/elements/Form/Button/OutlineButton/index.dart @@ -1,20 +1,18 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: OutlineButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/OutlineButton-class.html - */ -import '../../../../../common/widget_demo.dart'; +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: OutlineButton 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/OutlineButton-class.html + import 'dart:math'; + import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as outlineButton; - const String _outlineText0 = """### **简介** > Outline button “边框按钮” @@ -54,122 +52,75 @@ class _DemoState extends State { String buttonShapeType = 'border'; // 边框类型 void setButtonShapeType(){ String _buttonShapeType = (buttonShapeType == 'border') ? 'radius' : 'border'; - this.setState((){ - buttonShapeType = _buttonShapeType; - }); + if (mounted) { + this.setState(() { + buttonShapeType = _buttonShapeType; + }); + } } @override Widget build(BuildContext context) { return WidgetDemo( title: 'OutlineButton', codeUrl: 'elements/Form/Button/OutlineButton/demo.dart', - contentList: [allOutlineButtons(context,this)], + contentList: allOutlineButtons(context,this), docUrl: 'https://docs.flutter.io/flutter/material/OutlineButton-class.html', ); } } -/* - * 所有的 OutlineButton 按钮 - */ -Widget allOutlineButtons(BuildContext context,_DemoState that){ + // 所有的 OutlineButton 按钮 +List 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), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _outlineText0), - textAlignBar(_outlineText1), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - outlineButton.OutlineButtonDefault(), - SizedBox(width: 20.0), // 间距 - outlineButton.OutlineButtonDefault(false), - ], - ), - textAlignBar(_outlineText2), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - //mainAxisSize: MainAxisSize.min, - children: [ - outlineButton.OutlineButtonIconDefault(), - outlineButton.OutlineButtonIconDefault(false), - ], - ), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - //mainAxisSize: MainAxisSize.min, - children: [ - outlineButton.OutlineButtonIconDefault(true, Icons.android), - outlineButton.OutlineButtonIconDefault(true, Icons.announcement), - ], - ), - textAlignBar(_outlineText3), - SizedBox(height: 10.0), - outlineButton.OutlineButtonCustom('主要按钮',Colors.blue,buttonShape), - SizedBox(height: 10.0), - outlineButton.OutlineButtonCustom('成功按钮',Colors.green,buttonShape), - SizedBox(height: 10.0), - outlineButton.OutlineButtonCustom('信息按钮',Colors.grey,buttonShape), - SizedBox(height: 10.0), - outlineButton.OutlineButtonCustom('警告按钮',Colors.orange,buttonShape), - SizedBox(height: 10.0), - outlineButton.OutlineButtonCustom('危险按钮',Colors.pink,buttonShape), - SizedBox(height: 10.0), - outlineButton.OutlineButtonCustom( '点击切换,随机改变按钮的圆角,边框样式', Colors.blue, buttonShape, - () => that.setButtonShapeType()), - SizedBox(height: 20.0) - ]) - ); + return [ + _outlineText0, + _outlineText1, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + outlineButton.OutlineButtonDefault(), + SizedBox(width: 20.0), // 间距 + outlineButton.OutlineButtonDefault(false), + ], + ), + _outlineText2, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + //mainAxisSize: MainAxisSize.min, + children: [ + outlineButton.OutlineButtonIconDefault(), + outlineButton.OutlineButtonIconDefault(false), + ], + ), + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + //mainAxisSize: MainAxisSize.min, + children: [ + outlineButton.OutlineButtonIconDefault(true, Icons.android), + outlineButton.OutlineButtonIconDefault(true, Icons.announcement), + ], + ), + _outlineText3, + SizedBox(height: 10.0), + outlineButton.OutlineButtonCustom('主要按钮', Colors.blue, buttonShape), + SizedBox(height: 10.0), + outlineButton.OutlineButtonCustom('成功按钮', Colors.green, buttonShape), + SizedBox(height: 10.0), + outlineButton.OutlineButtonCustom('信息按钮', Colors.grey, buttonShape), + SizedBox(height: 10.0), + outlineButton.OutlineButtonCustom('警告按钮', Colors.orange, buttonShape), + SizedBox(height: 10.0), + outlineButton.OutlineButtonCustom('危险按钮', Colors.pink, buttonShape), + SizedBox(height: 10.0), + outlineButton.OutlineButtonCustom( + '点击切换,随机改变按钮的圆角,边框样式', Colors.blue, buttonShape, + () => that.setButtonShapeType()), + SizedBox(height: 20.0) + ]; } -/* - * alert 弹框 - * context:容器的父级 - * */ -// void _showMessage(String name, BuildContext context) { -// showDialog( -// // alert 的父级 -// context: context, -// builder: (BuildContext context) { -// return AlertDialog( -// title: new Text('提示'), -// content: new Text(name), -// actions: [ -// new FlatButton( -// // alert 的取消按钮 -// onPressed: () { -// // 取消的事件 -// Navigator.of(context).pop(true); -// }, -// child: new Text('取消')) -// ]); -// } -// ); -// } - -/* -* 带align的text -* */ -Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new 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) - ]) - ); -} - -/* -* 绘制边框信息,比如是否有边框,是否是圆角 -* */ +// 绘制边框信息,比如是否有边框,是否是圆角 ShapeBorder drawShape(String type){ final Color _color = _randomColor(); final borderWidth = Random.secure().nextInt(5).toDouble(); @@ -186,7 +137,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, @@ -204,9 +155,7 @@ ShapeBorder drawShape(String type){ } } -/* -* 取随机颜色 -* */ +// 取随机颜色 Color _randomColor() { var red = Random.secure().nextInt(255); var greed = Random.secure().nextInt(255); diff --git a/lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart b/lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart index 40e8099f..839f51c6 100644 --- a/lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart +++ b/lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart @@ -1,17 +1,14 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: RaisedButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: PopupMenuButton 的示例 + import 'package:flutter/material.dart'; -/* -* RaisedButton 默认按钮的实例 -* isDisabled:是否是禁用,isDisabled 默认为true -* */ +// RaisedButton 默认按钮的实例 +// isDisabled:是否是禁用,isDisabled 默认为true enum WhyFarther { harder, smarter, selfStarter, tradingCharter } class PopupMenuButtonDefault extends StatelessWidget { @@ -71,8 +68,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 +79,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 +113,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 +131,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 bb708a73..a40e704d 100644 --- a/lib/widgets/elements/Form/Button/PopupMenuButton/index.dart +++ b/lib/widgets/elements/Form/Button/PopupMenuButton/index.dart @@ -1,17 +1,14 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/24 - * Time: 下午5:25 - * email: zhu.yan@alibaba-inc.com - * tartget: PopupMenusButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/PopupMenuButton-class.html - */ - -import '../../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/24 +/// Time: 下午5:25 +/// email: zhu.yan@alibaba-inc.com +/// target: PopupMenusButton 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/PopupMenuButton-class.html import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as popupMenuButton; const String _titleText0 = """ @@ -56,35 +53,30 @@ class _DemoState extends State { return WidgetDemo( title: 'PopupMenuButton', codeUrl: 'elements/Form/Button/RaisedButton/demo.dart', - contentList: [allPopupMenuButton(widget,this)], + contentList: allPopupMenuButton(widget,this), docUrl: 'https://docs.flutter.io/flutter/material/PopupMenuButton-class.html', ); } } -Widget allPopupMenuButton(Demo widget,State parent){ - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, +List allPopupMenuButton(Demo widget, State parent) { + return [ + _titleText0, + SizedBox(height: 20.0), + _titleText1, + Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - MarkdownBody(data: _titleText0), - SizedBox(height: 20.0), - MarkdownBody(data: _titleText1), - Row( - crossAxisAlignment:CrossAxisAlignment.center, - mainAxisAlignment:MainAxisAlignment.spaceBetween, - children: [ - popupMenuButton.PopupMenuButtonDefault('default1'), - popupMenuButton.PopupMenuButtonDefault('default2'), - popupMenuButton.PopupMenuButtonDefault('default3'), - ], - ), - SizedBox(height: 20.0), - MarkdownBody(data: _titleText2), - SizedBox(height: 20.0), - popupMenuButton.PopupMenuButtonCustom(widget,parent), - SizedBox(height: 40.0) - ] - )); + popupMenuButton.PopupMenuButtonDefault('default1'), + popupMenuButton.PopupMenuButtonDefault('default2'), + popupMenuButton.PopupMenuButtonDefault('default3'), + ], + ), + SizedBox(height: 20.0), + _titleText2, + SizedBox(height: 20.0), + popupMenuButton.PopupMenuButtonCustom(widget, parent), + SizedBox(height: 40.0) + ]; } \ No newline at end of file diff --git a/lib/widgets/elements/Form/Button/RaisedButton/demo.dart b/lib/widgets/elements/Form/Button/RaisedButton/demo.dart index 0ddece9d..b386be84 100644 --- a/lib/widgets/elements/Form/Button/RaisedButton/demo.dart +++ b/lib/widgets/elements/Form/Button/RaisedButton/demo.dart @@ -1,18 +1,15 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: RaisedButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: RaisedButton 的示例 + import 'dart:math'; import 'package:flutter/material.dart'; -/* -* RaisedButton 默认按钮的实例 -* isDisabled:是否是禁用,isDisabled 默认为true -* */ +// RaisedButton 默认按钮的实例 +// isDisabled:是否是禁用,isDisabled 默认为true class RaisedButtonDefault extends StatelessWidget { final bool isDisabled; @@ -29,11 +26,9 @@ class RaisedButtonDefault extends StatelessWidget { } } -/* -* RaisedButton.icon 默认按钮的实例 -* Create a text button from a pair of widgets that serve as the button's icon and label -* isDisabled:是否是禁用 -* */ +// RaisedButton.icon 默认按钮的实例 +// Create a text button from a pair of widgets that serve as the button's icon and label +// isDisabled:是否是禁用 class RaisedButtonIconDefault extends StatelessWidget { final bool isDisabled; final IconData icon; @@ -63,9 +58,8 @@ class RaisedButtonIconDefault extends StatelessWidget { } } -/* -* RaisedButton 自定义的实例 -* */ + +// RaisedButton 自定义的实例 class RaisedButtonCustom extends StatelessWidget { final String txt; final Color color; @@ -105,10 +99,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 26d7ad7e..87caba25 100644 --- a/lib/widgets/elements/Form/Button/RaisedButton/index.dart +++ b/lib/widgets/elements/Form/Button/RaisedButton/index.dart @@ -1,17 +1,16 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: RaisedButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/RaisedButton-class.html - */ -import '../../../../../common/widget_demo.dart'; +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: RaisedButton 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/RaisedButton-class.html + import 'dart:math'; + import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as raisedButton; @@ -53,122 +52,74 @@ class _DemoState extends State { String buttonShapeType = 'border'; // 边框类型 void setButtonShapeType(){ String _buttonShapeType = (buttonShapeType == 'border') ? 'radius' : 'border'; - this.setState((){ - buttonShapeType = _buttonShapeType; - }); + if(mounted) { + this.setState(() { + buttonShapeType = _buttonShapeType; + }); + } } @override Widget build(BuildContext context) { return WidgetDemo( title: 'RaisedButton', codeUrl: 'elements/Form/Button/RaisedButton/demo.dart', - contentList: [allRaisedButtons(context,this)], + contentList: allRaisedButtons(context, this), docUrl: 'https://docs.flutter.io/flutter/material/RaisedButton-class.html', ); } } -/* - * 所有的 RaisedButton 按钮 - */ -Widget allRaisedButtons(BuildContext context,_DemoState that){ + // 所有的 RaisedButton 按钮 +List 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), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _raisedText0), - textAlignBar(_raisedText1), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - raisedButton.RaisedButtonDefault(), - SizedBox(width: 20.0), // 间距 - raisedButton.RaisedButtonDefault(false), - ], - ), - textAlignBar(_raisedText2), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - //mainAxisSize: MainAxisSize.min, - children: [ - raisedButton.RaisedButtonIconDefault(), - raisedButton.RaisedButtonIconDefault(false), - ], - ), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - //mainAxisSize: MainAxisSize.min, - children: [ - raisedButton.RaisedButtonIconDefault(true, Icons.android), - raisedButton.RaisedButtonIconDefault(true, Icons.announcement), - ], - ), - textAlignBar(_raisedText3), - SizedBox(height: 10.0), - raisedButton.RaisedButtonCustom('主要按钮',Colors.blue,buttonShape), - SizedBox(height: 10.0), - raisedButton.RaisedButtonCustom('成功按钮',Colors.green,buttonShape), - SizedBox(height: 10.0), - raisedButton.RaisedButtonCustom('信息按钮',Colors.grey,buttonShape), - SizedBox(height: 10.0), - raisedButton.RaisedButtonCustom('警告按钮',Colors.orange,buttonShape), - SizedBox(height: 10.0), - raisedButton.RaisedButtonCustom('危险按钮',Colors.pink,buttonShape), - SizedBox(height: 10.0), - raisedButton.RaisedButtonCustom( '点击切换,按钮的圆角', Colors.blue, buttonShape, - () => that.setButtonShapeType()), - SizedBox(height: 20.0) - ]) - ); + return [ + _raisedText0, + _raisedText1, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + raisedButton.RaisedButtonDefault(), + SizedBox(width: 20.0), // 间距 + raisedButton.RaisedButtonDefault(false), + ], + ), + _raisedText2, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + //mainAxisSize: MainAxisSize.min, + children: [ + raisedButton.RaisedButtonIconDefault(), + raisedButton.RaisedButtonIconDefault(false), + ], + ), + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + //mainAxisSize: MainAxisSize.min, + children: [ + raisedButton.RaisedButtonIconDefault(true, Icons.android), + raisedButton.RaisedButtonIconDefault(true, Icons.announcement), + ], + ), + _raisedText3, + SizedBox(height: 10.0), + raisedButton.RaisedButtonCustom('主要按钮', Colors.blue, buttonShape), + SizedBox(height: 10.0), + raisedButton.RaisedButtonCustom('成功按钮', Colors.green, buttonShape), + SizedBox(height: 10.0), + raisedButton.RaisedButtonCustom('信息按钮', Colors.grey, buttonShape), + SizedBox(height: 10.0), + raisedButton.RaisedButtonCustom('警告按钮', Colors.orange, buttonShape), + SizedBox(height: 10.0), + raisedButton.RaisedButtonCustom('危险按钮', Colors.pink, buttonShape), + SizedBox(height: 10.0), + raisedButton.RaisedButtonCustom('点击切换,按钮的圆角', Colors.blue, buttonShape, + () => that.setButtonShapeType()), + SizedBox(height: 20.0) + ]; } -/* - * alert 弹框 - * context:容器的父级 - * */ -// void _showMessage(String name, BuildContext context) { -// showDialog( -// // alert 的父级 -// context: context, -// builder: (BuildContext context) { -// return AlertDialog( -// title: new Text('提示'), -// content: new Text(name), -// actions: [ -// new FlatButton( -// // alert 的取消按钮 -// onPressed: () { -// // 取消的事件 -// Navigator.of(context).pop(true); -// }, -// child: new Text('取消')) -// ]); -// } -// ); -// } - -/* -* 带align的text -* */ -Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new 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) - ]) - ); -} - -/* -* 绘制边框信息,比如是否有边框,是否是圆角 -* */ +// 绘制边框信息,比如是否有边框,是否是圆角 ShapeBorder drawShape(String type){ final Color _color = _randomColor(); final borderWidth = Random.secure().nextInt(5).toDouble(); @@ -185,7 +136,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, @@ -203,9 +154,7 @@ ShapeBorder drawShape(String type){ } } -/* -* 取随机颜色 -* */ +// 取随机颜色 Color _randomColor() { var red = Random.secure().nextInt(255); var greed = Random.secure().nextInt(255); diff --git a/lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart b/lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart index 3b309a0b..a763504c 100644 --- a/lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart +++ b/lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart @@ -1,18 +1,17 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: RawMaterialButton 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: RawMaterialButton 的示例 + import 'dart:math'; + import 'package:flutter/material.dart'; -/* -* RawMaterialButton 默认按钮的实例 -* isDisabled:是否是禁用,isDisabled 默认为true -* */ +// RawMaterialButton 默认按钮的实例 +// isDisabled:是否是禁用,isDisabled 默认为true + class RawMaterialButtonDefault extends StatelessWidget { final bool isDisabled; @@ -29,9 +28,7 @@ class RawMaterialButtonDefault extends StatelessWidget { } } -/* -* RawMaterialButton 自定义的实例 -* */ +// RawMaterialButton 自定义的实例 class RawMaterialButtonCustom extends StatelessWidget { final String txt; final Color color; @@ -62,7 +59,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 3bffb8cd..b17bf1fa 100644 --- a/lib/widgets/elements/Form/Button/RawMaterialButton/index.dart +++ b/lib/widgets/elements/Form/Button/RawMaterialButton/index.dart @@ -1,20 +1,18 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: RawMaterialButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/RawMaterialButton-class.html - */ -import '../../../../../common/widget_demo.dart'; +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: RawMaterialButton 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/RawMaterialButton-class.html + import 'dart:math'; + import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as rawMaterialButton; - const String _rawMaterialText0 = """### **简介** > RawMaterial button “RawMaterial 按钮” @@ -43,105 +41,61 @@ class _DemoState extends State { String buttonShapeType = 'border'; // 边框类型 void setButtonShapeType(){ //String _buttonShapeType = (buttonShapeType == 'border') ? 'radius' : 'border'; - this.setState((){ - //buttonShapeType = _buttonShapeType; - }); + if( mounted ) { + this.setState(() { + //buttonShapeType = _buttonShapeType; + }); + } } @override Widget build(BuildContext context) { return WidgetDemo( title: 'RawMaterialButton', codeUrl: 'elements/Form/Button/RawMaterialButton/demo.dart', - contentList: [allRawMaterialButtons(context,this)], + contentList: allRawMaterialButtons(context,this), docUrl: 'https://docs.flutter.io/flutter/material/RawMaterialButton-class.html', ); } } -/* - * 所有的 RawMaterialButton 按钮 - */ -Widget allRawMaterialButtons(BuildContext context,_DemoState that){ + +// 所有的 RawMaterialButton 按钮 +List 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), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _rawMaterialText0), - textAlignBar(_rawMaterialText1), - ButtonBar( - alignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - rawMaterialButton.RawMaterialButtonDefault(), - SizedBox(width: 20.0), // 间距 - rawMaterialButton.RawMaterialButtonDefault(false), - ], - ), - textAlignBar(_rawMaterialText2), - SizedBox(height: 10.0), - rawMaterialButton.RawMaterialButtonCustom('主要按钮',Colors.blue,buttonShape), - SizedBox(height: 10.0), - rawMaterialButton.RawMaterialButtonCustom('成功按钮',Colors.green,buttonShape), - SizedBox(height: 10.0), - rawMaterialButton.RawMaterialButtonCustom('信息按钮',Colors.grey,buttonShape), - SizedBox(height: 10.0), - rawMaterialButton.RawMaterialButtonCustom('警告按钮',Colors.orange,buttonShape), - SizedBox(height: 10.0), - rawMaterialButton.RawMaterialButtonCustom('危险按钮',Colors.pink,buttonShape), - SizedBox(height: 10.0), - rawMaterialButton.RawMaterialButtonCustom( '点击切换,观察字体变化', Colors.blue, buttonShape, - () => that.setButtonShapeType()), - SizedBox(height: 20.0) - ]) - ); + return [ + _rawMaterialText0, + _rawMaterialText1, + ButtonBar( + alignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + rawMaterialButton.RawMaterialButtonDefault(), + SizedBox(width: 20.0), // 间距 + rawMaterialButton.RawMaterialButtonDefault(false), + ], + ), + _rawMaterialText2, + SizedBox(height: 10.0), + rawMaterialButton.RawMaterialButtonCustom('主要按钮', Colors.blue, buttonShape), + SizedBox(height: 10.0), + rawMaterialButton.RawMaterialButtonCustom( + '成功按钮', Colors.green, buttonShape), + SizedBox(height: 10.0), + rawMaterialButton.RawMaterialButtonCustom('信息按钮', Colors.grey, buttonShape), + SizedBox(height: 10.0), + rawMaterialButton.RawMaterialButtonCustom( + '警告按钮', Colors.orange, buttonShape), + SizedBox(height: 10.0), + rawMaterialButton.RawMaterialButtonCustom('危险按钮', Colors.pink, buttonShape), + SizedBox(height: 10.0), + rawMaterialButton.RawMaterialButtonCustom( + '点击切换,观察字体变化', Colors.blue, buttonShape, + () => that.setButtonShapeType()), + SizedBox(height: 20.0) + ]; } -/* - * alert 弹框 - * context:容器的父级 - * */ -// void _showMessage(String name, BuildContext context) { -// showDialog( -// // alert 的父级 -// context: context, -// builder: (BuildContext context) { -// return AlertDialog( -// title: new Text('提示'), -// content: new Text(name), -// actions: [ -// new FlatButton( -// // alert 的取消按钮 -// onPressed: () { -// // 取消的事件 -// Navigator.of(context).pop(true); -// }, -// child: new Text('取消')) -// ]); -// } -// ); -// } - -/* -* 带align的text -* */ -Widget textAlignBar(String txt){ - //style: new TextStyle(fontSize: 15.5, height: 1.2),textAlign:TextAlign.left - return new 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) - ]) - ); -} - -/* -* 绘制边框信息,比如是否有边框,是否是圆角 -* */ +// 绘制边框信息,比如是否有边框,是否是圆角 ShapeBorder drawShape(String type){ final Color _color = _randomColor(); final borderWidth = Random.secure().nextInt(5).toDouble(); @@ -158,7 +112,7 @@ ShapeBorder drawShape(String type){ break; case 'radius': return RoundedRectangleBorder( - side:new BorderSide( // 保留原来的边框样式 + side: BorderSide( // 保留原来的边框样式 width: borderWidth, color: _color, style: BorderStyle.solid, @@ -176,9 +130,7 @@ ShapeBorder drawShape(String type){ } } -/* -* 取随机颜色 -* */ +// 取随机颜色 Color _randomColor() { var red = Random.secure().nextInt(255); var greed = Random.secure().nextInt(255); diff --git a/lib/widgets/elements/Form/Button/index.dart b/lib/widgets/elements/Form/Button/index.dart index cdcff0bc..b5cda7e7 100644 --- a/lib/widgets/elements/Form/Button/index.dart +++ b/lib/widgets/elements/Form/Button/index.dart @@ -1,6 +1,6 @@ -import '../../../../model/widget.dart'; import "package:flutter/material.dart"; +import '../../../../model/widget.dart'; import 'FlatButton/index.dart' as FlatButton; import 'RaisedButton/index.dart' as RaisedButton; import 'OutlineButton/index.dart' as OutlineButton; diff --git a/lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart b/lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart index 60ebf8c8..7cd4037f 100644 --- a/lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart +++ b/lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart @@ -1,18 +1,16 @@ -/** - * Created with Android Studio. - * User: 一晟 - * Date: 2018/11/22 - * Time: 上午12:03 - * email: zhu.yan@alibaba-inc.com - * tartget: Checkbox 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/11/22 +/// Time: 上午12:03 +/// email: zhu.yan@alibaba-inc.com +/// target: Checkbox 的示例 + import 'dart:math'; + import 'package:flutter/material.dart'; -/* -* Checkbox 默认的实例 -* index 当前checkbox 的索引值 -* */ +/// Checkbox 默认的实例 +/// index 当前checkbox 的索引值 class CheckboxDefault extends StatefulWidget{ final int index; final parent; @@ -30,18 +28,18 @@ class _CheckboxDefault extends State { tristate:false, value: isChecked, onChanged: (bool bol) { - setState((){ - isChecked = bol; - }); + if(mounted) { + setState(() { + isChecked = bol; + }); + } } ); } } -/* -* Checkbox 默认的实例 -* index 当前checkbox 的索引值 -* */ +/// Checkbox 默认的实例 +/// index 当前checkbox 的索引值 class CheckboxSelect extends StatelessWidget { final int index; final widget; @@ -58,9 +56,11 @@ class CheckboxSelect extends StatelessWidget { tristate:false, value: parent.selectValue == this.index, onChanged: (bool bol) { - parent.setState((){ - parent.selectValue = bol ? this.index : -1; - }); + if(parent.mounted) { + parent.setState(() { + parent.selectValue = bol ? this.index : -1; + }); + } } ); } diff --git a/lib/widgets/elements/Form/CheckBox/Checkbox/index.dart b/lib/widgets/elements/Form/CheckBox/Checkbox/index.dart index aeb49130..2a65383f 100644 --- a/lib/widgets/elements/Form/CheckBox/Checkbox/index.dart +++ b/lib/widgets/elements/Form/CheckBox/Checkbox/index.dart @@ -1,17 +1,14 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: Checkbox 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/Checkbox-class.html - */ -import '../../../../../common/widget_demo.dart'; +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: Checkbox 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/Checkbox-class.html import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as checkbox; const String _checkboxText0 = @@ -48,64 +45,42 @@ class _DemoState extends State { return WidgetDemo( title: 'Checkbox', codeUrl: 'elements/Form/CheckBox/Checkbox/demo.dart', - contentList: [allCheckboxs(context,this)], + contentList: allCheckboxs(context,this), docUrl: 'https://docs.flutter.io/flutter/material/Checkbox-class.html', ); } } -/* - * 所有的 Checkbox 按钮 - */ -Widget allCheckboxs(BuildContext context,_DemoState that){ - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - MarkdownBody(data: _checkboxText0), - textAlignBar(_checkboxText1), - Row( - mainAxisAlignment : MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children:[ - checkbox.CheckboxDefault(that,0), - checkbox.CheckboxDefault(that,1), - checkbox.CheckboxDefault(that,2), - checkbox.CheckboxDefault(that,3), - checkbox.CheckboxDefault(that,4), - ], - ), - textAlignBar(_checkboxText2), - Row( - mainAxisAlignment : MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - checkbox.CheckboxSelect(context.widget,that,0), - checkbox.CheckboxSelect(context.widget,that,1), - checkbox.CheckboxSelect(context.widget,that,2), - checkbox.CheckboxSelect(context.widget,that,3), - checkbox.CheckboxSelect(context.widget,that,4), - ], - ), - SizedBox(width: 20.0), // 间距 - ]) - ); -} - -/* -* 带align的text -* */ -Widget textAlignBar(String txt){ - return new 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) - ]) - ); + // 所有的 Checkbox 按钮 +List allCheckboxs(BuildContext context,_DemoState that){ + return [ + _checkboxText0, + _checkboxText1, + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + checkbox.CheckboxDefault(that, 0), + checkbox.CheckboxDefault(that, 1), + checkbox.CheckboxDefault(that, 2), + checkbox.CheckboxDefault(that, 3), + checkbox.CheckboxDefault(that, 4), + ], + ), + _checkboxText2, + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + checkbox.CheckboxSelect(context.widget, that, 0), + checkbox.CheckboxSelect(context.widget, that, 1), + checkbox.CheckboxSelect(context.widget, that, 2), + checkbox.CheckboxSelect(context.widget, that, 3), + checkbox.CheckboxSelect(context.widget, that, 4), + ], + ), + SizedBox(width: 20.0), // 间距 + ]; } diff --git a/lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart b/lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart index d4e5c2a9..a302b59c 100644 --- a/lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart +++ b/lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/23 - * Time: 下午6:08 - * email: zhu.yan@alibaba-inc.com - * tartget: CheckboxListTile 的示例 - */ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/23 +/// Time: 下午6:08 +/// email: zhu.yan@alibaba-inc.com +/// target: CheckboxListTile 的示例 import 'package:flutter/material.dart'; @@ -25,7 +23,9 @@ class _CheckboxListTileStateDefault extends State { for (var i = 0; i < isChecks.length; i++) { isChecks[i] = value; } - setState(() => _value = value); + if(mounted) { + setState(() => _value = value); + } } bool isCheck=false; List isChecks=[false,false,false,false]; @@ -34,7 +34,7 @@ class _CheckboxListTileStateDefault extends State { return Column( mainAxisAlignment: MainAxisAlignment.start, children: [ - new Center( + Center( child: CheckboxListTile( value: _value, selected:true,// 默认文字是否高亮 @@ -48,22 +48,24 @@ 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){ - setState(() { - isChecks[0]=bool; - }); + if(mounted) { + setState(() { + isChecks[0] = bool; + }); + } }), ), - 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 +74,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 +86,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 ba41a1cc..47605144 100644 --- a/lib/widgets/elements/Form/CheckBox/CheckboxListTile/index.dart +++ b/lib/widgets/elements/Form/CheckBox/CheckboxListTile/index.dart @@ -1,16 +1,13 @@ -/** - * Created with Android Studio. - * User: ryan - * Date: 2018/12/23 - * Time: 下午6:07 - * email: zhu.yan@alibaba-inc.com - * tartget: CheckboxListTile 的示例 - */ -import '../../../../../common/widget_demo.dart'; +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2018/12/23 +/// Time: 下午6:07 +/// email: zhu.yan@alibaba-inc.com +/// target: CheckboxListTile 的示例 import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as CheckboxListTileDemo; const String _CheckboxListTileText0 = @@ -48,44 +45,24 @@ class _DemoState extends State { return WidgetDemo( title: 'CheckboxListTile', codeUrl: 'elements/Form/CheckBox/CheckboxListTile/demo.dart', - contentList: [allCheckboxs(context, this)], + contentList: allCheckboxs(context, this), docUrl: 'https://docs.flutter.io/flutter/material/CheckboxListTile-class.html', ); } } -/* - * 所有的 CheckboxListTile widget - * context: 运行上下文 - * that: 指向有状态的 StatefulWidget - */ -Widget allCheckboxs(BuildContext context, _DemoState that) { - return Container( - //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), - child: Column( - //mainAxisSize: MainAxisSize.max, - children:[ - MarkdownBody(data: _CheckboxListTileText0), - textAlignBar(_CheckboxListTileText1), - CheckboxListTileDemo.CheckboxListTileDefault(context.widget,that),// CheckboxListTile 不能放在 Row 里... - textAlignBar(_CheckboxListTileText2), - CheckboxListTileDemo.CheckboxListTileStateDefault(), - SizedBox(height: 20.0), - ]) - ); -} - -/* -* 带align的text -* */ -Widget textAlignBar(String txt) { - return new Align( - alignment: FractionalOffset.centerLeft, - child: Column( - children: [ - SizedBox(height: 20.0), - MarkdownBody(data: txt) - ]) - ); + // 所有的 CheckboxListTile widget + // context: 运行上下文 + // that: 指向有状态的 StatefulWidget +List allCheckboxs(BuildContext context, _DemoState that) { + return [ + _CheckboxListTileText0, + _CheckboxListTileText1, + CheckboxListTileDemo.CheckboxListTileDefault(context.widget, that), + // CheckboxListTile 不能放在 Row 里... + _CheckboxListTileText2, + CheckboxListTileDemo.CheckboxListTileStateDefault(), + SizedBox(height: 20.0), + ]; } diff --git a/lib/widgets/elements/Form/CheckBox/index.dart b/lib/widgets/elements/Form/CheckBox/index.dart index 5a8d53c0..6c26b47d 100644 --- a/lib/widgets/elements/Form/CheckBox/index.dart +++ b/lib/widgets/elements/Form/CheckBox/index.dart @@ -1,6 +1,6 @@ -import '../../../../model/widget.dart'; import "package:flutter/material.dart"; +import '../../../../model/widget.dart'; import 'Checkbox/index.dart' as Checkbox; import 'CheckboxListTile/index.dart' as CheckboxListTile; diff --git a/lib/widgets/elements/Form/Input/TextField/index.dart b/lib/widgets/elements/Form/Input/TextField/index.dart index 1b353f52..fe5fe77b 100644 --- a/lib/widgets/elements/Form/Input/TextField/index.dart +++ b/lib/widgets/elements/Form/Input/TextField/index.dart @@ -1,15 +1,14 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: TextField 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/TextField-class.html - */ +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: TextField 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/TextField-class.html -import '../../../../../common/widget_demo.dart'; import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './text_field_demo.dart'; const String _textFieldText0 = """### **简介** 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..f028bfe0 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, //文本是起始端对齐 @@ -19,9 +19,7 @@ class DefaultTextField extends StatelessWidget { } } -/* -* 稍微复杂些的 TextField -* */ +/// 稍微复杂些的 TextField class CustomTextField extends StatelessWidget { void _textFieldChanged(String str) { print(str); @@ -29,7 +27,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/Input/index.dart b/lib/widgets/elements/Form/Input/index.dart index 8e8cfc9f..b03845c4 100644 --- a/lib/widgets/elements/Form/Input/index.dart +++ b/lib/widgets/elements/Form/Input/index.dart @@ -1,15 +1,14 @@ -/** - * Created with 菜鸟手册. - * User: 一晟 - * Date: 2018/11/14 - * Time: 下午4:31 - * email: zhu.yan@alibaba-inc.com - * target: RaisedButton 的示例 - * 对应文档地址:https://docs.flutter.io/flutter/material/RaisedButton-class.html - */ -import '../../../../model/widget.dart'; +/// Created with FlutterGo. +/// User: 一晟 +/// Date: 2018/11/14 +/// Time: 下午4:31 +/// email: zhu.yan@alibaba-inc.com +/// target: Input 的示例 +/// 对应文档地址:https://docs.flutter.io/flutter/material/RaisedButton-class.html + import "package:flutter/material.dart"; +import '../../../../model/widget.dart'; import './TextField/index.dart' as TextField; List widgetPoints = [ diff --git a/lib/widgets/elements/Form/Radio/Radio/demo.dart b/lib/widgets/elements/Form/Radio/Radio/demo.dart index 93022062..2e5df8df 100644 --- a/lib/widgets/elements/Form/Radio/Radio/demo.dart +++ b/lib/widgets/elements/Form/Radio/Radio/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 22/11/2018 - * Time: 19:37 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 22/11/2018 + /// Time: 19:37 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; @@ -22,27 +20,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 bfbaf098..8ec9dd9f 100644 --- a/lib/widgets/elements/Form/Radio/Radio/index.dart +++ b/lib/widgets/elements/Form/Radio/Radio/index.dart @@ -1,38 +1,29 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 22/11/2018 - * Time: 19:17 - * email: sanfan.hx@alibaba-inc.com - * tartget: Radio相关 - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 22/11/2018 + /// Time: 19:17 + /// email: sanfan.hx@alibaba-inc.com + /// target: Radio相关 import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; + const content1 = """ -# Radio +### **简介** > material design 风格的单选按钮 Radio widget 代表表单中的单选按钮, 当groupValue = value时代表组件被选中。 在表单中, 单选按钮是表示一组互斥选项按钮中的一个。当一个按钮被选中,之前选中的按钮就变为非选中的。 -# 示例显示 -"""; - -const content2 = """ -# 基本用法 - -``` -new Radio( - value: value, - groupValue: groupValue, //当value和groupValue一致的时候则选中 - onChanged: (T){ - onChange(T); - } - -```` +### **基本用法** +以下是Radio的属性主产明 +- activeColor → Color - 激活时的颜色。 +- groupValue → T - 选择组的值。 +- onChanged → ValueChanged - 改变时触发。 +- value → T - 单选的值。 """; class Demo extends StatefulWidget { static const String routeName = '/element/Form/Radio/index'; @@ -46,7 +37,6 @@ class _DemoState extends State { contentList: [ content1, new RadioADemo(), - content2 ], title: 'Radio', docUrl: 'https://docs.flutter.io/flutter/material/Radio-class.html', diff --git a/lib/widgets/elements/Form/Radio/RadioListTile/demo.dart b/lib/widgets/elements/Form/Radio/RadioListTile/demo.dart index 50ceb3c1..7bd16122 100644 --- a/lib/widgets/elements/Form/Radio/RadioListTile/demo.dart +++ b/lib/widgets/elements/Form/Radio/RadioListTile/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 20/12/2018 - * Time: 14:32 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 20/12/2018 + /// Time: 14:32 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; @@ -24,7 +22,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 eaac6d60..603451c7 100644 --- a/lib/widgets/elements/Form/Radio/RadioListTile/index.dart +++ b/lib/widgets/elements/Form/Radio/RadioListTile/index.dart @@ -1,38 +1,25 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 22/11/2018 - * Time: 19:17 - * email: sanfan.hx@alibaba-inc.com - * tartget: Radio相关 - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 22/11/2018 + /// Time: 19:17 + /// email: sanfan.hx@alibaba-inc.com + /// target: Radio相关 import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; + const content1 = """ -# RadioListTile +### **简介** > material design 风格的单选按钮附加文字label -点击文字的同时 , 将会出发 Radio的点击效果. +点击文字的同时 , 将会触发Radio的点击效果. 功能同 @Radio -# 示例显示 -"""; - -const content2 = """ -# 基本用法 - -``` dart -RadioListTile( - title: const Text('title'), - value: value, - groupValue: groupValue, - onChanged:onChange -) -``` - +### **基本用法** +Radio是单选框,和checkbox一样本身不包含状态,当groupValue = value时代表选中状态 """; class Demo extends StatefulWidget { static const String routeName = '/element/Form/RadioListTile/index'; @@ -45,8 +32,8 @@ class _DemoState extends State { return WidgetDemo( contentList: [ content1, - new DemoA(), - content2 + new DemoA() + ], title: 'RadioListTile', docUrl: 'https://docs.flutter.io/flutter/material/RadioListTile-class.html', diff --git a/lib/widgets/elements/Form/Radio/index.dart b/lib/widgets/elements/Form/Radio/index.dart index 27825fa6..f987d9ed 100644 --- a/lib/widgets/elements/Form/Radio/index.dart +++ b/lib/widgets/elements/Form/Radio/index.dart @@ -1,6 +1,6 @@ -import '../../../../model/widget.dart'; import "package:flutter/material.dart"; +import '../../../../model/widget.dart'; import 'Radio/index.dart' as Radio; import 'RadioListTile/index.dart' as RadioTile; diff --git a/lib/widgets/elements/Form/Slider/Slider/demo.dart b/lib/widgets/elements/Form/Slider/Slider/demo.dart index b7e009f2..d2719b40 100644 --- a/lib/widgets/elements/Form/Slider/Slider/demo.dart +++ b/lib/widgets/elements/Form/Slider/Slider/demo.dart @@ -1,85 +1,92 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 20/12/2018 - * Time: 17:51 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 20/12/2018 +/// Time: 17:51 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; + class SliderDemo extends StatefulWidget { _Demo createState() => _Demo(); } class _Demo extends State { double value = 0.0; + Widget build(BuildContext context) { - return new Slider( - value: value,//实际进度的位置 - inactiveColor: Colors.black12,//进度中不活动部分的颜色 + return Slider( + value: value, + //实际进度的位置 + inactiveColor: Colors.black12, + //进度中不活动部分的颜色 label: 'value: $value', min: 0.0, max: 100.0, divisions: 1000, - activeColor: Colors.blue,//进度中活动部分的颜色 - onChanged: (double){ + activeColor: Colors.blue, + //进度中活动部分的颜色 + onChanged: (double) { setState(() { value = double.roundToDouble(); }); }, ); } - } - - class SliderThemeDemo extends StatefulWidget { _SliderThemeDemo createState() => _SliderThemeDemo(); } 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,//实际进度的颜色 + activeTrackColor: Colors.yellowAccent, + //实际进度的颜色 // inactiveTickMarkColor:Colors.black - thumbColor: Colors.black,//滑块中心的颜色 - inactiveTrackColor:Colors.red,//默 认进度条的颜色 - valueIndicatorColor: Colors.blue,//提示进度的气派的背景色 - valueIndicatorTextStyle: new TextStyle(//提示气泡里面文字的样式 + thumbColor: Colors.black, + //滑块中心的颜色 + inactiveTrackColor: Colors.red, + //默 认进度条的颜色 + valueIndicatorColor: Colors.blue, + //提示进度的气派的背景色 + valueIndicatorTextStyle: TextStyle( + //提示气泡里面文字的样式 color: Colors.white, ), - inactiveTickMarkColor:Colors.blue,//divisions对进度线分割后 断续线中间间隔的颜色 - overlayColor: Colors.pink,//滑块边缘颜色 + 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, - onChanged: (double){ + onChanged: (double) { setState(() { - value=double.floorToDouble();//转化成double + value = double.floorToDouble(); //转化成double }); }, min: 0.0, 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 2f6a6dfc..9054a841 100644 --- a/lib/widgets/elements/Form/Slider/Slider/index.dart +++ b/lib/widgets/elements/Form/Slider/Slider/index.dart @@ -1,14 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 20/12/2018 - * Time: 17:43 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 20/12/2018 +/// Time: 17:43 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const contentA = ''' @@ -49,19 +48,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..b88e3297 100644 --- a/lib/widgets/elements/Form/Slider/SliderTheme/demo.dart +++ b/lib/widgets/elements/Form/Slider/SliderTheme/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 27/12/2018 - * Time: 14:40 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 27/12/2018 + /// Time: 14:40 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; @@ -17,8 +15,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 +24,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 +51,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 a21eaa90..93e0e88f 100644 --- a/lib/widgets/elements/Form/Slider/SliderTheme/index.dart +++ b/lib/widgets/elements/Form/Slider/SliderTheme/index.dart @@ -1,14 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 20/12/2018 - * Time: 17:43 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 20/12/2018 + /// Time: 17:43 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const contentA = ''' @@ -24,7 +23,7 @@ const contentA = ''' 基本属性参考以下代码: ``` -new SliderTheme( + SliderTheme( data: SliderThemeData({ @required Color activeTrackColor, @required Color inactiveTrackColor, @@ -67,7 +66,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..b88e3297 100644 --- a/lib/widgets/elements/Form/Slider/SliderThemeData/demo.dart +++ b/lib/widgets/elements/Form/Slider/SliderThemeData/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 27/12/2018 - * Time: 14:40 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 27/12/2018 + /// Time: 14:40 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; @@ -17,8 +15,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 +24,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 +51,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 647d1bba..682c492f 100644 --- a/lib/widgets/elements/Form/Slider/SliderThemeData/index.dart +++ b/lib/widgets/elements/Form/Slider/SliderThemeData/index.dart @@ -1,14 +1,14 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 20/12/2018 - * Time: 17:43 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 20/12/2018 + /// Time: 17:43 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; +import 'package:flutter/cupertino.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const contentA = ''' @@ -21,30 +21,6 @@ const contentA = ''' > 配合SliderTheme, 修改slider组件各个部件的样式, 参照@Slider的各组件命名, 修改各部件样式 -构造函数如下 -```` -const SliderThemeData({ - @required Color activeTrackColor, - @required Color inactiveTrackColor, - @required Color disabledActiveTrackColor, - @required Color disabledInactiveTrackColor, - @required Color activeTickMarkColor, - @required Color inactiveTickMarkColor, - @required Color disabledActiveTickMarkColor, - @required Color disabledInactiveTickMarkColor, - @required Color thumbColor, - @required Color disabledThumbColor, - @required Color overlayColor, - @required Color valueIndicatorColor, - @required SliderComponentShape thumbShape, - @required SliderComponentShape valueIndicatorShape, - @required ShowValueIndicator showValueIndicator, - @required TextStyle valueIndicatorTextStyle -}) - -```` - -### **基本实例** '''; @@ -56,14 +32,14 @@ class Demo extends StatefulWidget { } class _Demo extends State { - + Color c = CupertinoColors.activeBlue; Widget build(BuildContext context) { return WidgetDemo( title: 'SliderThemeData', 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/Slider/index.dart b/lib/widgets/elements/Form/Slider/index.dart index 4511d653..c715e101 100644 --- a/lib/widgets/elements/Form/Slider/index.dart +++ b/lib/widgets/elements/Form/Slider/index.dart @@ -1,5 +1,6 @@ -import '../../../../model/widget.dart'; import "package:flutter/material.dart"; + +import '../../../../model/widget.dart'; import "Slider/index.dart" as Slider; import "SliderTheme/index.dart" as SliderTheme; import "SliderThemeData/index.dart" as SliderThemeData; diff --git a/lib/widgets/elements/Form/Switch/AnimatedSwitcher/demo.dart b/lib/widgets/elements/Form/Switch/AnimatedSwitcher/demo.dart index a5be8eff..1ec3e50a 100644 --- a/lib/widgets/elements/Form/Switch/AnimatedSwitcher/demo.dart +++ b/lib/widgets/elements/Form/Switch/AnimatedSwitcher/demo.dart @@ -1,11 +1,9 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 28/12/2018 - * Time: 19:58 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 28/12/2018 + /// Time: 19:58 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; diff --git a/lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart b/lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart index 357c5fe5..1f90412a 100644 --- a/lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart +++ b/lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart @@ -1,14 +1,14 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 28/12/2018 - * Time: 19:54 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 28/12/2018 +/// Time: 19:54 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; + import 'demo.dart'; const contentA = ''' @@ -25,22 +25,18 @@ const contentA = ''' '''; - class Demo extends StatefulWidget { static const String routeName = 'elements/Form/Switch/AnimatedSwitcher'; + _Demo createState() => _Demo(); } class _Demo extends State { - Widget build(BuildContext context) { return WidgetDemo( title: 'SwitchListTile', codeUrl: 'elements/Form/Switch/AnimatedSwitcher/demo.dart', - contentList: [ - contentA, - new AnimatedSwitcherDemo() - ], + contentList: [contentA, AnimatedSwitcherDemo()], docUrl: '', ); } diff --git a/lib/widgets/elements/Form/Switch/Switch/demo.dart b/lib/widgets/elements/Form/Switch/Switch/demo.dart index 283b6f33..d5de396b 100644 --- a/lib/widgets/elements/Form/Switch/Switch/demo.dart +++ b/lib/widgets/elements/Form/Switch/Switch/demo.dart @@ -1,16 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 27/12/2018 - * Time: 17:30 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 27/12/2018 +/// Time: 17:30 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; - - class SwitchDemo extends StatefulWidget { _Demo createState() => _Demo(); } @@ -18,7 +14,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 +32,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 +52,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 75b30205..cad5392a 100644 --- a/lib/widgets/elements/Form/Switch/Switch/index.dart +++ b/lib/widgets/elements/Form/Switch/Switch/index.dart @@ -1,14 +1,13 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 20/12/2018 - * Time: 17:43 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 20/12/2018 +/// Time: 17:43 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const contentA = ''' @@ -17,22 +16,8 @@ const contentA = ''' ### **基本用法** +通常用于Bool值参数的设置. -``` -new Switch( - value: isChecked, - activeColor: Colors.blue, // 激活时原点颜色 - onChanged: (bool val) { - this.setState(() { - this.isChecked = !this.isChecked; - }); - }, -) -``` - -### **基本实例** - -@SwitchDemo '''; @@ -60,18 +45,6 @@ const contentC = ''' '''; -const contentD = ''' - -``` -activeTrackColor:Colors.green, -inactiveThumbColor: Colors.black, -inactiveThumbImage: NetworkImage('https://flutter.io/images/homepage/header-illustration.png'), -activeThumbImage: NetworkImage( - "https://flutter.io/images/homepage/screenshot-2.png" -), -inactiveTrackColor: Colors.yellow, -``` -'''; class Demo extends StatefulWidget { static const String routeName = 'elements/Form/Switch/Switch'; @@ -83,15 +56,14 @@ class _Demo extends State { Widget build(BuildContext context) { return WidgetDemo( title: 'Switch', - codeUrl: '', + codeUrl: '/elements/Form/Switch/Switch/demo.dart', contentList: [ contentA, SwitchDemo(), contentB, SwitchHighDemo(), contentC, - SwitchTypesDemo(), - contentD + SwitchTypesDemo() ], docUrl: 'https://docs.flutter.io/flutter/material/Switch-class.html', ); diff --git a/lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart b/lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart index a80109b7..138312a9 100644 --- a/lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart +++ b/lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart @@ -1,16 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 28/12/2018 - * Time: 15:48 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 28/12/2018 + /// Time: 15:48 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; - - class SwitchListTileDemo extends StatefulWidget { _Demo createState() => _Demo(); } @@ -18,7 +14,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/Switch/SwitchListTile/index.dart b/lib/widgets/elements/Form/Switch/SwitchListTile/index.dart index a87c3240..d5adef0d 100644 --- a/lib/widgets/elements/Form/Switch/SwitchListTile/index.dart +++ b/lib/widgets/elements/Form/Switch/SwitchListTile/index.dart @@ -1,14 +1,12 @@ -/** - * Created with Android Studio. - * User: 三帆 - * Date: 28/12/2018 - * Time: 15:48 - * email: sanfan.hx@alibaba-inc.com - * tartget: xxx - */ + /// Created with Android Studio. + /// User: 三帆 + /// Date: 28/12/2018 + /// Time: 15:48 + /// email: sanfan.hx@alibaba-inc.com + /// target: xxx import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const contentA = ''' diff --git a/lib/widgets/elements/Form/Switch/index.dart b/lib/widgets/elements/Form/Switch/index.dart index 5529cee0..c6f26d73 100644 --- a/lib/widgets/elements/Form/Switch/index.dart +++ b/lib/widgets/elements/Form/Switch/index.dart @@ -1,5 +1,6 @@ -import '../../../../model/widget.dart'; import "package:flutter/material.dart"; + +import '../../../../model/widget.dart'; import "Switch/index.dart" as Switch; import "SwitchListTile/index.dart" as SwitchListTile; import "AnimatedSwitcher/index.dart" as AnimatedSwitcher; diff --git a/lib/widgets/elements/Form/Text/RichText/demo.dart b/lib/widgets/elements/Form/Text/RichText/demo.dart new file mode 100644 index 00000000..c4f12666 --- /dev/null +++ b/lib/widgets/elements/Form/Text/RichText/demo.dart @@ -0,0 +1,31 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 14/01/2019 +/// Time: 19:02 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + +import 'package:flutter/material.dart'; + +class RichTextDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + + Widget build(BuildContext context) { + return Container( + color: Color(0xff000000), + width: 750.0, + child: RichText( + text: TextSpan( + text: 'Hello ', + children: [ + TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold, color: Color(0xfffffc42))), + TextSpan(text: ' world!', style: TextStyle(fontStyle: FontStyle.italic)), + ], + ), + ), + ); + } +} diff --git a/lib/widgets/elements/Form/Text/RichText/index.dart b/lib/widgets/elements/Form/Text/RichText/index.dart index 6b3c9f98..374a793a 100644 --- a/lib/widgets/elements/Form/Text/RichText/index.dart +++ b/lib/widgets/elements/Form/Text/RichText/index.dart @@ -1,60 +1,24 @@ import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import 'package:flutter_go/widgets/elements/Form/Text/RichText/demo.dart'; const String intro = """ -# 富文本显示 +### **简介** + +> 具有复杂样式的文本显示组件 在富文本使用多个不同风格的widget显示文本。要显示的文本使用TextSpan对象树来描述,每个对象都有一个用于该子树的关联样式。文本可能会跨越多行,也可能全部显示在同一行上,具体取决于布局约束。 -# 示例代码 - -``` -RichText( - text: TextSpan( - text: 'Hello ', - style: DefaultTextStyle.of(context).style, - children: [ - TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold)), - TextSpan(text: ' world!'), - ], - ), -) -``` - -# 示例示例 - -"""; -const String diff = """ -# RichText 与 Text.rich 对比 - 无论是Text或者Text.rich, 查看源代码发现. 都是由RichText构建出来 -## 源码展示 -``` -// Text 源码 -@override - Widget build(BuildContext context) { - ... - Widget result = RichText( - ... - - style: effectiveTextStyle, - text: data, - children: textSpan != null ? [textSpan] : null, - ), - ); - ... - return result; - } -``` -待补充... +### **基本用法** +我们可以让一段文本通过使用不同的TextSpan显示不同的样式。比如我们让"Hello beautiful world"的每个单词都显示不同的样式. + """; -const Map markDesc = { - 'intro': intro, - 'diff': diff -}; + + class Demo extends StatefulWidget { static const String routeName = '/element/Form/Text/RichText'; _Demo createState() => _Demo(); @@ -66,27 +30,10 @@ class _Demo extends State { return WidgetDemo( title: 'Rich Text', docUrl: 'https://docs.flutter.io/flutter/widgets/RichText-class.html', - codeUrl: '', - contentList: [new Column( - children: [ - MarkdownBody(data: markDesc['intro']), - Container( - color: Color(0xff000000), - width: 750.0, - child: RichText( - text: TextSpan( - text: 'Hello ', -// style: TextStyle(fontWeight: FontWeight.normal, inherit: true, fontSize: 44), - children: [ - TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold, color: Color(0xfffffc42))), - TextSpan(text: ' world!', style: TextStyle(fontStyle: FontStyle.italic)), - ], - ), - ), - ), - MarkdownBody(data: markDesc['diff']), - ], - ), - ]); + codeUrl: 'elements/Form/Text/RichText/index.dart', + contentList: [ + intro, + RichTextDemo(), + ]); } } diff --git a/lib/widgets/elements/Form/Text/Text/demo.dart b/lib/widgets/elements/Form/Text/Text/demo.dart new file mode 100644 index 00000000..f197078d --- /dev/null +++ b/lib/widgets/elements/Form/Text/Text/demo.dart @@ -0,0 +1,22 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 20/01/2019 +/// Time: 22:28 +/// email: sanfan.hx@alibaba-inc.com +/// target: CupertinoTabBar + +import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart'; + +class TextDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + int index = 0; + Duration timer = new Duration(minutes: 50); + + Widget build(BuildContext context) { + return Text("i'm a text"); + } +} \ No newline at end of file diff --git a/lib/widgets/elements/Form/Text/Text/index.dart b/lib/widgets/elements/Form/Text/Text/index.dart index 9cfc92f5..ea6db457 100644 --- a/lib/widgets/elements/Form/Text/Text/index.dart +++ b/lib/widgets/elements/Form/Text/Text/index.dart @@ -1,70 +1,31 @@ import 'package:flutter/material.dart'; -//import 'package:flutter_markdown/flutter_markdown.dart'; -import '../../../../../common/widget_demo.dart'; -import '../../../../../components/markdown.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import 'demo.dart'; const String intro = """ -# 说明 +### **简介** > 具有某个单一样式的文本显示的widget组件, 显示支持一行或者多行. 默认样式会继承层级最为接近的 *DefaultStyle* 当然, 你也可以重新他的样式 将 *DefaultStyle.inherit 设置为 false* -# 示例代码 +是最基本的文本显示组件 -``` dart -Text( - 'Hello, World ! How are you?', - textAlign: TextAlign.center, - overflow: TextOverflow.ellipsis, - style: TextStyle(fontWeight: FontWeight.bold), -) -``` +### **基本用法** +在这里介绍一下他的基本属性说明. -# 示例显示 +- data Text显示的文本,必填参数 String +- textAlign 文本的对齐方式,可以选择左对齐、右对齐还是居中对齐 TextAlign +- maxLines 文本显示的最大行数 int +- overflow 文本显示的截断方式 TextOverflow +- textScaleFactor 文本的缩放比例 double +- style 用于指定文本显示的样式如颜色、字体、粗细、背景等 +### **基本示例** + """; -const String leftDesc = """ -# 示例代码 - - -``` dart -// 左侧布局示例 -Text( - "Hello, World! I'm start from left?", - textAlign: TextAlign.left, - overflow: TextOverflow.ellipsis, - style: TextStyle(fontWeight: FontWeight.bold, inherit: true), -), -``` -# 示例显示 -"""; - -const String RichDesc = """ - -# 复杂文本显示 - -使用 Text.rich 构造函数,Text 组件可以显示具有不同样式的 TextSpan 段落。下面的示例显示每个单词具有不同样式的“Hello beautiful world”。 - -``` -Text.rich( - TextSpan( - text: 'Hello', // default text style - children: [ - TextSpan(text: ' beautiful ', style: TextStyle(fontStyle: FontStyle.italic)), - TextSpan(text: 'world', style: TextStyle(fontWeight: FontWeight.bold)), - ], - ), -) -``` -"""; - -const Map markDesc = { - "intro": intro, - "left": leftDesc, - "rich": RichDesc -}; class Demo extends StatefulWidget { static const String routeName = '/element/Form/Text/Text'; _Demo createState() => _Demo(); @@ -78,39 +39,11 @@ class _Demo extends State { return WidgetDemo( title: "Text", docUrl: 'flutter/widgets/Text-class.html', - codeUrl: 'elements/Form/Text/Text/index.dart', - contentList: [new Column( - children: [ - MarkdownBody(markDesc['intro']), - Text( - 'Hello, World! How are you?', - textAlign: TextAlign.center, - overflow: TextOverflow.ellipsis, - style: TextStyle(fontWeight: FontWeight.bold), - ), - MarkdownBody(markDesc['left']), - Container( - width: 750.0, - color: Color(0xFF0096ef), - child: Text( - "Hello, World! I'm start from left?", - textAlign: TextAlign.left, - overflow: TextOverflow.ellipsis, - style: TextStyle(color: Color(0xffffffff)), - ), - ), - MarkdownBody( markDesc['rich']), - Text.rich( - TextSpan( - text: 'Hello', // default text style - children: [ - TextSpan(text: ' beautiful ', style: TextStyle(fontStyle: FontStyle.italic)), - TextSpan(text: 'world', style: TextStyle(fontWeight: FontWeight.bold)), - ], - ), - ) - ], - )] + codeUrl: 'elements/Form/Text/Text/demo.dart', + contentList: [ + intro, + TextDemo(), + ] ); } } diff --git a/lib/widgets/elements/Form/Text/index.dart b/lib/widgets/elements/Form/Text/index.dart index c5881c6d..f5b7eb50 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 '../../../../model/widget.dart'; 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/elements/Frame/Align/Align/demo.dart b/lib/widgets/elements/Frame/Align/Align/demo.dart index 288c1003..98f48584 100644 --- a/lib/widgets/elements/Frame/Align/Align/demo.dart +++ b/lib/widgets/elements/Frame/Align/Align/demo.dart @@ -1,14 +1,11 @@ -import 'package:flutter/widgets.dart'; +/// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:Align描述 -/* - * Author: xiaojia.dxj - * Date: 2018/11/22 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/11/22 - * LastUpdateBy: xj.deng - * - * Describle:Align描述 - */ +import 'package:flutter/widgets.dart'; class AlignAlignment extends StatelessWidget { final Alignment status; @@ -18,13 +15,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 +42,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 c33438d3..610ede29 100644 --- a/lib/widgets/elements/Frame/Align/Align/index.dart +++ b/lib/widgets/elements/Frame/Align/Align/index.dart @@ -1,6 +1,7 @@ + import 'package:flutter/material.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String _flatText0 = """ @@ -35,15 +36,15 @@ class _DemoState extends State { title: 'Align', codeUrl: "elements/Frame/Align/Align/demo.dart", docUrl: 'https://docs.flutter.io/flutter/widgets/Align-class.html', - contentList: [_flatText0, _alignCreate()], + contentList: [_flatText0, _alignCreate(),_flatText1,_alignCreates()], ); } 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 +52,7 @@ class _DemoState extends State { ], ), SizedBox(height: 10.0), - new Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ AlignAlignment(Alignment.centerRight, 'centerRight'), @@ -60,7 +61,7 @@ class _DemoState extends State { ], ), SizedBox(height: 10.0), - new Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ AlignAlignment(Alignment.topLeft, 'topLeft'), @@ -69,13 +70,22 @@ class _DemoState extends State { ], ), SizedBox(height: 10.0), - MarkdownBody(data: _flatText1), - Container( - margin: new EdgeInsets.only(top: 20.0, bottom: 20.0), + + + ], + ); + } +} + +Column _alignCreates(){ + return Column( + children: [ + Container( + 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)), ), @@ -84,8 +94,7 @@ class _DemoState extends State { AlignFactor(Alignment.topLeft, 2.0, 2.0, 'topleft'), AlignFactor(Alignment.topRight, null, null, 'topleft'), AlignFactor(Alignment.center, null, null, 'center'), - AlignFactor(Alignment.bottomLeft, null, null, 'bottomLeft'), - ], - ); - } + AlignFactor(Alignment.bottomLeft, null, null, 'bottomLeft') + ], + ); } diff --git a/lib/widgets/elements/Frame/Align/index.dart b/lib/widgets/elements/Frame/Align/index.dart index a45c6ae3..0743b349 100644 --- a/lib/widgets/elements/Frame/Align/index.dart +++ b/lib/widgets/elements/Frame/Align/index.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_go/model/widget.dart'; +import 'package:flutter_go/model/widget.dart'; import './Align/index.dart' as Align; List widgetPoints = [ diff --git a/lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart b/lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart index 90995e77..03ceeb89 100644 --- a/lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart +++ b/lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart @@ -1,15 +1,13 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:ConstrainedBox描述 + import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; -/* - * Author: xiaojia.dxj - * Date: 2018/11/22 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/11/22 - * LastUpdateBy: xj.deng - * - * Describle:ConstrainedBox描述 - */ class ConstrainedBoxCreate extends StatelessWidget { final double currWidth; final String describe; @@ -29,12 +27,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/ConstrainedBox/index.dart b/lib/widgets/elements/Frame/Box/ConstrainedBox/index.dart index b9fbc78c..cd1d06fe 100644 --- a/lib/widgets/elements/Frame/Box/ConstrainedBox/index.dart +++ b/lib/widgets/elements/Frame/Box/ConstrainedBox/index.dart @@ -1,11 +1,12 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:56:53 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:56:53 - */ +/// Author: xiaojia.dxj +/// Date: 2019-01-08 15:56:53 +/// Last Modified by: xiaojia.dxj +/// Last Modified time: 2019-01-08 15:56:53 +/// email: xiaojia.dxj@alibaba-inc.com + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text = ''' diff --git a/lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart b/lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart index 8539ead3..bf4bf0fd 100644 --- a/lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart +++ b/lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart @@ -1,14 +1,12 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; -/* - * Author: xiaojia.dxj - * Date: 2018/11/22 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/11/22 - * LastUpdateBy: xj.deng - * - */ class DecoratedBoxCreate extends StatelessWidget { DecoratedBoxCreate({ Key key, @@ -21,7 +19,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 +44,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 +65,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 8ad78bbd..66ab7701 100644 --- a/lib/widgets/elements/Frame/Box/DecoratedBox/index.dart +++ b/lib/widgets/elements/Frame/Box/DecoratedBox/index.dart @@ -1,11 +1,12 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:56:49 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:56:49 - */ +///Author: xiaojia.dxj +///Date: 2019-01-08 15:56:49 +///Last Modified by: xiaojia.dxj +///Last Modified time: 2019-01-08 15:56:49 +///email: xiaojia.dxj@alibaba-inc.com + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String _Text = """### **简介** @@ -45,7 +46,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..084f8fe9 100644 --- a/lib/widgets/elements/Frame/Box/Fittedbox/demo.dart +++ b/lib/widgets/elements/Frame/Box/Fittedbox/demo.dart @@ -1,25 +1,22 @@ + /// Author: xiaojia.dxj + /// Date: 2018/12/2 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/12/2 + /// LastUpdateBy: xj.deng + /// Describle:FittedBox + import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; -/* - * Author: xiaojia.dxj - * Date: 2018/12/2 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/12/2 - * LastUpdateBy: xj.deng - * - * Describle:FittedBox - */ - 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 18fac673..74d1e25f 100644 --- a/lib/widgets/elements/Frame/Box/Fittedbox/index.dart +++ b/lib/widgets/elements/Frame/Box/Fittedbox/index.dart @@ -1,15 +1,14 @@ -/** - * Author: xiaojia.dxj - * Date: 2019-01-08 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2019-01-08 - * LastUpdateBy: xj.deng - * - */ + /// Author: xiaojia.dxj + /// Date: 2019-01-08 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2019-01-08 + /// LastUpdateBy: xj.deng + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; -import './demo.dart' as fittedBox; + +import 'package:flutter_go/components/widget_demo.dart'; +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/LimitedBox/index.dart b/lib/widgets/elements/Frame/Box/LimitedBox/index.dart index 89dfdb58..30dc8321 100644 --- a/lib/widgets/elements/Frame/Box/LimitedBox/index.dart +++ b/lib/widgets/elements/Frame/Box/LimitedBox/index.dart @@ -1,11 +1,13 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:56:35 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:56:35 - */ + + /// Author: xiaojia.dxj + /// Date: 2019-01-08 15:56:35 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 15:56:35 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String Text0 = """ 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 b0f49279..d9a26a75 100644 --- a/lib/widgets/elements/Frame/Box/OverflowBox/index.dart +++ b/lib/widgets/elements/Frame/Box/OverflowBox/index.dart @@ -1,11 +1,13 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:56:31 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:56:31 - */ + + /// Author: xiaojia.dxj + /// Date: 2019-01-08 15:56:31 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 15:56:31 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as overflowBox; const String Text0 = """### **OverflowBox简介** @@ -76,7 +78,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 +95,6 @@ class _DemoState extends State { curalignment: Alignment.center, ), ), - ], ); } diff --git a/lib/widgets/elements/Frame/Box/RotatedBox/index.dart b/lib/widgets/elements/Frame/Box/RotatedBox/index.dart index 2b4748f5..c87107d4 100644 --- a/lib/widgets/elements/Frame/Box/RotatedBox/index.dart +++ b/lib/widgets/elements/Frame/Box/RotatedBox/index.dart @@ -1,11 +1,13 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:56:13 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:56:13 - */ + + /// Author: xiaojia.dxj + /// Date: 2019-01-08 15:56:13 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 15:56:13 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; const String _Text = ''' diff --git a/lib/widgets/elements/Frame/Box/SizeBox/index.dart b/lib/widgets/elements/Frame/Box/SizeBox/index.dart index dab70e6d..6ae1f9db 100644 --- a/lib/widgets/elements/Frame/Box/SizeBox/index.dart +++ b/lib/widgets/elements/Frame/Box/SizeBox/index.dart @@ -1,11 +1,13 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:55:46 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:55:46 - */ + + /// Author: xiaojia.dxj + /// Date: 2019-01-08 15:55:46 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 15:55:46 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart' as sizeBox; class Demo extends StatefulWidget { @@ -28,15 +30,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 6554d17d..2333db8c 100644 --- a/lib/widgets/elements/Frame/Box/SizedOverflowBox/index.dart +++ b/lib/widgets/elements/Frame/Box/SizedOverflowBox/index.dart @@ -1,12 +1,14 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:55:31 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:55:31 - */ + + /// Author: xiaojia.dxj + /// Date: 2019-01-08 15:55:31 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 15:55:31 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; -import './demo.dart' as sizeBox; + +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart'; // const String _Text = """### **SizeBox简介** // > 常用的一个控件,设置具体尺寸。 @@ -53,47 +55,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/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/UnconstrainedBox/index.dart b/lib/widgets/elements/Frame/Box/UnconstrainedBox/index.dart index 42f60123..b37fd267 100644 --- a/lib/widgets/elements/Frame/Box/UnconstrainedBox/index.dart +++ b/lib/widgets/elements/Frame/Box/UnconstrainedBox/index.dart @@ -1,11 +1,13 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 15:57:00 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 16:00:14 - */ + + /// Author: xiaojia.dxj + /// Date: 2019-01-08 15:57:00 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 16:00:14 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String Text0 = """### **简介** diff --git a/lib/widgets/elements/Frame/Box/index.dart b/lib/widgets/elements/Frame/Box/index.dart index 0e61d53c..f7984ead 100644 --- a/lib/widgets/elements/Frame/Box/index.dart +++ b/lib/widgets/elements/Frame/Box/index.dart @@ -1,11 +1,10 @@ -import '../../../../model/widget.dart'; import "package:flutter/material.dart"; +import '../../../../model/widget.dart'; 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..24075553 100644 --- a/lib/widgets/elements/Frame/Expanded/Expanded/expanded_demo.dart +++ b/lib/widgets/elements/Frame/Expanded/Expanded/expanded_demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-28 20:09:40 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-28 20:10:32 - */ +/// @Author: 一凨 +/// @Date: 2018-11-28 20:09:40 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-11-28 20:10:32 + import 'package:flutter/material.dart'; class ExpandedDemo extends StatelessWidget { @@ -14,57 +13,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/Expanded/Expanded/index.dart b/lib/widgets/elements/Frame/Expanded/Expanded/index.dart index c7d5a736..f7d662b5 100644 --- a/lib/widgets/elements/Frame/Expanded/Expanded/index.dart +++ b/lib/widgets/elements/Frame/Expanded/Expanded/index.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './expanded_demo.dart'; const contentText0 = ''' diff --git a/lib/widgets/elements/Frame/Expanded/index.dart b/lib/widgets/elements/Frame/Expanded/index.dart index 10662c2c..cb5dc549 100644 --- a/lib/widgets/elements/Frame/Expanded/index.dart +++ b/lib/widgets/elements/Frame/Expanded/index.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import '../../../../model/widget.dart'; + +import 'package:flutter_go/model/widget.dart'; import './Expanded/index.dart' as Expanded; diff --git a/lib/widgets/elements/Frame/Layout/Center/index.dart b/lib/widgets/elements/Frame/Layout/Center/index.dart index 96382d0e..42c2bc9c 100644 --- a/lib/widgets/elements/Frame/Layout/Center/index.dart +++ b/lib/widgets/elements/Frame/Layout/Center/index.dart @@ -1,5 +1,12 @@ + /// Author: xiaojia.dxj + /// Date: 2019-01-08 15:57:00 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 16:00:14 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String Text0 = """### **简介** diff --git a/lib/widgets/elements/Frame/Layout/Column/demo.dart b/lib/widgets/elements/Frame/Layout/Column/demo.dart index e94c8a78..e1c5a28e 100644 --- a/lib/widgets/elements/Frame/Layout/Column/demo.dart +++ b/lib/widgets/elements/Frame/Layout/Column/demo.dart @@ -1,45 +1,41 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:Colum describe + import 'package:flutter/widgets.dart'; -/* - * Author: xiaojia.dxj - * Date: 2018/11/22 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/11/22 - * LastUpdateBy: xj.deng - * - * Describle:Colum describe - */ 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/Column/index.dart b/lib/widgets/elements/Frame/Layout/Column/index.dart index bd190513..34d73786 100644 --- a/lib/widgets/elements/Frame/Layout/Column/index.dart +++ b/lib/widgets/elements/Frame/Layout/Column/index.dart @@ -1,5 +1,13 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:Colum describe + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String Text0 = """### **简介** diff --git a/lib/widgets/elements/Frame/Layout/Container/demo.dart b/lib/widgets/elements/Frame/Layout/Container/demo.dart index 110359ef..c09965c8 100644 --- a/lib/widgets/elements/Frame/Layout/Container/demo.dart +++ b/lib/widgets/elements/Frame/Layout/Container/demo.dart @@ -1,15 +1,13 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:Colum describe + import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; -/* - * Author: xiaojia.dxj - * Date: 2018/11/22 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/11/22 - * LastUpdateBy: xj.deng - * - * Describle:Colum describe - */ class ContainerDefault extends StatelessWidget { @override Widget build(BuildContext context) { diff --git a/lib/widgets/elements/Frame/Layout/Container/index.dart b/lib/widgets/elements/Frame/Layout/Container/index.dart index 6fbf8e97..86848cb7 100644 --- a/lib/widgets/elements/Frame/Layout/Container/index.dart +++ b/lib/widgets/elements/Frame/Layout/Container/index.dart @@ -1,5 +1,13 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:Colum describe + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String Text0 = """### **简介** diff --git a/lib/widgets/elements/Frame/Layout/Row/demo.dart b/lib/widgets/elements/Frame/Layout/Row/demo.dart index 8beb078c..2c372d83 100644 --- a/lib/widgets/elements/Frame/Layout/Row/demo.dart +++ b/lib/widgets/elements/Frame/Layout/Row/demo.dart @@ -1,36 +1,31 @@ -import 'package:flutter/widgets.dart'; + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:Row -/* - * Author: xiaojia.dxj - * Date: 2018/11/22 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/11/22 - * LastUpdateBy: xj.deng - * - * Describle:Row - */ +import 'package:flutter/widgets.dart'; + 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 +33,7 @@ class RowMainAxisAlignment extends StatelessWidget { @override Widget build(BuildContext context) { - return new Row( + return Row( mainAxisAlignment: status, children: [ Container( @@ -66,29 +61,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 a4e0d041..fa8e7b34 100644 --- a/lib/widgets/elements/Frame/Layout/Row/index.dart +++ b/lib/widgets/elements/Frame/Layout/Row/index.dart @@ -1,5 +1,13 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:Row + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String Text0 = """### **简介** @@ -49,7 +57,7 @@ class _DemoState extends State { } Column _rowCreate() { - return new Column( + return Column( children: [ RowLayoutCreate(), Row( diff --git a/lib/widgets/elements/Frame/Layout/index.dart b/lib/widgets/elements/Frame/Layout/index.dart index 67105576..b936fa00 100644 --- a/lib/widgets/elements/Frame/Layout/index.dart +++ b/lib/widgets/elements/Frame/Layout/index.dart @@ -1,6 +1,6 @@ -import '../../../../model/widget.dart'; import "package:flutter/material.dart"; +import '../../../../model/widget.dart'; import 'Row/index.dart' as Row; import 'Column/index.dart' as Column; import 'Container/index.dart' as Container; diff --git a/lib/widgets/elements/Frame/Spacing/AnimatedPadding/animatedPadding_demo.dart b/lib/widgets/elements/Frame/Spacing/AnimatedPadding/animatedPadding_demo.dart index c340d3c6..93bea0eb 100644 --- a/lib/widgets/elements/Frame/Spacing/AnimatedPadding/animatedPadding_demo.dart +++ b/lib/widgets/elements/Frame/Spacing/AnimatedPadding/animatedPadding_demo.dart @@ -1,9 +1,7 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-28 20:42:40 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-28 20:42:40 - */ + /// @Author: 一凨 + /// @Date: 2018-11-28 20:42:40 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-11-28 20:42:40 import 'package:flutter/material.dart'; diff --git a/lib/widgets/elements/Frame/Spacing/AnimatedPadding/index.dart b/lib/widgets/elements/Frame/Spacing/AnimatedPadding/index.dart index bc1ea654..623bca26 100644 --- a/lib/widgets/elements/Frame/Spacing/AnimatedPadding/index.dart +++ b/lib/widgets/elements/Frame/Spacing/AnimatedPadding/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-28 20:44:13 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-14 17:02:20 - */ + /// @Author: 一凨 + /// @Date: 2018-11-28 20:44:13 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2019-01-14 17:02:20 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './animatedPadding_demo.dart'; const contentDesc0 = ''' diff --git a/lib/widgets/elements/Frame/Spacing/Padding/index.dart b/lib/widgets/elements/Frame/Spacing/Padding/index.dart index 1a345608..82233cd7 100644 --- a/lib/widgets/elements/Frame/Spacing/Padding/index.dart +++ b/lib/widgets/elements/Frame/Spacing/Padding/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-28 20:25:24 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-14 17:01:55 - */ + /// Author: 一凨 + /// Date: 2018-11-28 20:25:24 + /// Last Modified by: 一凨 + /// Last Modified time: 2019-01-14 17:01:55 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './padding_demo.dart'; const contentDesc0=''' diff --git a/lib/widgets/elements/Frame/Spacing/Padding/padding_demo.dart b/lib/widgets/elements/Frame/Spacing/Padding/padding_demo.dart index d390c773..6721d366 100644 --- a/lib/widgets/elements/Frame/Spacing/Padding/padding_demo.dart +++ b/lib/widgets/elements/Frame/Spacing/Padding/padding_demo.dart @@ -1,10 +1,9 @@ + /// @Author: 一凨 + /// @Date: 2018-11-28 20:20:04 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2019-01-14 16:30:16 + import 'package:flutter/material.dart'; -/* - * @Author: 一凨 - * @Date: 2018-11-28 20:20:04 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-14 16:30:16 - */ class PaddingDemo extends StatelessWidget { @override diff --git a/lib/widgets/elements/Frame/Spacing/SliverPadding/index.dart b/lib/widgets/elements/Frame/Spacing/SliverPadding/index.dart index b919a156..e836f35c 100644 --- a/lib/widgets/elements/Frame/Spacing/SliverPadding/index.dart +++ b/lib/widgets/elements/Frame/Spacing/SliverPadding/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-28 20:26:16 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-14 17:06:36 - */ + /// @Author: 一凨 + /// @Date: 2018-11-28 20:26:16 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2019-01-14 17:06:36 + import 'package:flutter/material.dart'; -import 'package:flutter_go/common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './sliverpadding_demo.dart'; const contentDesc0 = ''' diff --git a/lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart b/lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart index f609a239..db0fe909 100644 --- a/lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart +++ b/lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-28 20:36:17 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-28 20:36:17 - */ + /// @Author: 一凨 + /// @Date: 2018-11-28 20:36:17 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-11-28 20:36:17 + import 'package:flutter/material.dart'; -import './product_list.dart'; + +import 'package:flutter_go/widgets/components/Scroll/CustomScrollView/product_list.dart'; class SliverPaddingDemo extends StatelessWidget { @@ -48,12 +48,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/Spacing/index.dart b/lib/widgets/elements/Frame/Spacing/index.dart index e883a01c..c3d97c1d 100644 --- a/lib/widgets/elements/Frame/Spacing/index.dart +++ b/lib/widgets/elements/Frame/Spacing/index.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import '../../../../model/widget.dart'; +import '../../../../model/widget.dart'; import './Padding/index.dart' as Padding; import './SliverPadding/index.dart' as SliverPadding; import './AnimatedPadding/index.dart' as AnimatedPadding; diff --git a/lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart b/lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart index bcf289cc..bfc83c8c 100644 --- a/lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart +++ b/lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart @@ -1,18 +1,16 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:indexedStack + import 'package:flutter/material.dart'; -/* - * Author: xiaojia.dxj - * Date: 2018/11/22 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/11/22 - * LastUpdateBy: xj.deng - * - * Describle:indexedStack - */ class StackDefault extends StatelessWidget { final int currIndex; - const StackDefault( this.currIndex) : super(); + const StackDefault(this.currIndex) : super(); @override Widget build(BuildContext context) { @@ -23,14 +21,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 +52,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 bdafe5e3..da85006c 100644 --- a/lib/widgets/elements/Frame/Stack/IndexedStack/index.dart +++ b/lib/widgets/elements/Frame/Stack/IndexedStack/index.dart @@ -1,5 +1,12 @@ + /// Author: xiaojia.dxj + /// Date: 2019-01-08 15:57:00 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 16:00:14 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String _stackText0 = """### **简介** @@ -38,8 +45,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 +56,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 +77,7 @@ class _DemoState extends State { SizedBox( height: 10.0, ), - new Row( + Row( mainAxisAlignment: MainAxisAlignment.center, children: [ StackIndex(0), @@ -91,7 +97,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..b1a72425 100644 --- a/lib/widgets/elements/Frame/Stack/Stack/demo.dart +++ b/lib/widgets/elements/Frame/Stack/Stack/demo.dart @@ -1,14 +1,12 @@ + /// Author: xiaojia.dxj + /// Date: 2018/11/22 + /// Email: xiaojia.dxj@alibaba-inc.com + /// LastUpdateTime: 2018/11/22 + /// LastUpdateBy: xj.deng + /// Describle:stack描述 + import 'package:flutter/material.dart'; -/* - * Author: xiaojia.dxj - * Date: 2018/11/22 - * Email: xiaojia.dxj@alibaba-inc.com - * LastUpdateTime: 2018/11/22 - * LastUpdateBy: xj.deng - * - * Describle:Align描述 - */ class StackDefault extends StatelessWidget { const StackDefault() : super(); @@ -16,19 +14,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 +47,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 +78,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 +118,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 6cdf56b9..6787abd6 100644 --- a/lib/widgets/elements/Frame/Stack/Stack/index.dart +++ b/lib/widgets/elements/Frame/Stack/Stack/index.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String _stackText0 = """### **简介** @@ -35,30 +36,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 +65,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/Frame/Stack/index.dart b/lib/widgets/elements/Frame/Stack/index.dart index e24bf8b8..7ee38c94 100644 --- a/lib/widgets/elements/Frame/Stack/index.dart +++ b/lib/widgets/elements/Frame/Stack/index.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_go/model/widget.dart'; +import 'package:flutter_go/model/widget.dart'; import './Stack/index.dart' as Stack; import './IndexedStack/index.dart' as IndexedStack; diff --git a/lib/widgets/elements/Frame/Table/Table/index.dart b/lib/widgets/elements/Frame/Table/Table/index.dart index c3137d7d..7706c69d 100644 --- a/lib/widgets/elements/Frame/Table/Table/index.dart +++ b/lib/widgets/elements/Frame/Table/Table/index.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './table_demo.dart'; const contentDesc0 = ''' diff --git a/lib/widgets/elements/Frame/Table/Table/table_demo.dart b/lib/widgets/elements/Frame/Table/Table/table_demo.dart index 8d08405f..9d81d71e 100644 --- a/lib/widgets/elements/Frame/Table/Table/table_demo.dart +++ b/lib/widgets/elements/Frame/Table/Table/table_demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-28 20:52:35 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-28 20:59:50 - */ + /// @Author: 一凨 + /// @Date: 2018-11-28 20:52:35 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-11-28 20:59:50 + import 'package:flutter/material.dart'; class TableDemo extends StatelessWidget { diff --git a/lib/widgets/elements/Frame/Table/index.dart b/lib/widgets/elements/Frame/Table/index.dart index 007861f9..4d35e127 100644 --- a/lib/widgets/elements/Frame/Table/index.dart +++ b/lib/widgets/elements/Frame/Table/index.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import '../../../../model/widget.dart'; +import '../../../../model/widget.dart'; import './Table/index.dart' as Table; List widgetPoints = [ diff --git a/lib/widgets/elements/Frame/index.dart b/lib/widgets/elements/Frame/index.dart index ba235725..25348967 100644 --- a/lib/widgets/elements/Frame/index.dart +++ b/lib/widgets/elements/Frame/index.dart @@ -1,7 +1,5 @@ -import 'spacing/index.dart' as Spacing; +import 'Spacing/index.dart' as Spacing; import 'Expanded/index.dart' as Expanded; - -// import 'Axis/index.dart' as Axis; import 'Table/index.dart' as Table; import 'Align/index.dart' as Align; import 'Layout/index.dart' as Layout; 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..eee36df0 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/Canvas/demo.dart @@ -0,0 +1,322 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: Canvas 的示例 + +import 'dart:ui'; +import 'dart:ui' as ui; +import 'dart:typed_data'; +import 'dart:math'; +import 'dart:async'; + +import 'package:flutter/material.dart'; +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) { + if (mounted) { + 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; + case 'drawStar': + var rect = Offset.zero & size; + /// 背景颜色 + canvas.drawRect(rect, Paint()..color = Color(0xFF000000)); + /// 绘制星形 + canvas.drawPath(MathTools().regularStarPath(5, 30, Offset(50.0, 50.0)), painter..color = Colors.red); + /// 绘制多边形 + canvas.save();// save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作 + canvas.translate(0, 100); + canvas.scale(1.2,1.2); + canvas.drawPath(MathTools().nStarPath(4, 30, 30, Offset(40.0, 50.0)), painter); + canvas.restore();// 用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响 + /// 绘制旋转星形 + canvas.save();// save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作 + canvas.translate(150, 50); + canvas.rotate(50 * pi / 180); + canvas.drawPath(MathTools().regularStarPath(5, 30, Offset(0,0)), painter..color = Colors.green); + canvas.restore();// 用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响 + /// 绘制变形星形 + canvas.save();// save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作 + canvas.translate(80, 100); + canvas.skew(0.5,0.2); + canvas.drawPath(MathTools().regularStarPath(6, 30,Offset(50,50)), painter..color = Colors.lime); + canvas.restore();// 用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响 + + /// 绘制matrix星形 + canvas.translate(250, 0); + Float64List matrix = Float64List.fromList(const [ + // careful, this is in _column_-major order + 0.7, -0.7, 0.0, 0.0, + 0.7, 0.7, 0.0, 0.0, + 0.7, 0.0, 1.0, 0.0, + -70.697, 98.057, 0.0, 1.0, + ]); + canvas.transform(matrix); + canvas.drawPath(MathTools().regularStarPath(5, 30,Offset(50,50)), painter..color = Colors.blue); + + break; + } + //canvas.drawColor(Colors.red, BlendMode.colorDodge); + } + + ///控制自定义View是否需要重绘的,返回false代表这个View在构建完成后不需要重绘。 + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} + +class MathTools { + static MathTools _mathTools; + static bool _flag; + + factory MathTools(){ + if (_flag == null) { + _flag = true; + } + if (_flag) { + _mathTools = new MathTools._internal(); + _flag = false; + } + return _mathTools; + } + MathTools._internal(); + /// + ///画正n角星的路径: + /// + ///@param num 角数 + ///@param R 外接圆半径 + ///@return 画正n角星的路径 + /// + Path regularStarPath(int num, double R, Offset xy) { + double degA, degB; + if (num % 2 == 1) { + //奇数和偶数角区别对待 + degA = 360 / num / 2 / 2; + degB = 180 - degA - 360 / num / 2; + } else { + degA = 360 / num / 2; + degB = 180 - degA - 360 / num / 2; + } + double r = R * sin(_rad(degA)) / sin(_rad(degB)); + return nStarPath(num, R, r, xy); + } + + /// + ///画正n边形的路径 + /// + ///@param num 边数 + ///@param R 外接圆半径 + ///@return 画正n边形的路径 + /// + Path regularPolygonPath(int num, double R, Offset xy) { + double r = R * cos(_rad(360 / num / 2)); //!!一点解决 + return nStarPath(num, R, r, xy); + } + + /// + ///n角星路径 + /// + ///@param num 几角星 + ///@param R 外接圆半径 + ///@param r 内接圆半径 + ///@return n角星路径 + /// + Path nStarPath(int num, double R, double r, Offset xy) { + Path path = new Path(); + double perDeg = 360 / num; //尖角的度数 + double degA = perDeg / 2 / 2; + double degB = 360 / (num - 1) / 2 - degA / 2 + degA; + + path.moveTo(cos(_rad(degA)) * R + xy.dx, (-sin(_rad(degA)) * R + xy.dy)); + for (int i = 0; i < num; i++) { + path.lineTo( + cos(_rad(degA + perDeg * i)) * R + xy.dx, -sin(_rad(degA + perDeg * i)) * R + xy.dy); + path.lineTo( + cos(_rad(degB + perDeg * i)) * r + xy.dx, -sin(_rad(degB + perDeg * i)) * r + xy.dy); + } + path.close(); + return path; + } + double _rad(double deg) { + return deg * pi / 180; + } +} 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..3e6cda7e --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/Canvas/index.dart @@ -0,0 +1,96 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBoxs; + +const Text = ''' +### **简介** +> 用于操作图形的界面; +- canvas 对象用于创建图片对象,这些对象本身可以与 SceneBuilder 一起用于构建场景; +'''; +const Text1 = ''' +### **基本用法** +- 以下是绘制点,线,面的基本用法 +'''; + +const Text2 = ''' +> 绘制点 +- 绘制点有三种模式, points(点),lines(线,隔点连接),polygon(线,相邻连接) +'''; + +const Text3 = ''' +> 绘制直线 +'''; + +const Text4 = ''' +> 绘制圆 +'''; + +const Text5 = ''' +> 绘制椭圆 +- 使用左上和右下角坐标来确定矩形的大小和位置,椭圆是在这个矩形之中内切的形状 +'''; + +const Text6 = ''' +> 绘制圆弧 +- Rect 来确认圆弧的位置,还需要开始的弧度、结束的弧度、是否使用中心点绘制、以及 paint 弧度 +'''; + +const Text7 = ''' +> 绘制矩形,圆角矩形 +- 用 Rect构建矩形 +- 根据上面的矩形,构建一个圆角矩形 +'''; + +const Text8 = ''' +> 绘制两个相套矩形 +'''; + +const Text9 = ''' +> 绘制图片到canvas +'''; + +const Text10 = ''' +> 绘制一个星形 +- 它可以使用“平移”、“缩放”、“旋转”、“倾斜”和“变换”方法进行修改; +- 可以使用 clipRect、clipCorrect 和 clipPath 方法进行修改; +- 可以使用由 save、savelayer和 restore 方法管理的堆栈来保存和还原当前的转换和剪辑。 +'''; + +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: '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'), + Text10, + demoBoxs.CustomViewPage(type:'drawStar'), + ], + 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..432e4f16 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/demo.dart @@ -0,0 +1,105 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: 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(() { + if(mounted){ + 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..346a4fdd --- /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: 'CircleProgressBarPainter', + 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..3c02dd73 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/PainterPath/demo.dart @@ -0,0 +1,181 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: 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..ab64fadb --- /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/PainterPath'; + + _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..af67fae6 --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/PainterSketch/demo.dart @@ -0,0 +1,219 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: 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); + if (mounted) { + 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); + if (mounted) { + setState(() { + nowPoints.add(p); + }); + } + } + + void changeColor (Color c){ + if (nowPoints.length != 0) { + LinePoints l = LinePoints(new List.from(nowPoints), nowColor); + lines.add(l); + } + if (mounted) { + 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(){ + if (mounted) { + 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..1288eb9f --- /dev/null +++ b/lib/widgets/elements/Media/Canvas/PainterSketch/index.dart @@ -0,0 +1,38 @@ +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: 'PainterSketch', + 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/Icon/Icon/demo.dart b/lib/widgets/elements/Media/Icon/Icon/demo.dart index 6b5d2fc4..3fca415b 100644 --- a/lib/widgets/elements/Media/Icon/Icon/demo.dart +++ b/lib/widgets/elements/Media/Icon/Icon/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-15 15:10:34 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 11:09:17 - */ + /// Author: xiaojia.dxj + /// Date: 2018-12-15 15:10:34 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2018-12-17 11:09:17 import 'package:flutter/material.dart'; class IconDemo extends StatelessWidget { @@ -14,7 +13,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/Icon/index.dart b/lib/widgets/elements/Media/Icon/Icon/index.dart index 83be570d..98532f8b 100644 --- a/lib/widgets/elements/Media/Icon/Icon/index.dart +++ b/lib/widgets/elements/Media/Icon/Icon/index.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const Text = ''' diff --git a/lib/widgets/elements/Media/Icon/IconData/demo.dart b/lib/widgets/elements/Media/Icon/IconData/demo.dart index 4dae9660..a9706e45 100644 --- a/lib/widgets/elements/Media/Icon/IconData/demo.dart +++ b/lib/widgets/elements/Media/Icon/IconData/demo.dart @@ -1,22 +1,21 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-15 10:15:34 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 11:38:50 - */ + /// Author: xiaojia.dxj + /// Date: 2018-12-15 10:15:34 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2018-12-17 11:38:50 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/IconData/index.dart b/lib/widgets/elements/Media/Icon/IconData/index.dart index 7c8479be..9017a35f 100644 --- a/lib/widgets/elements/Media/Icon/IconData/index.dart +++ b/lib/widgets/elements/Media/Icon/IconData/index.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'demo.dart'; -import '../../../../../common/widget_demo.dart'; const Text = ''' ### **简介** diff --git a/lib/widgets/elements/Media/Icon/IconTheme/demo.dart b/lib/widgets/elements/Media/Icon/IconTheme/demo.dart index 53fa28a0..c27da87f 100644 --- a/lib/widgets/elements/Media/Icon/IconTheme/demo.dart +++ b/lib/widgets/elements/Media/Icon/IconTheme/demo.dart @@ -1,13 +1,12 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-15 16:07:59 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-15 16:49:17 - */ + /// Author: xiaojia.dxj + /// Date: 2018-12-15 16:07:59 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2018-12-15 16:49:17 import 'package:flutter/material.dart'; class IconThemeDemo extends StatelessWidget { - final Color curColor ; + final Color curColor; IconThemeDemo({Key key, this.curColor}) : super(); @@ -15,17 +14,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 +36,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/IconTheme/index.dart b/lib/widgets/elements/Media/Icon/IconTheme/index.dart index 19eb194a..5747d8b7 100644 --- a/lib/widgets/elements/Media/Icon/IconTheme/index.dart +++ b/lib/widgets/elements/Media/Icon/IconTheme/index.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const Text = ''' diff --git a/lib/widgets/elements/Media/Icon/IconThemeData/demo.dart b/lib/widgets/elements/Media/Icon/IconThemeData/demo.dart index 4fb49517..67d852d6 100644 --- a/lib/widgets/elements/Media/Icon/IconThemeData/demo.dart +++ b/lib/widgets/elements/Media/Icon/IconThemeData/demo.dart @@ -1,14 +1,13 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-17 09:46:31 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 15:53:42 - */ + /// Author: xiaojia.dxj + /// Date: 2018-12-17 09:46:31 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2018-12-17 15:53:42 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 +15,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 +37,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/IconThemeData/index.dart b/lib/widgets/elements/Media/Icon/IconThemeData/index.dart index 289b52d3..0a1c2900 100644 --- a/lib/widgets/elements/Media/Icon/IconThemeData/index.dart +++ b/lib/widgets/elements/Media/Icon/IconThemeData/index.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const Text = ''' diff --git a/lib/widgets/elements/Media/Icon/ImageIcon/demo.dart b/lib/widgets/elements/Media/Icon/ImageIcon/demo.dart index 24ddeeb6..0345c3b6 100644 --- a/lib/widgets/elements/Media/Icon/ImageIcon/demo.dart +++ b/lib/widgets/elements/Media/Icon/ImageIcon/demo.dart @@ -1,17 +1,18 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-15 15:19:41 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-17 10:07:19 - */ + /// Author: xiaojia.dxj + /// Date: 2018-12-15 15:19:41 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2018-12-17 10:07:19 + + import 'package:flutter/material.dart'; 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/ImageIcon/index.dart b/lib/widgets/elements/Media/Icon/ImageIcon/index.dart index 1848e3cb..a5d2acd3 100644 --- a/lib/widgets/elements/Media/Icon/ImageIcon/index.dart +++ b/lib/widgets/elements/Media/Icon/ImageIcon/index.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const Text = ''' 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/AssetImage/index.dart b/lib/widgets/elements/Media/Image/AssetImage/index.dart index 6290d1a8..b33a0db6 100644 --- a/lib/widgets/elements/Media/Image/AssetImage/index.dart +++ b/lib/widgets/elements/Media/Image/AssetImage/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-16 15:09:12 - */ + /// @Author: 一凨 + /// @Date: 2018-11-16 15:09:12 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-11-16 15:09:12 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './assetImage_demo.dart'; const contentText0 = ''' diff --git a/lib/widgets/elements/Media/Image/DecorationImage/index.dart b/lib/widgets/elements/Media/Image/DecorationImage/index.dart index 072d36e6..d2f638e5 100644 --- a/lib/widgets/elements/Media/Image/DecorationImage/index.dart +++ b/lib/widgets/elements/Media/Image/DecorationImage/index.dart @@ -1,13 +1,12 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-16 15:12:39 - */ -import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; -import './decorationImage_demo.dart'; + /// @Author: 一凨 + /// @Date: 2018-11-16 15:09:12 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-11-16 15:12:39 +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import './decorationImage_demo.dart'; const contentText0 = ''' ### **简介** @@ -38,7 +37,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/DecorationImagePainter/index.dart b/lib/widgets/elements/Media/Image/DecorationImagePainter/index.dart index 9aabe6fe..4550381a 100644 --- a/lib/widgets/elements/Media/Image/DecorationImagePainter/index.dart +++ b/lib/widgets/elements/Media/Image/DecorationImagePainter/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-16 15:09:12 - */ + /// @Author: 一凨 + /// @Date: 2018-11-16 15:09:12 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-11-16 15:09:12 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; const contentText0 = ''' ### **简介** diff --git a/lib/widgets/elements/Media/Image/ExactAssetImage/index.dart b/lib/widgets/elements/Media/Image/ExactAssetImage/index.dart index 350e48d2..9b7a5c36 100644 --- a/lib/widgets/elements/Media/Image/ExactAssetImage/index.dart +++ b/lib/widgets/elements/Media/Image/ExactAssetImage/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 13:29:34 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 14:12:21 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 13:29:34 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 14:12:21 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './exact_asset_image_demo.dart'; const contentText0 = ''' 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..e0eccc6e 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 @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 16:08:41 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 16:22:50 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 16:08:41 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 16:22:50 + import 'package:flutter/material.dart'; class FadeInImageDemo extends StatelessWidget { @@ -11,8 +10,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 +23,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/FadeInImage/index.dart b/lib/widgets/elements/Media/Image/FadeInImage/index.dart index a84461a9..ffcf1d16 100644 --- a/lib/widgets/elements/Media/Image/FadeInImage/index.dart +++ b/lib/widgets/elements/Media/Image/FadeInImage/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 14:26:00 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 16:10:55 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 14:26:00 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 16:10:55 import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './fade_in_image_demo.dart'; 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..f0638e39 100644 --- a/lib/widgets/elements/Media/Image/FileImage/file_image_demo.dart +++ b/lib/widgets/elements/Media/Image/FileImage/file_image_demo.dart @@ -1,19 +1,17 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 16:20:17 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 17:18:39 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 16:20:17 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 17:18:39 import 'dart:async'; +import 'dart:io'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; -import 'dart:io'; class FileImageDemo extends StatefulWidget { @override - _FileImageDemoState createState() => new _FileImageDemoState(); + _FileImageDemoState createState() => _FileImageDemoState(); } class _FileImageDemoState extends State { @@ -31,10 +29,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/FileImage/index.dart b/lib/widgets/elements/Media/Image/FileImage/index.dart index 22e52f19..ff20b410 100644 --- a/lib/widgets/elements/Media/Image/FileImage/index.dart +++ b/lib/widgets/elements/Media/Image/FileImage/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 16:20:33 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 19:24:33 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 16:20:33 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 19:24:33 import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './file_image_demo.dart'; const contentText0 = ''' diff --git a/lib/widgets/elements/Media/Image/Image/demo.dart b/lib/widgets/elements/Media/Image/Image/demo.dart index 1d9441fd..64a053b7 100644 --- a/lib/widgets/elements/Media/Image/Image/demo.dart +++ b/lib/widgets/elements/Media/Image/Image/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2019-01-07 15:33:49 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-07 15:45:29 - */ + /// @Author: 一凨 + /// @Date: 2019-01-07 15:33:49 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2019-01-07 15:45:29 + import 'package:flutter/material.dart'; class ImageDemo extends StatelessWidget { diff --git a/lib/widgets/elements/Media/Image/Image/index.dart b/lib/widgets/elements/Media/Image/Image/index.dart index 87adcd10..c0f13f70 100644 --- a/lib/widgets/elements/Media/Image/Image/index.dart +++ b/lib/widgets/elements/Media/Image/Image/index.dart @@ -1,12 +1,12 @@ -/* - * @Author: 一凨 - * @Date: 2019-01-07 15:33:42 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-07 15:42:54 - */ + /// @Author: 一凨 + /// @Date: 2019-01-07 15:33:42 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2019-01-07 15:42:54 + import 'package:flutter/material.dart'; + import './demo.dart'; -import '../../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; const String content0 = ''' ### **简介** diff --git a/lib/widgets/elements/Media/Image/MemoryImage/index.dart b/lib/widgets/elements/Media/Image/MemoryImage/index.dart index fb7fb42d..b89aefbd 100644 --- a/lib/widgets/elements/Media/Image/MemoryImage/index.dart +++ b/lib/widgets/elements/Media/Image/MemoryImage/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 20:48:28 - */ + /// @Author: 一凨 + /// @Date: 2018-11-16 15:09:12 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 20:48:28 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './memory_image_demo.dart'; const String _contentText0 = ''' @@ -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/MemoryImage/memory_image_demo.dart b/lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart index a7ad8132..6abe4acc 100644 --- a/lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart +++ b/lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart @@ -1,13 +1,13 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 17:49:19 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 20:46:37 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 17:49:19 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 20:46:37 + +import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show rootBundle; -import 'dart:typed_data'; + class MemoryImageDemo extends StatefulWidget { _MemoryImageDemoState createState() => _MemoryImageDemoState(); @@ -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/elements/Media/Image/NetworkImage/index.dart b/lib/widgets/elements/Media/Image/NetworkImage/index.dart index e03c55d7..b3e4e72e 100644 --- a/lib/widgets/elements/Media/Image/NetworkImage/index.dart +++ b/lib/widgets/elements/Media/Image/NetworkImage/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 17:32:57 - */ + /// @Author: 一凨 + /// @Date: 2018-11-16 15:09:12 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 17:32:57 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './network_image_demo.dart'; const contentText0 = ''' @@ -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/elements/Media/Image/NetworkImage/network_image_demo.dart b/lib/widgets/elements/Media/Image/NetworkImage/network_image_demo.dart index 1b926fc3..42f001c7 100644 --- a/lib/widgets/elements/Media/Image/NetworkImage/network_image_demo.dart +++ b/lib/widgets/elements/Media/Image/NetworkImage/network_image_demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 17:20:37 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 17:35:36 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 17:20:37 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 17:35:36 + import 'package:flutter/material.dart'; class NetworkImageDemo extends StatelessWidget { diff --git a/lib/widgets/elements/Media/Image/RawImage/index.dart b/lib/widgets/elements/Media/Image/RawImage/index.dart index 2fb7b03f..a96e002a 100644 --- a/lib/widgets/elements/Media/Image/RawImage/index.dart +++ b/lib/widgets/elements/Media/Image/RawImage/index.dart @@ -1,12 +1,12 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 20:11:44 - */ + /// @Author: 一凨 + /// @Date: 2018-11-16 15:09:12 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 20:11:44 + import 'package:flutter/material.dart'; + import './raw_image_demo.dart'; -import '../../../../../common/widget_demo.dart'; +import 'package:flutter_go/components/widget_demo.dart'; const contentText0 = ''' ### **简介** diff --git a/lib/widgets/elements/Media/Image/RawImage/raw_image_demo.dart b/lib/widgets/elements/Media/Image/RawImage/raw_image_demo.dart index bc943796..3aa1caba 100644 --- a/lib/widgets/elements/Media/Image/RawImage/raw_image_demo.dart +++ b/lib/widgets/elements/Media/Image/RawImage/raw_image_demo.dart @@ -1,15 +1,14 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 17:47:25 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 20:09:32 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 17:47:25 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 20:09:32 + import 'dart:async'; +import 'dart:typed_data'; +import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show rootBundle; -import 'dart:typed_data'; -import 'dart:ui' as ui; class RawImageDemo extends StatefulWidget { _RawImageDemoState createState() => _RawImageDemoState(); diff --git a/lib/widgets/elements/Media/Image/index.dart b/lib/widgets/elements/Media/Image/index.dart index 2aa1a073..3ff15ba3 100644 --- a/lib/widgets/elements/Media/Image/index.dart +++ b/lib/widgets/elements/Media/Image/index.dart @@ -1,12 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:19 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-07 15:37:07 - */ -import '../../../../model/widget.dart'; +/// @Author: 一凨 +/// @Date: 2018-11-16 15:09:19 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-07 15:37:07 + import "package:flutter/material.dart"; +import '../../../../model/widget.dart'; import './AssetImage/index.dart' as AssetImage; import './DecorationImage/index.dart' as DecorationImage; import './DecorationImagePainter/index.dart' as DecorationImagePainter; diff --git a/lib/widgets/elements/Media/Image/paintImage/index.dart b/lib/widgets/elements/Media/Image/paintImage/index.dart index 51faa110..38721433 100644 --- a/lib/widgets/elements/Media/Image/paintImage/index.dart +++ b/lib/widgets/elements/Media/Image/paintImage/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 20:19:01 - */ + /// @Author: 一凨 + /// @Date: 2018-11-16 15:09:12 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 20:19:01 + import 'package:flutter/material.dart'; -import '../../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; const String contentText0 = ''' ### **非Widget 待删除** diff --git a/lib/widgets/elements/Media/Image/paintImage/paint_image_demo.dart b/lib/widgets/elements/Media/Image/paintImage/paint_image_demo.dart index 1f655899..24347bcc 100644 --- a/lib/widgets/elements/Media/Image/paintImage/paint_image_demo.dart +++ b/lib/widgets/elements/Media/Image/paintImage/paint_image_demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 17:46:57 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 17:46:57 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 17:46:57 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 17:46:57 + import 'package:flutter/material.dart'; class PaintImageDemo extends StatelessWidget { diff --git a/lib/widgets/elements/Media/Image/precacheImage/index.dart b/lib/widgets/elements/Media/Image/precacheImage/index.dart index 5d6e832f..8e586ff9 100644 --- a/lib/widgets/elements/Media/Image/precacheImage/index.dart +++ b/lib/widgets/elements/Media/Image/precacheImage/index.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:12 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-16 15:09:12 - */ + /// @Author: 一凨 + /// @Date: 2018-11-16 15:09:12 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-11-16 15:09:12 + import 'package:flutter/material.dart'; class Demo extends StatefulWidget { diff --git a/lib/widgets/elements/Media/Image/precacheImage/precache_image_demo.dart b/lib/widgets/elements/Media/Image/precacheImage/precache_image_demo.dart index 943b184d..4464e624 100644 --- a/lib/widgets/elements/Media/Image/precacheImage/precache_image_demo.dart +++ b/lib/widgets/elements/Media/Image/precacheImage/precache_image_demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-08 17:47:57 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-08 17:48:20 - */ + /// @Author: 一凨 + /// @Date: 2018-12-08 17:47:57 + /// @Last Modified by: 一凨 + /// @Last Modified time: 2018-12-08 17:48:20 + import 'package:flutter/material.dart'; class PrecacheImageDemo extends StatelessWidget { diff --git a/lib/widgets/elements/Media/index.dart b/lib/widgets/elements/Media/index.dart index c11673ed..488d1f67 100644 --- a/lib/widgets/elements/Media/index.dart +++ b/lib/widgets/elements/Media/index.dart @@ -1,15 +1,16 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:27 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-16 15:09:27 - */ +/// @Author: 一凨 +/// @Date: 2018-11-16 15:09:27 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-11-16 15:09:27 + 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/lib/widgets/elements/index.dart b/lib/widgets/elements/index.dart index 06b2ad66..d3362d59 100644 --- a/lib/widgets/elements/index.dart +++ b/lib/widgets/elements/index.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-11-16 15:09:31 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-11-16 15:09:31 - */ +/// @Author: 一凨 +/// @Date: 2018-11-16 15:09:31 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-11-16 15:09:31 + import 'Form/index.dart' as Form; import 'Frame/index.dart' as Frame; import 'Media/index.dart' as Media; diff --git a/lib/widgets/themes/Cupertino/CupertinoApp/demo.dart b/lib/widgets/themes/Cupertino/CupertinoApp/demo.dart new file mode 100644 index 00000000..f503023b --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoApp/demo.dart @@ -0,0 +1,178 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoApp 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// CupertinoApp 的实例 +class CupertinoAppFullDefault extends StatefulWidget { + const CupertinoAppFullDefault() : super(); + + @override + State createState() => _CupertinoAppFullDefault(); +} + +// CupertinoApp 默认的实例,有状态 +class _CupertinoAppFullDefault extends State { + routerHandler(setting) { + //setting.isInitialRoute; bool类型 是否初始路由 + //setting.name; 要跳转的路由名key + return PageRouteBuilder( + pageBuilder: (BuildContext context, _, __) { + //这里为返回的Widget + return HomePage(); + }, + opaque: false, + //跳转动画 + transitionDuration: Duration(milliseconds: 200), + transitionsBuilder: + (___, Animation animation, ____, Widget child) { + return FadeTransition( + opacity: animation, + child: ScaleTransition( + scale: Tween(begin: 0.5, end: 1.0).animate(animation), + child: child, + ), + ); + }); + } + + @override + Widget build(BuildContext context) { + return SizedBox( + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.width, + //height: 500.0, + child: CupertinoApp( + 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); + }, + checkerboardOffscreenLayers: false, // 打开渲染到屏幕外位图的图层的checkerboarding + checkerboardRasterCacheImages: false, // 打开光栅缓存图像的检查板。 + debugShowCheckedModeBanner: + true, // 在debug模式下打开一个小“DEBUG”横幅,表示该应用程序处于检查模式 + color: Colors.red, // 该颜色为程序切换中应用图标背景的颜色,当应用图标背景为透明时 +// home: HomePage(),// 进入程序后显示的第一个页面,传入的是一个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对应的内容,同时存在 + 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'); + }, + localizationsDelegates: [], // 本地化委托,用于更改Flutter Widget默认的提示语,按钮text等,返回一个 继承自 LocalizationsDelegate 的对象 + navigatorKey: GlobalKey(), // 导航主键 GlobalKey + navigatorObservers: [ + // 路由观察器,当调用Navigator的相关方法时,会回调相关的操作 + MyObserver(), + ], + onGenerateRoute: (setting) { + // 当通过Navigation.of(context).pushNamed跳转路由时,在routes查找不到时,会调用该方法 + routerHandler(setting); + }, + onGenerateTitle: (context) { + // 跟上面的tiitle一样,但含有一个context参数用于做本地化 + return 'Flutter应用'; + }, + onUnknownRoute: (setting) { + // 效果跟onGenerateRoute一样调用顺序为onGenerateRoute ==> onUnknownRoute + //RouterHandler(setting); + }, + 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: [ + // 传入支持的语种数组 + const Locale('uok'), + const Locale('meg'), + ], + )); + } + + Widget homeBuild(BuildContext context) { + return CupertinoTabScaffold( + tabBar: CupertinoTabBar( + backgroundColor: CupertinoColors.white, + items: const [ + BottomNavigationBarItem( + icon: ImageIcon( + AssetImage('assets/images/btn_icon_dingyuehao_normal.png')), + title: Text('Tab 1'), + ), + BottomNavigationBarItem( + icon: ImageIcon( + AssetImage('assets/images/btn_icon_dingyuehao_normal.png')), + title: Text('Tab 2'), + ), + ]), + tabBuilder: (BuildContext context, int index) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + backgroundColor: CupertinoColors.destructiveRed, + middle: Text('这里是标题', style: TextStyle(color: Colors.white)), + ), + child: Center(child: Text('这里是内容', style: TextStyle(color: Colors.black))), + backgroundColor: CupertinoColors.inactiveGray, + ); + }); + } +} + +class MyObserver extends NavigatorObserver { + @override + void didPush(Route route, Route previousRoute) { + // 当调用Navigator.push时回调 + super.didPush(route, previousRoute); + //可通过route.settings获取路由相关内容 + //route.currentResult获取返回内容 + print('MyObserver 路由观察器:${route.settings.name}'); + } +} + +class HomePage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Center( + child: Text('HomePage', style: TextStyle(color: Colors.black))); + } +} + +class OnePage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Center(child: Text('OnePage', style: TextStyle(color: Colors.red))); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoApp/index.dart b/lib/widgets/themes/Cupertino/CupertinoApp/index.dart new file mode 100644 index 00000000..e1efb44d --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoApp/index.dart @@ -0,0 +1,53 @@ +/// @Author: 一凨 +/// @Date: 2018-12-27 16:25:22 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-07 15:52:45 + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBox; + +const String content0 = ''' +### **简介** +> Cupertino 苹果设计风格的应用,用于创建 iOS 风格应用的顶层组件( Cupertino 苹果电脑的全球总公司所在地,位于美国旧金山 ) +- 它包含了 iOS 应用程序,通常需要的许多 widget; +- 它的构建于基于 iOS 的 WidgetsApp 特定的默认值,如字体和物理滚动; +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoApp 的主要特性 +- top 级别的 Navigator 搜索的配置,需要遵循以下规则优先级 + - 首先,对于 根路由 "/", 使用 home 属性,前提是 home 属性不为空; + - 如果没设置home,则使用 routes 属性,它应用程序的顶级路由表; + - 如果 home 和 routes 都没有做有效配置,则调用onGenerateRoute(如果提供),并且返回非null值; + - 最后,如果所有其他方法都失败onUnknownRoute被调用; + - 如果 home,routes,onGenerateRoute和onUnknownRoute 都为null,并且builder不为null,则不会创建任何Navigator; + - 如果配置了顶级 Navigator 的 observer,则可以做 Hero 动画; +- 在 Android 上谨慎使用此 widget,因为它可能会产生 Android 用户不同的行为,例如: + - 通过反向滑动可以禁用页面; + - 滚动到底或者顶,会触发 ios 风格的弹性效果; + - 某些苹果字体系列在 Android上 不可用,可能导致未定义的字体提示。 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoApp'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoAppFullDefault() + ], + title: 'CupertinoApp', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoApp-class.html', + codeUrl: 'themes/Cupertino/CupertinoApp/demo.dart', + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoButton/demo.dart b/lib/widgets/themes/Cupertino/CupertinoButton/demo.dart new file mode 100644 index 00000000..806704df --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoButton/demo.dart @@ -0,0 +1,37 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoButton 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + + +// Checkbox 默认按钮的实例 +// index 当前checkbox 的索引值 +class CupertinoButtonFullDefault extends StatefulWidget { + const CupertinoButtonFullDefault() : super(); + + @override + State createState() => _CupertinoButtonFullDefault(); +} + + +// CupertinoButton 默认的实例,有状态 +class _CupertinoButtonFullDefault extends State { + + @override + Widget build(BuildContext context) { + return CupertinoButton( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + onPressed: () { + print('on Pressed!'); + }, + pressedOpacity:0.5,// 按下后的按钮不透明度 + color:CupertinoColors.inactiveGray, + child: new Text('CupertinoButton'), + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoButton/index.dart b/lib/widgets/themes/Cupertino/CupertinoButton/index.dart new file mode 100644 index 00000000..03b691f3 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoButton/index.dart @@ -0,0 +1,44 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 下午10:57 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoButton 的示例 + +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBox; + +const String content0 = ''' +### **简介** +> ios 风格的 button +- 与普通的 button 一样,需要设置 text 或者 icon, 不同的是带有 fades out 效果; +- 同时可以设置一个背景颜色; +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoButton 的一个是示例 +- 属性基本和 flatButton,raisedButton 类似 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoButton'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoButtonFullDefault() + ], + title: 'CupertinoButton', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoButton-class.html', + codeUrl: 'themes/Cupertino/CupertinoButton/demo.dart', + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoColors/demo.dart b/lib/widgets/themes/Cupertino/CupertinoColors/demo.dart new file mode 100644 index 00000000..926fbcc1 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoColors/demo.dart @@ -0,0 +1,45 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoColors 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// Checkbox 默认按钮的实例 +// index 当前checkbox 的索引值 +class CupertinoColorsFullDefault extends StatefulWidget { + const CupertinoColorsFullDefault() : super(); + + @override + State createState() => _CupertinoColorsFullDefault(); +} + +// CupertinoColors 默认的实例,有状态 +class _CupertinoColorsFullDefault extends State { + + Widget setColorsView(cupertinoColors,String colorName){ + return Container( + width: MediaQuery.of(context).size.width-100, + padding: const EdgeInsets.all(10.0), + child:Text(colorName,style:TextStyle(color:Colors.white)), + decoration:BoxDecoration(color: cupertinoColors) + ); + } + @override + Widget build(BuildContext context) { + return Column( + children: [ + setColorsView(CupertinoColors.activeBlue,'activeBlue'), + setColorsView(CupertinoColors.activeGreen,'activeGreen'), + setColorsView(CupertinoColors.black,'black'), + setColorsView(CupertinoColors.destructiveRed,'destructiveRed'), + setColorsView(CupertinoColors.inactiveGray,'inactiveGray'), + setColorsView(CupertinoColors.lightBackgroundGray,'lightBackgroundGray'), + setColorsView(CupertinoColors.white,'white') + ], + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoColors/index.dart b/lib/widgets/themes/Cupertino/CupertinoColors/index.dart new file mode 100644 index 00000000..4953ba79 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoColors/index.dart @@ -0,0 +1,42 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 下午10:57 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoColors 的示例 + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBox; + +const String content0 = ''' +### **简介** +> iOS平台常用的颜色 +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoColors 的一个是示例 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoColors'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoColorsFullDefault() + ], + title: 'CupertinoColors', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoColors-class.html', + codeUrl: 'themes/Cupertino/CupertinoColors/demo.dart', + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoIcons/demo.dart b/lib/widgets/themes/Cupertino/CupertinoIcons/demo.dart new file mode 100644 index 00000000..04433dd5 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoIcons/demo.dart @@ -0,0 +1,85 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoIcons 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +import 'package:flutter_go/resources/icon_names.dart' as icon_names; + +// CupertinoIcons 默认的实例 +class CupertinoIconsFullDefault extends StatefulWidget { + const CupertinoIconsFullDefault() : super(); + + @override + State createState() => _CupertinoIconsFullDefault(); +} + +// CupertinoIcons 默认的实例,有状态 +class _CupertinoIconsFullDefault extends State { + + final colorsList = []; + final List widgetList = []; + + Widget rowView(IconData itA,IconData itB){ + //print('itA=====>${itA.fontPackage}'); + return Row( + //mainAxisSize:MainAxisSize.max, + //crossAxisAlignment: CrossAxisAlignment.start, + //mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + flex:1, + child: CupertinoButton( + padding: EdgeInsets.only(left: 0), + onPressed: () { }, + child:FlatButton.icon( + label: Text('默认按钮', semanticsLabel: 'Add'), + icon:Icon(itA, + semanticLabel: 'Add', + ), + onPressed: () { }, + ))), + Expanded( + flex:1, + child: CupertinoButton( + padding: EdgeInsets.zero, + onPressed: () { }, + child:FlatButton.icon( + label: Text('默认按钮', semanticsLabel: 'Add'), + icon:Icon(itB, + semanticLabel: 'Add', + ), + onPressed: () { }, + ))), + ], + ); + } + + @override + void initState() { + super.initState(); + + final names = icon_names.CupertinoIIconNames.names; + for(var i=0;i Cupertino图标的标识符 +- 与Icon类一起使用以显示特定图标; +- 请确保cupertino_icons在项目的pubspec.yaml文件中添加依赖项。这可确保CupertinoIcons字体包含在您的应用程序中; +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoIcons 的一个示例 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoIcons'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoIconsFullDefault() + ], + title: 'CupertinoIcons', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoIcons-class.html', + codeUrl: 'themes/Cupertino/CupertinoIcons/demo.dart' + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoNavigationBar/demo.dart b/lib/widgets/themes/Cupertino/CupertinoNavigationBar/demo.dart new file mode 100644 index 00000000..7873228b --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoNavigationBar/demo.dart @@ -0,0 +1,131 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoNavigationBar 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// CupertinoNavigationBar 默认的实例 +class CupertinoNavigationBarFullDefault extends StatefulWidget { + const CupertinoNavigationBarFullDefault() : super(); + + @override + State createState() => _CupertinoNavigationBarFullDefault(); +} + +// CupertinoNavigationBar 默认的实例,有状态 +class _CupertinoNavigationBarFullDefault extends State { + + Widget build2(BuildContext context) { + return SizedBox( + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.width, + //height: 500.0, + child:CupertinoApp( + home: CupertinoTabScaffold( + tabBar: CupertinoTabBar( + items: const [ + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.share), + title: Text('Tab 1'), + ), + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.share), + title: Text('Tab 2'), + ), + ], + ), + tabBuilder: (BuildContext context, int index) { + // For 1-indexed readability. + ++index; + return CupertinoTabView( + builder: (BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 1 of tab $index'), + ), + child: Center( + child: CupertinoButton( + child: const Text('Next'), + onPressed: () { + Navigator.of(context).push( + CupertinoPageRoute( + builder: (BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 2 of tab $index'), + ), + child: Center( + child: CupertinoButton( + child: const Text('Back'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ), + ); + }, + ), + ); + }, + ), + ), + ); + }, + ); + }, + ), + ) + ); + } + + Widget build(BuildContext context) { + return SizedBox( + height: MediaQuery.of(context).size.height/1.5, + child: navigationBar(context) + ); + } + + Widget navigationBar(BuildContext context) { + return CupertinoPageScaffold( // 进入程序后显示的第一个页面,传入的是一个Widget,但实际上这个Widget需要包裹一个Scaffold + navigationBar: CupertinoNavigationBar( + leading: Icon(CupertinoIcons.back),// 放置在导航栏的开头。通常是正常页面的后退按钮或完整页面对话框的取消按钮 + middle: Text('Title'),// 放置在导航栏的中间。通常是标题或分段控件 + trailing: Icon(CupertinoIcons.share),// 放置在导航栏的末尾。通常在页面上执行其他操作,例如搜索或编辑功能 + actionsForegroundColor:CupertinoColors.white,// 用于 导航栏中前导和尾随小部件的文本和图标的默认颜色。 + backgroundColor:CupertinoColors.activeGreen,// 导航栏的背景颜色。如果它包含透明度,标签栏将自动对其背后的内容产生模糊效果 + border:Border( // 边框样式 + bottom: BorderSide(color: CupertinoColors.inactiveGray, width: 1.0), + ), + //heroTag :null, + previousPageTitle:'???',// 自动隐含前导按钮时手动指定上一个路线的标题 + transitionBetweenRoutes:true // 是否在导航栏之间转换 + ), + child: Center( + child: Text('这里是内容', style: TextStyle(color: Colors.black)) + ), // 应用程序默认路由,(Navigator.defaultRouteName,即/) + ); + } + + Widget tabBar(BuildContext context){ + return CupertinoTabBar( + items: const [ + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.home), + title: Text('Home'), + ), + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.conversation_bubble), + title: Text('Support'), + ), + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.profile_circled), + title: Text('Profile'), + ), + ] + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoNavigationBar/index.dart b/lib/widgets/themes/Cupertino/CupertinoNavigationBar/index.dart new file mode 100644 index 00000000..8dfa5198 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoNavigationBar/index.dart @@ -0,0 +1,54 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 下午10:57 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoNavigationBar 的示例 + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBox; + +const String content0 = ''' +### **简介** +> ios 风格的 导航栏 +- 构成 toolbar 的最基本 widget,常规页面的 title,在 toolbar 居中显示; +- 当居中显示时,它支持通过设置 leading 和 trailing 属性对应的 widget,来决定是在中间 widget 前面还是后面显示; +- leading widget 将自动的成为一个返回 chevron icon button(或全屏对话框的关闭按钮),如果没有提供,则弹出当前路由,并且automaticallyImplyLeading为true(默认为true); +- 如果没有提供,并且 automaticallyImplyIdle 为true,则中间的 widget 将自动成为当前 CupertinoPageRoute 中的 title。 +- 它应该被放在屏幕的顶部,并自动占据操作系统的状态栏。 +- 如果给定 backgroundColor 的不透明度不是1.0(默认情况下为1.0),它将对其后面的内容产生模糊效果。 +- 当路 transitionBetweenRoutes 为 true,如果被切换的路由还拥有一个 CupertinaVigationBar 或一个 CupertinoSiverNavigationBar,并且 transitionBetweenRoutes 设置为 true,则此导航栏将在路由顶部而不是在路由内部进行切换。 +- 如果 transitionBetweenRoutes 为 true,则任何 widget 的参数,都不能在其子树中包含 key,因为该 widget 将同时存在于树中的多个位置。 +- 默认情况下,每个页面路由中只应存在一个 CupertinaVigationBar 或 CupertinoSiverNavigationBar,以支持默认切换。 +- 使用 transitionBetweenRoutes 或 Herotag 可自定义每个路由的多个导航栏的切换行为。 +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoNavigationBar 的一个示例 +- 通常被 CupertinoPageScaffold 包裹 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoNavigationBar'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoNavigationBarFullDefault(), + SizedBox(height:50) + ], + title: 'CupertinoNavigationBar', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoNavigationBar-class.html', + codeUrl: 'themes/Cupertino/CupertinoNavigationBar/demo.dart', + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoPageRoute/demo.dart b/lib/widgets/themes/Cupertino/CupertinoPageRoute/demo.dart new file mode 100644 index 00000000..e09a6d56 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoPageRoute/demo.dart @@ -0,0 +1,90 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoPageRoute 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// CupertinoPageRoute 默认的实例 +class CupertinoPageRouteFullDefault extends StatefulWidget { + const CupertinoPageRouteFullDefault() : super(); + + @override + State createState() => _CupertinoPageRouteFullDefault(); +} + +// CupertinoPageRoute 默认的实例,有状态 +class _CupertinoPageRouteFullDefault extends State { + + Widget pageRoute(BuildContext context,int index){ + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 2 of tab $index'), + ), + child: Center( + child: CupertinoButton( + child: const Text('Back'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + return SizedBox( + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.width, + //height: 500.0, + child:CupertinoApp( + home: CupertinoTabScaffold( + tabBar: CupertinoTabBar( + items: const [ + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.share), + title: Text('无滑动的切换1'), + ), + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.share), + title: Text('无滑动的切换2'), + ), + ], + ), + tabBuilder: (BuildContext context, int index) { + // For 1-indexed readability. + ++index; + return CupertinoTabView( + builder: (BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 1 of tab $index'), + ), + child: Center( + child: CupertinoButton( + child: const Text('点击我,看滑动动画'), + onPressed: () { + Navigator.of(context).push( + CupertinoPageRoute( + maintainState:false, // 是否前一个路由将保留在内存中 + builder: (BuildContext context) { // 生成器 + return pageRoute(context,index); + } + ) + ); + }, + ), + ), + ); + }, + ); + }, + ), + ) + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoPageRoute/index.dart b/lib/widgets/themes/Cupertino/CupertinoPageRoute/index.dart new file mode 100644 index 00000000..ba91f779 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoPageRoute/index.dart @@ -0,0 +1,47 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 下午10:57 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoPageRoute 的示例 + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBox; + +const String content0 = ''' +### **简介** +> ios 风格全屏切换路由的滑动动画 +- 页面从右侧滑入,然后反向退出。当另一页进入覆盖它时,视差中的页面也会向左移动; +- 页面从底部滑入,然后反向退出,全屏 dialogs 没有视差效果; +- 默认情况下,当切换路由被其他路由替换时,前一个路由将保留在内存中。若要在不需要时释放所有资源,请将 maintainstate 设置为 false; +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoPageRoute 的一个示例 +- 通常被 CupertinoPageScaffold 包裹 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoPageRoute'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoPageRouteFullDefault(), + SizedBox(height:50) + ], + title: 'CupertinoPageRoute', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoPageRoute-class.html', + codeUrl: 'themes/Cupertino/CupertinoPageRoute/demo.dart', + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoPageScaffold/demo.dart b/lib/widgets/themes/Cupertino/CupertinoPageScaffold/demo.dart new file mode 100644 index 00000000..bc92622c --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoPageScaffold/demo.dart @@ -0,0 +1,43 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoPageScaffold 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// CupertinoPageScaffold 默认的实例 +class CupertinoPageScaffoldFullDefault extends StatefulWidget { + const CupertinoPageScaffoldFullDefault() : super(); + + @override + State createState() => _CupertinoPageScaffoldFullDefault(); +} + +// CupertinoPageScaffold 默认的实例,有状态 +class _CupertinoPageScaffoldFullDefault extends State { + @override + Widget build(BuildContext context) { + return SizedBox( + height: MediaQuery.of(context).size.height/1.5, + child: navigationBar(context) + ); + } + + Widget navigationBar(BuildContext context) { + return CupertinoPageScaffold( // 进入程序后显示的第一个页面,传入的是一个Widget,但实际上这个Widget需要包裹一个Scaffold + backgroundColor:CupertinoColors.inactiveGray,// 整个脚手架下面的 widget 的颜色 + navigationBar: CupertinoNavigationBar( + leading: Icon(CupertinoIcons.back),// 放置在导航栏的开头。通常是正常页面的后退按钮或完整页面对话框的取消按钮 + middle: Text('这里是标题'),// 放置在导航栏的中间。通常是标题或分段控件 + trailing: Icon(CupertinoIcons.share),// 放置在导航栏的末尾。通常在页面上执行其他操作,例如搜索或编辑功能 + ), + child: Center( + child: Text('这里是内容', style: TextStyle(color: Colors.black)) + ), // 应用程序默认路由,(Navigator.defaultRouteName,即/) + resizeToAvoidBottomInset:false // child 是否应该调整自己的大小以避免窗口的底部插入 + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoPageScaffold/index.dart b/lib/widgets/themes/Cupertino/CupertinoPageScaffold/index.dart new file mode 100644 index 00000000..98a41a64 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoPageScaffold/index.dart @@ -0,0 +1,44 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 下午10:57 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoPageScaffold 的示例 + +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBox; + +const String content0 = ''' +### **简介** +> 实现单个 iOS 应用程序页的页面布局 +- 一个 CupertinoPage 重要布局; +- 脚手架在顶部设置导航栏,在导航栏之间或之后设置内容; +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoPageScaffold 的一个示例 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoPageScaffold'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoPageScaffoldFullDefault(), + SizedBox(height:50) + ], + title: 'CupertinoPageScaffold', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoPageScaffold-class.html', + codeUrl: 'themes/Cupertino/CupertinoPageScaffold/demo.dart', + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoPicker/demo.dart b/lib/widgets/themes/Cupertino/CupertinoPicker/demo.dart new file mode 100644 index 00000000..26c6df4b --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoPicker/demo.dart @@ -0,0 +1,295 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoPicker 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:intl/intl.dart'; + + +const double _kPickerSheetHeight = 216.0; +const double _kPickerItemHeight = 32.0; + +const List coolColorNames = [ + 'Sarcoline', 'Coquelicot', 'Smaragdine', 'Mikado', 'Glaucous', 'Wenge', + 'Fulvous', 'Xanadu', 'Falu', 'Eburnean', 'Amaranth', 'Australien', + 'Banan', 'Falu', 'Gingerline', 'Incarnadine', 'Labrador', 'Nattier', + 'Pervenche', 'Sinoper', 'Verditer', 'Watchet', 'Zaffre', +]; + +class CupertinoPickerDemo extends StatefulWidget { + static const String routeName = '/cupertino/picker'; + + @override + _CupertinoPickerDemoState createState() => _CupertinoPickerDemoState(); +} + +class _CupertinoPickerDemoState extends State { + int _selectedColorIndex = 0; + + Duration timer = const Duration(); + + // Value that is shown in the date picker in date mode. + DateTime date = DateTime.now(); + + // Value that is shown in the date picker in time mode. + DateTime time = DateTime.now(); + + // Value that is shown in the date picker in dateAndTime mode. + DateTime dateTime = DateTime.now(); + + Widget _buildMenu(List children) { + return Container( + decoration: BoxDecoration( + color:CupertinoColors.inactiveGray, + border: const Border( + top: BorderSide(color: Color(0xFFBCBBC1), width: 0.0), + bottom: BorderSide(color: Color(0xFFBCBBC1), width: 0.0), + ), + ), + height: 44.0, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: SafeArea( + top: false, + bottom: false, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: children, + ), + ), + ), + ); + } + + Widget _buildBottomPicker(Widget picker) { + return Container( + height: _kPickerSheetHeight, + padding: const EdgeInsets.only(top: 6.0), + color: CupertinoColors.white, + child: DefaultTextStyle( + style: const TextStyle( + color: CupertinoColors.black, + fontSize: 22.0, + ), + child: GestureDetector( + // Blocks taps from propagating to the modal sheet and popping. + onTap: () {}, + child: SafeArea( + top: false, + child: picker, + ), + ), + ), + ); + } + + Widget _buildColorPicker(BuildContext context) { + final FixedExtentScrollController scrollController = + FixedExtentScrollController(initialItem: _selectedColorIndex); + + return GestureDetector( + onTap: () async { + await showCupertinoModalPopup( + context: context, + builder: (BuildContext context) { + return _buildBottomPicker( + CupertinoPicker( + magnification:1.0, // 整体放大率 + //offAxisFraction:10.0,// 球面效果的透视系数,消失点位置 + scrollController: scrollController,// 用于读取和控制当前项的FixedxtentScrollController + itemExtent: _kPickerItemHeight,// 所以子节点 统一高度 + backgroundColor: CupertinoColors.white,// 所有子节点下面的背景颜色 + useMagnifier:true,// 是否使用放大效果 + onSelectedItemChanged: (int index) { // 当正中间选项改变时的回调 + if (mounted) { + setState(() => _selectedColorIndex = index); + } + }, + children: List.generate(coolColorNames.length, (int index) { + return Center(child: + Text(coolColorNames[index]), + ); + }), + ), + ); + }, + ); + }, + child: _buildMenu( + [ + const Text('Favorite Color'), + Text( + coolColorNames[_selectedColorIndex], + style: const TextStyle( + color: CupertinoColors.inactiveGray + ), + ), + ], + ), + ); + } + + Widget _buildCountdownTimerPicker(BuildContext context) { + return GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) { + return _buildBottomPicker( + CupertinoTimerPicker( + initialTimerDuration: timer, + onTimerDurationChanged: (Duration newTimer) { + if (mounted) { + setState(() => timer = newTimer); + } + }, + ), + ); + }, + ); + }, + child: _buildMenu( + [ + const Text('Countdown Timer'), + Text( + '${timer.inHours}:' + '${(timer.inMinutes % 60).toString().padLeft(2,'0')}:' + '${(timer.inSeconds % 60).toString().padLeft(2,'0')}', + style: const TextStyle(color: CupertinoColors.inactiveGray), + ), + ], + ), + ); + } + + Widget _buildDatePicker(BuildContext context) { + return GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) { + return _buildBottomPicker( + CupertinoDatePicker( + mode: CupertinoDatePickerMode.date, + initialDateTime: date, + onDateTimeChanged: (DateTime newDateTime) { + if (mounted) { + setState(() => date = newDateTime); + } + }, + ), + ); + }, + ); + }, + child: _buildMenu( + [ + const Text('Date'), + Text( + DateFormat.yMMMMd().format(date), + style: const TextStyle(color: CupertinoColors.inactiveGray), + ), + ] + ), + ); + } + + Widget _buildTimePicker(BuildContext context) { + return GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) { + return _buildBottomPicker( + CupertinoDatePicker( + mode: CupertinoDatePickerMode.time, + initialDateTime: time, + onDateTimeChanged: (DateTime newDateTime) { + if (mounted) { + setState(() => time = newDateTime); + } + }, + ), + ); + }, + ); + }, + child: _buildMenu( + [ + const Text('Time'), + Text( + DateFormat.jm().format(time), + style: const TextStyle(color: CupertinoColors.inactiveGray), + ), + ], + ), + ); + } + + Widget _buildDateAndTimePicker(BuildContext context) { + return GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) { + return _buildBottomPicker( + CupertinoDatePicker( + mode: CupertinoDatePickerMode.dateAndTime, + initialDateTime: dateTime, + onDateTimeChanged: (DateTime newDateTime) { + if (mounted) { + setState(() => dateTime = newDateTime); + } + }, + ), + ); + }, + ); + }, + child: _buildMenu( + [ + const Text('Date and Time'), + Text( + DateFormat.yMMMd().add_jm().format(dateTime), + style: const TextStyle(color: CupertinoColors.inactiveGray), + ), + ], + ), + ); + } + + @override + Widget build(BuildContext context) { + return SizedBox( + height:MediaQuery.of(context).size.height, + child:CupertinoPageScaffold( +// navigationBar: CupertinoNavigationBar( +// middle: const Text('Picker'), +// previousPageTitle: 'Cupertino' +// ), + child: DefaultTextStyle( + style: TextStyle(), + child: DecoratedBox( + decoration: BoxDecoration( + color: CupertinoColors.inactiveGray + ), + child: ListView( + children: [ + const Padding(padding: EdgeInsets.only(top: 32.0)), + _buildColorPicker(context), + _buildCountdownTimerPicker(context), + _buildDatePicker(context), + _buildTimePicker(context), + _buildDateAndTimePicker(context), + ], + ), + ), + ), + ) + ); + + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoPicker/index.dart b/lib/widgets/themes/Cupertino/CupertinoPicker/index.dart new file mode 100644 index 00000000..40de0df9 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoPicker/index.dart @@ -0,0 +1,45 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 下午10:57 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoPicker 的示例 + +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBox; + +const String content0 = ''' +### **简介** +> iOS风格的选择器 +- 以 wheel 的方式显示子 widget,选择发生改变后的回调; +- 通常和 showModalBottomSheet 搭配在屏幕底部显示 picker 选择器; +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoPicker 的一个示例 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoPicker'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoPickerDemo(), + SizedBox(height:50) + ], + title: 'CupertinoPicker', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoPicker-class.html', + codeUrl: 'themes/Cupertino/CupertinoPicker/demo.dart', + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoPopupSurface/demo.dart b/lib/widgets/themes/Cupertino/CupertinoPopupSurface/demo.dart new file mode 100644 index 00000000..a878fec5 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoPopupSurface/demo.dart @@ -0,0 +1,39 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 上午11:34 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoPopupSurface 的示例 + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// CupertinoPopupSurface 默认的实例 +class CupertinoPopupSurfaceFullDefault extends StatefulWidget { + const CupertinoPopupSurfaceFullDefault() : super(); + + @override + State createState() => _CupertinoPopupSurfaceFullDefault(); +} + +// CupertinoPopupSurface 默认的实例,有状态 +class _CupertinoPopupSurfaceFullDefault extends State { + @override + Widget build(BuildContext context) { + return SizedBox( + height: MediaQuery.of(context).size.height/5, + child: cupertinoPopupSurfaceBar(context) + ); + } + + Widget cupertinoPopupSurfaceBar(BuildContext context) { + return CupertinoPopupSurface( + isSurfacePainted:false, + child: Container( + color: CupertinoColors.inactiveGray, + alignment: Alignment.center, + child: Text('这里是内容', style: TextStyle(color: Colors.white)) + ), // 应用程序默认路由,(Navigator.defaultRouteName,即/) + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoPopupSurface/index.dart b/lib/widgets/themes/Cupertino/CupertinoPopupSurface/index.dart new file mode 100644 index 00000000..87392b90 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoPopupSurface/index.dart @@ -0,0 +1,43 @@ +/// Created with Android Studio. +/// User: 一晟 +/// Date: 2019/1/20 +/// Time: 下午10:57 +/// email: zhu.yan@alibaba-inc.com +/// target: CupertinoPopupSurface 的示例 + +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; +import './demo.dart' as demoBox; + +const String content0 = ''' +### **简介** +> 像iOS弹出式表面 +- 快速实现一个圆角弹框,类似 alert dialog 和 sheet; +'''; + +const String content1 = ''' +### **基本用法** +> CupertinoPopupSurface 的一个示例 +'''; + +class Demo extends StatefulWidget { + static const String routeName = '/themes/Cupertino/CupertinoPopupSurface'; + _DemoState createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + contentList: [ + content0, + content1, + demoBox.CupertinoPopupSurfaceFullDefault(), + SizedBox(height:50) + ], + title: 'CupertinoPopupSurface', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoPopupSurface-class.html', + codeUrl: 'themes/Cupertino/CupertinoPopupSurface/demo.dart', + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoScrollbar/demo.dart b/lib/widgets/themes/Cupertino/CupertinoScrollbar/demo.dart new file mode 100644 index 00000000..e10d6e8d --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoScrollbar/demo.dart @@ -0,0 +1,74 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 15/01/2019 +/// Time: 22:23 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CupertinoScrollbarDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + + Widget build(BuildContext context) { + return Column( + children: [ + CupertinoScrollbar( + child: Container( + height: 300, + child: ListView.custom( + scrollDirection: Axis.vertical, + childrenDelegate:SliverChildBuilderDelegate((BuildContext context, int index) { + return Container( + height: 50.0, + alignment: Alignment.center, + color: Colors.lightBlue[100 * (index % 9)], + child: Text('list item $index'), + ); + }, childCount: 10), + ) + ) + ), + Center( + child: Text("CupertinoScrollbar效果"), + ) + ], + ); + } +} + + +class NoCupertinoScrollbarDemo extends StatefulWidget { + _NoCupertinoScrollbarDemo createState() => _NoCupertinoScrollbarDemo(); +} + +class _NoCupertinoScrollbarDemo extends State { + + Widget build(BuildContext context) { + return Column( + children: [ + Container( + height: 300, + child: ListView.custom( + scrollDirection: Axis.vertical, + childrenDelegate:SliverChildBuilderDelegate((BuildContext context, int index) { + return Container( + height: 50.0, + alignment: Alignment.center, + color: Colors.lightBlue[100 * (index % 9)], + child: Text('list item $index'), + ); + }, childCount: 10), + ) + ), + Center( + child: Text("无CupertinoScrollbar效果"), + ) + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoScrollbar/index.dart b/lib/widgets/themes/Cupertino/CupertinoScrollbar/index.dart new file mode 100644 index 00000000..93f14914 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoScrollbar/index.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import 'demo.dart'; + +const Text0 = ''' +### **简介** +> CupertinoScrollbar 是ios样式风格的滚动条 + +为其可滚动的子元素,构建一个ios风格样式的滚动条 +'''; + +const String Text1 = """ +### **基本用法** +> 这里我们会用一个有CupertinoScrollbar和无CupertinoScrollbar的demo进行对比展示, +通过对比, 我们发现CupertinoScrollbar的子组件, 会有滚动的时候, 右侧会有一个滚动条. +"""; + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoScrollbar'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoScrollbar', + codeUrl: 'themes/Cupertino/CupertinoScrollbar/demo.dart', + docUrl: 'https://docs.flutter.io/flutter/material/MaterialAccentColor-class.html', + contentList: [ + Text0, + Text1, + CupertinoScrollbarDemo(), + NoCupertinoScrollbarDemo(), + SizedBox(height: 100), + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart b/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart new file mode 100644 index 00000000..c7f2f87b --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart @@ -0,0 +1,35 @@ + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CupertinoSegmentedControlDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + String value = 'a'; + Widget build(BuildContext context) { + return CupertinoSegmentedControl( + onValueChanged: (v) { + this.setState(() { + value = v; + }); + }, + pressedColor: Color(0xff7c1c25), + borderColor: Color(0xffac172a), + selectedColor: Color(0xffac172a), + groupValue: value, + children: { + 'a': Container( + alignment: Alignment.center, + width: 130.0, + child: Text('a') + ), + 'c': Text('C'), + 'b': Text('B'), + }, + ); + } + +} + diff --git a/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/index.dart b/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/index.dart new file mode 100644 index 00000000..5063c7d2 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoSegmentedControl/index.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import 'demo.dart'; + +const Text0 = ''' +### **简介** +> IOS风格下用于展示一些用户可以选择的选项 + +将来自CupertinoSegmentedControl的child属性的Map列表中的组件, 以水平的方式展开供用户选择.这些选择是互斥的. 用户只能选择一个. + + +### **基本用法** + +> 这个组件的重点属性在于他的child属性 + +在官方文档中, 它的child属性是一个Map对象. 这个对象的K可以是任意对象, String/Int/Widget/Array..., 这里的T值会在每次用户点击的时候. 触发**onValueChanged** 回调, +整个组件的高度, 取决于Map列表中Widget中最高的. 整个组件的宽度, 取决于Map列表中widget中最宽的 * Map的长度. + +样式支持用户自定义. +'''; + + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoSegmentedControl'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoSegmentedControl', + codeUrl: '/hemes/Cupertino/CupertinoSegmentedControl/demo.dart', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoSegmentedControl-class.html', + contentList: [ + Text0, + CupertinoSegmentedControlDemo(), + SizedBox(height: 100), + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart b/lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart new file mode 100644 index 00000000..fe52c12f --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart @@ -0,0 +1,33 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 15/01/2019 +/// Time: 22:23 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CupertinoSliderDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + double value = 0.0; + Widget build(BuildContext context) { + return CupertinoSlider( + value: value,//实际进度的位置 + min: 0.0, + max: 100.0, + divisions: 100, + activeColor: Colors.blue,//进度中活动部分的颜色 + onChanged: (double){ + setState(() { + value = double.roundToDouble(); + }); + }, + ); + } + +} + diff --git a/lib/widgets/themes/Cupertino/CupertinoSlider/index.dart b/lib/widgets/themes/Cupertino/CupertinoSlider/index.dart new file mode 100644 index 00000000..8d993208 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoSlider/index.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import 'demo.dart'; + +const Text0 = ''' +### **简介** +> 用来选择范围性的数据 + +CupertinoSlider 是ios风格的Slide组件,用来选择连续性的或者非连续性的数据. 默认是在一段最大值最小值间做任意值的选择. 如果你想选择间隔性的值, 例如0.0到50.0间,选择10, 15,...50.0这样的值, 给divisions设定一个非空的整数5,, 去分割区间范围. + +### **基本用法** + +> 与 Slider 相同, 具体查看Slider组件 +'''; + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoSlider'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoSlider', + codeUrl: 'themes/Cupertino/CupertinoSlider/demo.dart', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoSlider-class.html', + contentList: [ + Text0, + CupertinoSliderDemo(), + SizedBox(height: 100), + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/demo.dart b/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/demo.dart new file mode 100644 index 00000000..101c8aee --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/demo.dart @@ -0,0 +1,152 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 15/01/2019 +/// Time: 22:23 +/// email: sanfan.hx@alibaba-inc.com +/// target: xxx + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CupertinoSliverNavigationBarDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + double value = 0.0; + Widget build(BuildContext context) { + return CupertinoPageScaffold( + child: DecoratedBox( + decoration: const BoxDecoration(color: Color(0xFFEFEFF4)), + child: Container( + height: 600.0, + child: CustomScrollView( + slivers: [ + CupertinoSliverNavigationBar( + largeTitle: const Text('demo', maxLines: 1,), + previousPageTitle: 'Cupertino', + trailing: Icon(Icons.perm_camera_mic) + ), + CupertinoSliverRefreshControl( + onRefresh: () { + }, + ), + SliverSafeArea( + top: false, // Top safe area is consumed by the navigation bar. + sliver: SliverList( + delegate: SliverChildBuilderDelegate( + (BuildContext context, int index) { + return _ListItem(name: 'name$index',place: 'place$index', date: 'date', called: true); + }, + childCount: 20, + ), + ), + ), + ], + ), + ) + ), + ); + } + +} + + + + +class _ListItem extends StatelessWidget { + const _ListItem({ + this.name, + this.place, + this.date, + this.called, + }); + + final String name; + final String place; + final String date; + final bool called; + + @override + Widget build(BuildContext context) { + return Container( + color: CupertinoColors.white, + height: 60.0, + padding: const EdgeInsets.only(top: 9.0), + child: Row( + children: [ + Container( + width: 38.0, + margin: EdgeInsets.only(top: 10), + child: called + ? const Align( + alignment: Alignment.topCenter, + child: Icon( + CupertinoIcons.phone_solid, + color: CupertinoColors.inactiveGray, + size: 28.0, + ), + ) + : null, + ), + Expanded( + child: Container( + decoration: const BoxDecoration( + border: Border( + bottom: BorderSide(color: Color(0xFFBCBBC1), width: 0.0), + ), + ), + padding: const EdgeInsets.only(left: 1.0, bottom: 9.0, right: 10.0), + child: Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + name, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + fontWeight: FontWeight.w600, + letterSpacing: -0.18, + ), + ), + Text( + place, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + fontSize: 15.0, + letterSpacing: -0.24, + color: CupertinoColors.inactiveGray, + ), + ), + ], + ), + ), + Text( + date, + style: const TextStyle( + color: CupertinoColors.inactiveGray, + fontSize: 15.0, + letterSpacing: -0.41, + ), + ), + const Padding( + padding: EdgeInsets.only(left: 9.0), + child: Icon( + CupertinoIcons.info, + color: CupertinoColors.activeBlue + ), + ), + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/index.dart b/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/index.dart new file mode 100644 index 00000000..3cd0ffc8 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/index.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import 'demo.dart'; + +const Text0 = ''' +### **简介** +> ios-11风格下拥有一个较大标题块的导航栏目 + +### **基本用法** + +> 该组件使用时. 必须做为含有slivers属性的滚动列表的子组件中,例如CustomScrollView +'''; + + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoSliverNavigationBar'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoSlider', + codeUrl: 'themes/Cupertino/CupertinoSliverNavigationBar/demo.dart', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoSliverNavigationBar-class.html', + contentList: [ + Text0, + CupertinoSliverNavigationBarDemo(), + SizedBox(height: 100), + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoSwitch/demo.dart b/lib/widgets/themes/Cupertino/CupertinoSwitch/demo.dart new file mode 100644 index 00000000..8d0048f5 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoSwitch/demo.dart @@ -0,0 +1,32 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 15/01/2019 +/// Time: 22:23 +/// email: sanfan.hx@alibaba-inc.com +/// target: CupertinoSwitchDemo + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CupertinoSwitchDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + bool _lights = false; + Widget build(BuildContext context) { + return MergeSemantics( + child: ListTile( + title: Text('CupertinoSwitch'), + trailing: CupertinoSwitch( + activeColor: Colors.yellow, + value: _lights, + onChanged: (bool value) { setState(() { _lights = value; }); }, + ), + onTap: () { setState(() { _lights = !_lights; }); }, + ), + ); + } + +} + diff --git a/lib/widgets/themes/Cupertino/CupertinoSwitch/index.dart b/lib/widgets/themes/Cupertino/CupertinoSwitch/index.dart new file mode 100644 index 00000000..94b9ac68 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoSwitch/index.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; + +import 'demo.dart'; +const Text0 = ''' +### **简介** +> ios风格下的Switch组件, 用法与Switch组件相同 + +### **基本用法** + +> 基本用法与Switch基本相同. 不同点在于, 该组件仅支持自定义activeColor, 也就是支持自定义当按钮处于true状态下,按钮的背景色. +'''; + + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoSwitch'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoSlider', + codeUrl: 'themes/Cupertino/CupertinoSwitch/demo.dart', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoSwitch-class.html', + contentList: [ + Text0, + CupertinoSwitchDemo() + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoTabBar/demo.dart b/lib/widgets/themes/Cupertino/CupertinoTabBar/demo.dart new file mode 100644 index 00000000..50845fbd --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoTabBar/demo.dart @@ -0,0 +1,51 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 20/01/2019 +/// Time: 22:28 +/// email: sanfan.hx@alibaba-inc.com +/// target: CupertinoTabBar + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CupertinoTabBarDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + int index = 0; + + changeIndex(int _index) { + this.setState(() { + index = _index; + }); + } + Widget build(BuildContext context) { + return Container( + height: 500, + child: Scaffold( + appBar: AppBar(title: const Text('CupertinoTabBarDemo')), + floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, + body: Center( + child: Text('CupertinoTabBarDemo in bottom'), + ), + bottomNavigationBar: CupertinoTabBar( + backgroundColor: Color.fromRGBO(244, 244, 244, 0.5), + currentIndex: index, + onTap: (i) { + this.changeIndex(i); + }, + items: [ + BottomNavigationBarItem( + title: Text("1"), + icon: Icon(Icons.add), + ), + BottomNavigationBarItem( + title: Text("2"), + icon: Icon(Icons.delete) + )], + ) + ), + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoTabBar/index.dart b/lib/widgets/themes/Cupertino/CupertinoTabBar/index.dart new file mode 100644 index 00000000..c2cd0106 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoTabBar/index.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; + +import 'demo.dart'; +const Text0 = ''' +### **简介** +> ios风格下底部导航组件. + +通过BottomNavigationBarItem列表,在屏幕底部展示多个小组件, 默认下选择第一个小组件; + +### **基本用法** + +这个组件, 没有任何内部状态, 使用时需要开发者自己去监听**onTap**方法, 主动为组件的属性**currentIndex**赋值 + +在官网上有这么一段文字: + +> If the given backgroundColor's opacity is not 1.0 (which is the case by default), it will produce a blurring effect to the content behind it. + +本人试了很多次. 也没有发现这个Blur Effect是怎么触发的, 如果有人了解, 欢迎提PR. +'''; + + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoTabBar'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoTabBar', + codeUrl: 'themes/Cupertino/CupertinoTabBar/demo.dart', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoTabBar-class.html', + contentList: [ + Text0, + CupertinoTabBarDemo() + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoTabScaffold/demo.dart b/lib/widgets/themes/Cupertino/CupertinoTabScaffold/demo.dart new file mode 100644 index 00000000..ae508eb0 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoTabScaffold/demo.dart @@ -0,0 +1,77 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 20/01/2019 +/// Time: 22:28 +/// email: sanfan.hx@alibaba-inc.com +/// target: CupertinoTabBar + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CupertinoTabScaffoldDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + int index = 0; + + changeIndex(int _index) { + this.setState(() { + index = _index; + }); + } + Widget build(BuildContext context) { + return SizedBox( + height: 500, + child: CupertinoTabScaffold( + tabBar: CupertinoTabBar( + items: [ + BottomNavigationBarItem( + title: Text("1"), + icon: Icon(Icons.add), + ), + BottomNavigationBarItem( + title: Text("2"), + icon: Icon(Icons.add), + ) + ], + ), + tabBuilder: (BuildContext context, int index) { + return CupertinoTabView( + builder: (BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 1 of tab $index'), + ), + child: Center( + child: CupertinoButton( + child: Text('Next page = $index'), + onPressed: () { + Navigator.of(context).push( + CupertinoPageRoute( + builder: (BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 2 of tab $index'), + ), + child: Center( + child: CupertinoButton( + child: const Text('Back'), + onPressed: () { Navigator.of(context).pop(); }, + ), + ), + ); + }, + ), + ); + }, + ), + ), + ); + }, + ); + }, + ), + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoTabScaffold/index.dart b/lib/widgets/themes/Cupertino/CupertinoTabScaffold/index.dart new file mode 100644 index 00000000..fe736adc --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoTabScaffold/index.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; + +import 'demo.dart'; +const Text0 = ''' +### **简介** + +> 实现iOS应用程序的选项卡式的根布局与结构。 + +一个在底部放置标签栏,标签栏之间或后面放置内容的脚手架. + +这个脚手架, tabBar组件与tabBuilder组件是必须配置的。如果你为该脚手架配置的tabBar组件是 **CupertinoTabBar**的话. 它会自动监听**CupertinoTabBar**底部的切换事件, 去动态切换主体显示的内容. + + +选项卡的内容是使用**tabBuilder**选项卡生成器生成的。TabBuilder必须能够生成tabbar中组件数组长度相同数量的组件。不活动的选项卡将被移到后台并禁用其动画。 + + +使用cupertinobview作为每个选项卡的内容,以支持具有并行导航状态和历史记录的选项卡。 + + +通过BottomNavigationBarItem列表,在屏幕底部展示多个小组件, 默认下选择第一个小组件; + +### **基本用法** + + +'''; + + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoTabScaffold'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoTabScaffold', + codeUrl: 'themes/Cupertino/CupertinoTabScaffold/demo.dart', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoTabScaffold-class.html', + contentList: [ + Text0, + CupertinoTabScaffoldDemo() + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoTabView/demo.dart b/lib/widgets/themes/Cupertino/CupertinoTabView/demo.dart new file mode 100644 index 00000000..4e549162 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoTabView/demo.dart @@ -0,0 +1,92 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 20/01/2019 +/// Time: 22:28 +/// email: sanfan.hx@alibaba-inc.com +/// target: CupertinoTabBar + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CupertinoTabScaffoldDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + int index = 0; + + changeIndex(int _index) { + this.setState(() { + index = _index; + }); + } + Widget build(BuildContext context) { + return SizedBox( + height: 500, + child: CupertinoTabScaffold( + tabBar: CupertinoTabBar( + items: [ + BottomNavigationBarItem( + title: Text("A"), + icon: Icon(Icons.add), + ), + BottomNavigationBarItem( + title: Text("B"), + icon: Icon(Icons.add), + ) + ], + ), + tabBuilder: (BuildContext context, int index) { + return CupertinoTabView( + routes: { + '/': (context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 1 of tabView $index'), + ), + child: Center( + child: Text('CupertinoTabView /'), + ), + ); + }, + '/home': (context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 1 of tabView $index'), + ), + child: Center( + child: Text('CupertinoTabView home'), + ), + ); + } + }, + builder: (BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('Page 1 of tabView $index'), + ), + child: Column( + children: [ + SizedBox(height: 100), + CupertinoButton( + child: Text('Next page is self home page'), + onPressed: () { + Navigator.of(context).pushNamed('/home'); + }, + ), + CupertinoButton( + child: Text('Next page is home home page'), + onPressed: () { + Navigator.of(context, rootNavigator: true).pushNamed('/home'); + }, + ) + ], + ) + ); + }, + ); + }, + ), + ); + } +} \ No newline at end of file diff --git a/lib/widgets/themes/Cupertino/CupertinoTabView/index.dart b/lib/widgets/themes/Cupertino/CupertinoTabView/index.dart new file mode 100644 index 00000000..ad72bb6f --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoTabView/index.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; +import 'demo.dart'; + +const Text0 = ''' +### **简介** + +> 具有自己的**Navigator**状态与历史记录的选项卡视图组件. + +在使用时需要注意,该组件有自己的路由体系, 有自己的导航系统, 并且他自身内部的导航系统并不与任何父母元素共享 + + + +### **基本用法** + +关于它自身的路由体系, 有以下几点需要注意几点. + +- 在它的根路由映射(**'/'**), 当它有 **builder** 属性的时候, 指向**build**的界面, 非得使用**router**中定义的根目录 +- 当组件未设定**builder**时, 在他的路由表 **router** 中, 一定要指定 **'/'** 跟路由, 不然会产生错误. +- 当指定 **onGenerateRoute** 属性时, 它应该返回一个回空有效的route. +- 如果所有的配置都未命中, 则会命中 **onUnknownRoute** 属性. 这与MaterialApp一致相同 + +如果你想从 **CupertinoTabView** 的路由体系, 跳转到外层的路由中, 您需要在跳转时调用 **Navigator**,并设定 **rootNavigator** 参数 +``` +Navigator.of(context, rootNavigator: true) +``` + +### **基本实例** + +'''; + + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoTabView'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoTabView', + codeUrl: 'themes/Cupertino/CupertinoTabView/demo.dart', + docUrl: 'https://docs.flutter.io/flutter/cupertino/CupertinoTabView-class.html', + contentList: [ + Text0, + CupertinoTabScaffoldDemo() + ], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoTimerPicker/demo.dart b/lib/widgets/themes/Cupertino/CupertinoTimerPicker/demo.dart new file mode 100644 index 00000000..45b24c68 --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoTimerPicker/demo.dart @@ -0,0 +1,62 @@ +/// Created with Android Studio. +/// User: 三帆 +/// Date: 20/01/2019 +/// Time: 22:28 +/// email: sanfan.hx@alibaba-inc.com +/// target: CupertionTabBar + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + + + +class CupertinoTimerPickerDemo extends StatefulWidget { + _Demo createState() => _Demo(); +} + +class _Demo extends State { + int index = 0; + Duration timer = Duration(minutes: 50); + + Widget _buildBottomPicker(Widget picker) { + return Container( + height: 300, + padding: const EdgeInsets.only(top: 6.0), + color: CupertinoColors.white, + child: DefaultTextStyle( + style: const TextStyle( + color: CupertinoColors.black, + fontSize: 22.0, + ), + child: GestureDetector( + // Blocks taps from propagating to the modal sheet and popping. + onTap: () {}, + child: SafeArea( + top: false, + child: picker, + ), + ), + ), + ); + } + + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) { + return _buildBottomPicker(CupertinoTimerPicker( + initialTimerDuration: timer, + minuteInterval: 5, + onTimerDurationChanged: (Duration newTimer) { + setState(() => timer = newTimer); + }, + )); + }, + ); + }, + child: Text("点我弹出"), + ); + } +} diff --git a/lib/widgets/themes/Cupertino/CupertinoTimerPicker/index.dart b/lib/widgets/themes/Cupertino/CupertinoTimerPicker/index.dart new file mode 100644 index 00000000..1ca5a07a --- /dev/null +++ b/lib/widgets/themes/Cupertino/CupertinoTimerPicker/index.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_go/components/widget_demo.dart'; + +import 'demo.dart'; + +const Text0 = ''' +### **简介** + +> CupertinoTimerPicker 是一个ios风格下的时间选择组件 + +此选择器显示带有小时、分钟和秒的时间选择器。时间范围为0-23小时, 0-59分钟. 0-59秒. + + +### **基本用法** + + +### **基本实例** + +属性说明: + +- initialTimerDuration 初始化时间点 +- minuteInterval 分钟间隔, 我们设置为5, 则分钟选项为0,5,10,15... +- mode 显示的格式, 我们可以控制该属性, 仅显示小时与分钟, 分钟与秒等, 具体查看 **CupertinoTimerPickerMode** +- onTimerDurationChanged 时间改变后的回调 +- secondInterval 秒数间隔, 与minuteInterval同 + +'''; + +class Demo extends StatefulWidget { + static const String routeName = + '/element/themes/Cupertino/CupertinoTimerPicker'; + + @override + State createState() => _DemoState(); +} + +class _DemoState extends State { + @override + Widget build(BuildContext context) { + return WidgetDemo( + title: 'CupertinoTimerPicker', + codeUrl: 'themes/Cupertino/CupertinoTimerPicker/demo.dart', + docUrl: + 'https://docs.flutter.io/flutter/cupertino/CupertinoTimerPicker-class.html', + contentList: [Text0, CupertinoTimerPickerDemo()], + ); + } +} diff --git a/lib/widgets/themes/Cupertino/index.dart b/lib/widgets/themes/Cupertino/index.dart new file mode 100644 index 00000000..2f8b8cbc --- /dev/null +++ b/lib/widgets/themes/Cupertino/index.dart @@ -0,0 +1,120 @@ +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 './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; + +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(), + ), +]; + diff --git a/lib/widgets/themes/Material/MaterialAccentColor/index.dart b/lib/widgets/themes/Material/MaterialAccentColor/index.dart index 66f39a3a..af297ba2 100644 --- a/lib/widgets/themes/Material/MaterialAccentColor/index.dart +++ b/lib/widgets/themes/Material/MaterialAccentColor/index.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_go/common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import 'package:flutter_go/widgets/themes/Material/MaterialColor/demo.dart'; const Text0 = ''' @@ -28,7 +29,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/demo.dart b/lib/widgets/themes/Material/MaterialApp/demo.dart index be00903d..b06a5f78 100644 --- a/lib/widgets/themes/Material/MaterialApp/demo.dart +++ b/lib/widgets/themes/Material/MaterialApp/demo.dart @@ -1,18 +1,17 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 16:25:25 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 16:25:25 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 16:25:25 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 16:25:25 + // !!! 代码示例,并非Demo // import 'package:flutter/material.dart'; // 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 +24,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 9fce5d86..0285bc1d 100644 --- a/lib/widgets/themes/Material/MaterialApp/index.dart +++ b/lib/widgets/themes/Material/MaterialApp/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 16:25:22 - * @Last Modified by: 一凨 - * @Last Modified time: 2019-01-07 15:52:45 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 16:25:22 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2019-01-07 15:52:45 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; const String content0 = ''' ### **简介** @@ -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/demo.dart b/lib/widgets/themes/Material/MaterialButton/demo.dart index 03a5436e..baa68e36 100644 --- a/lib/widgets/themes/Material/MaterialButton/demo.dart +++ b/lib/widgets/themes/Material/MaterialButton/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 16:25:25 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 16:25:25 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 16:25:25 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 16:25:25 + import 'package:flutter/material.dart'; class MaterialButtonDemo extends StatelessWidget { diff --git a/lib/widgets/themes/Material/MaterialButton/index.dart b/lib/widgets/themes/Material/MaterialButton/index.dart index 6658e2f2..3fb955b3 100644 --- a/lib/widgets/themes/Material/MaterialButton/index.dart +++ b/lib/widgets/themes/Material/MaterialButton/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 16:25:22 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 16:35:39 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 16:25:22 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 16:35:39 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' @@ -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/demo.dart b/lib/widgets/themes/Material/MaterialColor/demo.dart index 393524ba..ff466379 100644 --- a/lib/widgets/themes/Material/MaterialColor/demo.dart +++ b/lib/widgets/themes/Material/MaterialColor/demo.dart @@ -1,9 +1,8 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 16:25:25 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 16:25:25 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 16:25:25 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 16:25:25 + import 'package:flutter/material.dart'; const double kColorItemHeight = 48.0; @@ -14,10 +13,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 @@ -204,7 +202,7 @@ class ColorDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - height: 1000.0, + height: 400.0, child: DefaultTabController( length: allPalettes.length, child: Scaffold( diff --git a/lib/widgets/themes/Material/MaterialColor/index.dart b/lib/widgets/themes/Material/MaterialColor/index.dart index 106346a1..d4467e98 100644 --- a/lib/widgets/themes/Material/MaterialColor/index.dart +++ b/lib/widgets/themes/Material/MaterialColor/index.dart @@ -1,11 +1,11 @@ -/* - * @Author: 一凨 - * @Date: 2018-12-27 16:25:22 - * @Last Modified by: 一凨 - * @Last Modified time: 2018-12-27 16:35:39 - */ +/// @Author: 一凨 +/// @Date: 2018-12-27 16:25:22 +/// @Last Modified by: 一凨 +/// @Last Modified time: 2018-12-27 16:35:39 + import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' @@ -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/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/MaterialPageRoute/index.dart b/lib/widgets/themes/Material/MaterialPageRoute/index.dart index 0408084d..12b8fbdf 100644 --- a/lib/widgets/themes/Material/MaterialPageRoute/index.dart +++ b/lib/widgets/themes/Material/MaterialPageRoute/index.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_go/common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const Text0 = ''' @@ -27,7 +28,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/demo.dart b/lib/widgets/themes/Material/MergeableMaterialItem/demo.dart index df54a53e..e5d0b3aa 100644 --- a/lib/widgets/themes/Material/MergeableMaterialItem/demo.dart +++ b/lib/widgets/themes/Material/MergeableMaterialItem/demo.dart @@ -1,9 +1,10 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-08 11:33:21 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 15:24:14 - */ + + /// Author: xiaojia.dxj + /// Date: 2019-01-08 11:33:21 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 15:24:14 + import 'package:flutter/material.dart'; class MergeableMaterialItemDemo extends StatefulWidget { @@ -25,20 +26,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 +57,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/lib/widgets/themes/Material/MergeableMaterialItem/index.dart b/lib/widgets/themes/Material/MergeableMaterialItem/index.dart index 7bd1a322..fafc2240 100644 --- a/lib/widgets/themes/Material/MergeableMaterialItem/index.dart +++ b/lib/widgets/themes/Material/MergeableMaterialItem/index.dart @@ -1,12 +1,12 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2019-01-07 16:36:43 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2019-01-08 14:12:32 - */ + /// Author: xiaojia.dxj + /// Date: 2019-01-07 16:36:43 + /// Email: xiaojia.dxj@alibaba-inc.com + /// Last Modified by: xiaojia.dxj + /// Last Modified time: 2019-01-08 14:12:32 import 'package:flutter/material.dart'; -import '../../../../common/widget_demo.dart'; + +import 'package:flutter_go/components/widget_demo.dart'; import './demo.dart'; const String content0 = ''' @@ -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/lib/widgets/themes/Material/index.dart b/lib/widgets/themes/Material/index.dart index 8c36a63f..2ef1f607 100644 --- a/lib/widgets/themes/Material/index.dart +++ b/lib/widgets/themes/Material/index.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; -import '../../../model/widget.dart'; +import '../../../model/widget.dart'; import 'MaterialPageRoute/index.dart' as MaterialPageRoute; import 'MaterialAccentColor/index.dart' as MaterialAccentColor; import 'MaterialApp/index.dart' as MaterialApp; diff --git a/lib/widgets/themes/index.dart b/lib/widgets/themes/index.dart index e7a62e6c..b263753b 100644 --- a/lib/widgets/themes/index.dart +++ b/lib/widgets/themes/index.dart @@ -1,14 +1,14 @@ -/* - * @Author: xiaojia.dxj - * @Date: 2018-12-24 16:31:09 - * @Last Modified by: xiaojia.dxj - * @Last Modified time: 2018-12-24 16:31:09 - */ +/// @Author: xiaojia.dxj +/// @Date: 2018-12-24 16:31:09 +/// @Last Modified by: xiaojia.dxj +/// @Last Modified time: 2018-12-24 16:31:09 import './Material/index.dart' as Material; +import './Cupertino/index.dart' as Cupertino; List getWidgets() { List result = []; result.addAll(Material.widgetPoints); + result.addAll(Cupertino.widgetPoints); return result; } \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index 2826669d..1d47ed4c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ description: flutter_go # Both the version and the builder number may be overridden in flutter # build by specifying --build-name and --build-number, respectively. # Read more about versioning at semver.org. -version: 0.0.4 +version: 0.0.5 environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" @@ -25,19 +25,17 @@ dependencies: sqflite: ^0.12.1 flutter_markdown: ^0.2.0 url_launcher: ^4.0.1 - fluttertoast: ^2.2.2 # 本地存储、收藏功能 shared_preferences: ^0.4.3 dio: ^1.0.6 flutter_webview_plugin: ^0.3.0+2 + # 日期格式化 + intl: 0.15.7 + city_pickers: ^0.1.0 dev_dependencies: flutter_test: sdk: flutter - flutter_driver: - sdk: flutter - flutter_goldens: - sdk: flutter # For information on the generic Dart part of this file, see the # following page: https://www.dartlang.org/tools/pub/pubspec @@ -50,130 +48,161 @@ flutter: # the material Icons class. uses-material-design: true assets: - - lib/widgets/elements/Form/Input/TextField/text_field_demo.dart - - lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart - - lib/widgets/components/Bar/AppBar/demo.dart - - lib/widgets/components/Bar/BottomAppBar/demo.dart - - lib/widgets/components/Bar/ButtonBar/demo.dart - - lib/widgets/components/Bar/FlexibleSpaceBar/demo.dart - - lib/widgets/components/Bar/SliverAppBar/demo.dart - - lib/widgets/components/Bar/SnackBar/demo.dart - - lib/widgets/components/Bar/SnackBarAction/demo.dart - - lib/widgets/components/Bar/TabBar/demo.dart - - lib/widgets/components/Card/Card/demo.dart - - lib/widgets/components/Chip/Chip/demo.dart - - lib/widgets/components/Chip/ChipTheme/demo.dart - - lib/widgets/components/Chip/ChipThemeData/demo.dart - - lib/widgets/components/Chip/ChoiceChip/demo.dart - - lib/widgets/components/Chip/FilterChip/demo.dart - - lib/widgets/components/Chip/inputChip/demo.dart - - lib/widgets/components/Chip/RawChip/demo.dart - - lib/widgets/components/Dialog/AboutDialog/demo.dart - - lib/widgets/components/Dialog/AlertDialog/demo.dart - - lib/widgets/components/Dialog/Dialog/demo.dart - - lib/widgets/components/Dialog/SimpleDialog/demo.dart - - 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/Menu/CheckedPopupMenuItem/demo.dart - - lib/widgets/components/Menu/DropdownMenuItem/demo.dart - - lib/widgets/components/Menu/PopupMenuButton/demo.dart - - lib/widgets/components/Menu/PopupMenuDivider/demo.dart - - lib/widgets/components/Navigation/BottomNavigationBar/demo.dart - - lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart - - lib/widgets/components/Panel/ExpansionPanel/demo.dart - - lib/widgets/components/Panel/ExpansionPanelList/demo.dart - - lib/widgets/components/Pick/DayPicker/demo.dart - - lib/widgets/components/Pick/MonthPicker/demo.dart - - lib/widgets/components/Pick/ShowdatePicker/demo.dart - - lib/widgets/components/Pick/YearPicker/demo.dart - - lib/widgets/components/Progress/CircularProgressIndicator/demo.dart - - lib/widgets/components/Progress/LinearProgressIndicator/demo.dart - - lib/widgets/components/Progress/RefreshProgressIndicator/demo.dart - - lib/widgets/components/Scaffold/Scaffold/demo.dart - - lib/widgets/components/Scaffold/ScaffoldState/demo.dart - - lib/widgets/components/Scroll/BoxScrollView/demo.dart - - lib/widgets/components/Scroll/CustomScrollView/demo.dart - - lib/widgets/components/Scroll/NestedScrollView/demo.dart - - lib/widgets/components/Scroll/Scrollable/demo.dart - - lib/widgets/components/Scroll/ScrollbarPainter/demo.dart - - lib/widgets/components/Scroll/ScrollMetrics/demo.dart - - lib/widgets/components/Scroll/ScrollPhysics/demo.dart - - lib/widgets/components/Scroll/ScrollView/demo.dart - - lib/widgets/components/Tab/Tab/demo.dart - - lib/widgets/elements/Form/Button/DropdownButton/demo.dart - - lib/widgets/elements/Form/Button/FlatButton/demo.dart - - lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart - - lib/widgets/elements/Form/Button/IconButton/demo.dart - - lib/widgets/elements/Form/Button/OutlineButton/demo.dart - - lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart - - lib/widgets/elements/Form/Button/RaisedButton/demo.dart - - lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart - - lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart - - lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart - - lib/widgets/elements/Form/Radio/Radio/demo.dart - - lib/widgets/elements/Form/Radio/RadioListTile/demo.dart - - lib/widgets/elements/Form/Slider/Slider/demo.dart - - lib/widgets/elements/Form/Slider/SliderTheme/demo.dart - - lib/widgets/elements/Form/Slider/SliderThemeData/demo.dart - - lib/widgets/elements/Form/Switch/AnimatedSwitcher/demo.dart - - lib/widgets/elements/Form/Switch/Switch/demo.dart - - lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart - - lib/widgets/elements/Frame/Align/Align/demo.dart - - lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart - - lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart - - 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 - - lib/widgets/elements/Frame/Layout/Column/demo.dart - - lib/widgets/elements/Frame/Layout/Container/demo.dart - - lib/widgets/elements/Frame/Layout/Row/demo.dart - - lib/widgets/elements/Frame/Spacing/AnimatedPadding/animatedPadding_demo.dart - - lib/widgets/elements/Frame/Spacing/Padding/padding_demo.dart - - lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart - - lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart - - lib/widgets/elements/Frame/Stack/Stack/demo.dart - - lib/widgets/elements/Frame/Table/Table/table_demo.dart - - lib/widgets/elements/Media/Icon/Icon/demo.dart - - lib/widgets/elements/Media/Icon/IconData/demo.dart - - lib/widgets/elements/Media/Icon/IconTheme/demo.dart - - lib/widgets/elements/Media/Icon/IconThemeData/demo.dart - - lib/widgets/elements/Media/Icon/ImageIcon/demo.dart - - lib/widgets/elements/Media/Image/AssetImage/assetImage_demo.dart - - lib/widgets/elements/Media/Image/DecorationImage/decorationImage_demo.dart - - lib/widgets/elements/Media/Image/DecorationImagePainter/decoration_image_painter_demo.dart - - lib/widgets/elements/Media/Image/ExactAssetImage/exact_asset_image_demo.dart - - lib/widgets/elements/Media/Image/FadeInImage/fade_in_image_demo.dart - - lib/widgets/elements/Media/Image/FileImage/file_image_demo.dart - - lib/widgets/elements/Media/Image/Image/demo.dart - - lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart - - lib/widgets/elements/Media/Image/NetworkImage/network_image_demo.dart - - 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/themes/Material/MaterialApp/demo.dart - - lib/widgets/themes/Material/MaterialButton/demo.dart - - lib/widgets/themes/Material/MaterialColor/demo.dart - - lib/widgets/themes/Material/MaterialPageRoute/demo.dart - - lib/widgets/themes/Material/MergeableMaterialItem/demo.dart - - assets/app.db - - assets/images/ - - lib/common/example_code_parser.dart - - lib/common/syntax_highlighter.dart - + - lib/widgets/elements/Form/Input/TextField/text_field_demo.dart + - lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart + - lib/widgets/components/Bar/AppBar/demo.dart + - lib/widgets/components/Bar/BottomAppBar/demo.dart + - lib/widgets/components/Bar/ButtonBar/demo.dart + - lib/widgets/components/Bar/FlexibleSpaceBar/demo.dart + - lib/widgets/components/Bar/SliverAppBar/demo.dart + - lib/widgets/components/Bar/SnackBar/demo.dart + - lib/widgets/components/Bar/SnackBarAction/demo.dart + - lib/widgets/components/Bar/TabBar/demo.dart + - lib/widgets/components/Card/Card/demo.dart + - lib/widgets/components/Chip/Chip/demo.dart + - lib/widgets/components/Chip/ChipTheme/demo.dart + - lib/widgets/components/Chip/ChipThemeData/demo.dart + - lib/widgets/components/Chip/ChoiceChip/demo.dart + - lib/widgets/components/Chip/FilterChip/demo.dart + - lib/widgets/components/Chip/InputChip/demo.dart + - lib/widgets/components/Chip/RawChip/demo.dart + - lib/widgets/components/Dialog/AboutDialog/demo.dart + - lib/widgets/components/Dialog/AlertDialog/demo.dart + - lib/widgets/components/Dialog/Dialog/demo.dart + - lib/widgets/components/Dialog/SimpleDialog/demo.dart + - lib/widgets/components/Grid/GridTile/demo.dart + - lib/widgets/components/Grid/GridTileBar/demo.dart + - lib/widgets/components/Grid/GridView/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 + - lib/widgets/components/Menu/PopupMenuDivider/demo.dart + - lib/widgets/components/Navigation/BottomNavigationBar/demo.dart + - lib/widgets/components/Navigation/BottomNavigationBarItem/demo.dart + - lib/widgets/components/Panel/ExpansionPanel/demo.dart + - lib/widgets/components/Panel/ExpansionPanelList/demo.dart + - lib/widgets/components/Pick/DayPicker/demo.dart + - lib/widgets/components/Pick/MonthPicker/demo.dart + - lib/widgets/components/Pick/ShowdatePicker/demo.dart + - lib/widgets/components/Pick/YearPicker/demo.dart + - lib/widgets/components/Progress/CircularProgressIndicator/demo.dart + - lib/widgets/components/Progress/LinearProgressIndicator/demo.dart + - lib/widgets/components/Progress/RefreshProgressIndicator/demo.dart + - lib/widgets/components/Scaffold/Scaffold/demo.dart + - lib/widgets/components/Scaffold/ScaffoldState/demo.dart + - lib/widgets/components/Scroll/BoxScrollView/demo.dart + - lib/widgets/components/Scroll/CustomScrollView/demo.dart + - lib/widgets/components/Scroll/NestedScrollView/demo.dart + - lib/widgets/components/Scroll/Scrollable/demo.dart + - lib/widgets/components/Scroll/ScrollbarPainter/demo.dart + - lib/widgets/components/Scroll/ScrollMetrics/demo.dart + - lib/widgets/components/Scroll/ScrollPhysics/demo.dart + - lib/widgets/components/Scroll/ScrollView/demo.dart + - lib/widgets/components/Tab/Tab/demo.dart + - lib/widgets/elements/Form/Button/DropdownButton/demo.dart + - lib/widgets/elements/Form/Button/FlatButton/demo.dart + - lib/widgets/elements/Form/Button/FloatingActionButton/demo.dart + - lib/widgets/elements/Form/Button/IconButton/demo.dart + - lib/widgets/elements/Form/Button/OutlineButton/demo.dart + - lib/widgets/elements/Form/Button/PopupMenuButton/demo.dart + - lib/widgets/elements/Form/Button/RaisedButton/demo.dart + - lib/widgets/elements/Form/Button/RawMaterialButton/demo.dart + - lib/widgets/elements/Form/CheckBox/Checkbox/demo.dart + - lib/widgets/elements/Form/CheckBox/CheckboxListTile/demo.dart + - lib/widgets/elements/Form/Radio/Radio/demo.dart + - lib/widgets/elements/Form/Radio/RadioListTile/demo.dart + - lib/widgets/elements/Form/Slider/Slider/demo.dart + - lib/widgets/elements/Form/Slider/SliderTheme/demo.dart + - lib/widgets/elements/Form/Slider/SliderThemeData/demo.dart + - lib/widgets/elements/Form/Switch/AnimatedSwitcher/demo.dart + - lib/widgets/elements/Form/Switch/Switch/demo.dart + - lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart + - lib/widgets/elements/Frame/Align/Align/demo.dart + - lib/widgets/elements/Frame/Box/ConstrainedBox/demo.dart + - lib/widgets/elements/Frame/Box/DecoratedBox/demo.dart + - 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/RotatedBox/demo.dart + - lib/widgets/elements/Frame/Box/SizeBox/demo.dart + - lib/widgets/elements/Frame/Box/SizedOverflowBox/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 + - lib/widgets/elements/Frame/Layout/Column/demo.dart + - lib/widgets/elements/Frame/Layout/Container/demo.dart + - lib/widgets/elements/Frame/Layout/Row/demo.dart + - lib/widgets/elements/Frame/Spacing/AnimatedPadding/animatedPadding_demo.dart + - lib/widgets/elements/Frame/Spacing/Padding/padding_demo.dart + - lib/widgets/elements/Frame/Spacing/SliverPadding/sliverpadding_demo.dart + - lib/widgets/elements/Frame/Stack/IndexedStack/demo.dart + - lib/widgets/elements/Frame/Stack/Stack/demo.dart + - lib/widgets/elements/Frame/Table/Table/table_demo.dart + - lib/widgets/elements/Media/Icon/Icon/demo.dart + - lib/widgets/elements/Media/Icon/IconData/demo.dart + - lib/widgets/elements/Media/Icon/IconTheme/demo.dart + - lib/widgets/elements/Media/Icon/IconThemeData/demo.dart + - lib/widgets/elements/Media/Icon/ImageIcon/demo.dart + - lib/widgets/elements/Media/Image/AssetImage/assetImage_demo.dart + - lib/widgets/elements/Media/Image/DecorationImage/decorationImage_demo.dart + - lib/widgets/elements/Media/Image/DecorationImagePainter/decoration_image_painter_demo.dart + - lib/widgets/elements/Media/Image/ExactAssetImage/exact_asset_image_demo.dart + - lib/widgets/elements/Media/Image/FadeInImage/fade_in_image_demo.dart + - lib/widgets/elements/Media/Image/FileImage/file_image_demo.dart + - lib/widgets/elements/Media/Image/Image/demo.dart + - lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart + - lib/widgets/elements/Media/Image/NetworkImage/network_image_demo.dart + - 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 + - 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/CupertinoSegmentedControl/demo.dart + - lib/widgets/elements/Form/Switch/Switch/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/ + fonts: + - family: FlamanteRoma + fonts: + - asset: assets/fonts/Flamante-Roma-Medium.ttf + - asset: assets/fonts/Flamante-Roma-MediumItalic.ttf + - family: LatoBold + fonts: + - asset: assets/fonts/Lato-Bold.ttf # To add assets to your application, add an assets section, like this: # assets: # - images/a_dot_burr.jpeg diff --git a/tools/getPR.sh b/tools/getPR.sh new file mode 100644 index 00000000..c9e86974 --- /dev/null +++ b/tools/getPR.sh @@ -0,0 +1,18 @@ + +#!/bin/bash + +# pr 日志生成器,自动 pr 工具抓取器,抓取两周前至今的,提交数据,并去重。 +# 生成一个 http 页面,打印成 markdown 格式 +# run $ bash tools/getPR.sh + +# git log --pretty="%h - %s - %ad" --author=ryan --since=2.weeks --no-merges > tools/log.txt + +logs=`git log --date=iso --since=2.weeks --no-merges --pretty=format:'{"commit": "-%h","author": "%aN <%aE>","date": "%ad","message": "%s"},'` + +log1=${logs} + +# echo ${log1%*,} + +echo '{"pr_req":['${log1%*,}']}' > tools/log.json + +node ./tools/parsLog.js \ No newline at end of file diff --git a/tools/parsLog.js b/tools/parsLog.js new file mode 100644 index 00000000..ab6108a8 --- /dev/null +++ b/tools/parsLog.js @@ -0,0 +1,70 @@ +var path = require('path'); //系统路径模块 +var fs = require('fs'); //文件模块 +var http = require('http'); +var child_process = require('child_process'); + +var file = path.join(__dirname, './log.json'); //文件路径,__dirname为当前运行js文件的目录 + //读取json文件 +fs.readFile(file, 'utf-8', function(err, data) { + if (err) { + res.send('文件读取失败'); + } else { + // res.send(data); + if(data) { + const obj = JSON.parse(data); + const newObj ={}; + obj.pr_req.map((item,i)=>{ + const key = encodeURIComponent(item.message); + newObj[key] ={date: new Date(item.date).toLocaleDateString(),msg:item.message}; + }) + const newObjCategory = Object.values(newObj); + const categorys ={}; + newObjCategory.map((item)=>{ + if(!categorys[item.date]) { + categorys[item.date] =[]; + }else { + categorys[item.date].push(item.msg); + } + }) + //console.log('----------->',categorys); + rendHtml(categorys); + } + + } +}); + + +function rendHtml(categorys){ + http.createServer(function (req, res) { + var html = buildHtml(categorys); + res.writeHead(200, { + 'Content-Type': 'text/html;charset=utf-8', + //'Content-Length': html.length, + 'Expires': new Date().toUTCString() + }); + + res.end(html); + }).listen(8889,"127.0.0.1"); + + console.log("Server running at http://127.0.0.1:8889/"); + child_process.exec(`start "http://127.0.0.1:8080"`); + + function buildHtml(obj) { + var header = ''; + var body = ''; + var content = ''; + for(var i in obj) { + let liContent = `
    #### ${i}`; + const list = obj[i]; + list.map((it,index)=>{ + liContent += `
  •   - [x] ${it}
  • ` + }) + liContent += `
`; + + content += liContent; + } + // console.log('content===>',content) + return '' + + '
' + header + '
' + content + ''; + }; +} \ No newline at end of file