merge master

This commit is contained in:
xiaojia.dxj
2019-09-19 11:42:16 +08:00
27 changed files with 836 additions and 240 deletions

19
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,19 @@
#### What does this PR do?
[TrelloCard/Issue/Story](LINK_TO_STORY)
##### Why are we doing this? Any context or related work?
#### Where should a reviewer start?
#### Manual testing steps?
#### Screenshots
---
#### Database changes
#### Deployment instructions
#### New ENV variables

View File

@ -0,0 +1,19 @@
#### What does this PR do?
[TrelloCard/Issue/Story](LINK_TO_STORY)
##### Why are we doing this? Any context or related work?
#### Where should a reviewer start?
#### Manual testing steps?
#### Screenshots
---
#### Database changes
#### Deployment instructions
#### New ENV variables

View File

@ -1,86 +1,358 @@
## 更新日志
#### 8/28/2019
- [x] Modify: IsOpen 的移步判断
- [x] Update index.md
- [x] Update index.dart
#### 5/28/2019
- [x] change:async master
- [x] modfiy:应用商店
- [x] Merge pull request #222 from DeckeDeng/develop
- [x] add home scaffold
#### 8/22/2019
- [x] Merge pull request #322 from alibaba/beta
- [x] Modify: web view 方法回退
- [x] Merge pull request #321 from alibaba/beta
- [x] Merge pull request #317 from alibaba/beta
- [x] Merge branch 'master' into beta
- [x] Update contribute.md
#### 8/12/2019
- [x] update: doc & tpl
- [x] Update tpl.md
- [x] Merge pull request #313 from Nealyang/beta
- [x] 添加登陆错误提醒
#### 3/11/2019
- [x] Update README-en.md
#### 8/15/2019
- [x] update: router path
- [x] ci
- [x] update: view remote code
- [x] 整理文件
#### 8/13/2019
- [x] Modify
- [x] Modfiy:
- [x] update: page issue template
#### 8/1/2019
- [x] merge code
#### 7/29/2019
- [x] Merge branch 'master' of github.com:alibaba/flutter-go into beta
- [x] delete .github no use file
- [x] docs(update: pr template):
- [x] del: no use file
- [x] Merge branch 'master' of github.com:alibaba/flutter-go
- [x] docs(add widget about issue):
- [x] Merge branch 'temp' into beta
- [x] 迁移位置
- [x] update: template
- [x] update: 处理合并导致的总理2
#### 8/7/2019
- [x] fix bug
- [x] Merge pull request #302 from Nealyang/beta
- [x] remove get collection
- [x] tep
- [x] update: 完成markdown动态更新
#### 8/8/2019
- [x] remove user appBar
- [x] bottomBar 添加个人中心
- [x] Merge pull request #309 from DeckeDeng/beta2
- [x] ios project.pbxproj
- [x] Merge pull request #308 from DeckeDeng/beta2
- [x] Merge pull request #304 from Nealyang/beta
- [x] 修改 ios 配置文件
- [x] update: 临时增加code-review页
#### 6/28/2019
- [x] Merge pull request #264 from DeckeDeng/beta2
- [x] Merge pull request #263 from DeckeDeng/beta2
- [x] Merge branch 'beta' into beta2
- [x] 消息反馈页面
#### 2/1/2019
- [x] Merge branch 'develop' of https://github.com/alibaba/flutter-go into develop
- [x] feat:android splash
- [x] feat:add android splash
- [x] Merge pull request #116 from hanxu317317/develop
- [x] docs(更新Readme中环境信息):
- [x] Merge pull request #115 from hanxu317317/develop
- [x] feat(首页欢迎图, 加入第一次访问判断.):
- [x] Merge branch 'develop' into sptil
- [x] update: ios启动图描述
- [x] fix:yaml
- [x] fix:
- [x] Merge pull request #113 from hanxu317317/develop
- [x] fix:mtl buidl apk test
- [x] refactor(conflict):
- [x] add sp
- [x] fix(解决由于flutter 版本问题导致的报错):
- [x] fix:back
- [x] fix:package err
- [x] fix:modify github package name fail and test
- [x] fix:build before modify package's name
#### 7/12/2019
- [x] Merge pull request #279 from Nealyang/beta
- [x] add
- [x] d
#### 8/6/2019
- [x] issuse message
- [x] Merge pull request #294 from Nealyang/beta
- [x] 修改为线上地址
- [x] 个人中心、收藏、搜索
#### 7/25/2019
- [x] Merge branch 'beta' of github.com:alibaba/flutter-go
#### 7/23/2019
- [x] zefyr
#### 7/22/2019
- [x] feature:个人设置
#### 7/15/2019
- [x] appstore 反馈错误
- [x] readme错误
- [x] 标题错误,跳转错误
#### 7/11/2019
- [x] update: 迁移新老数据结构与收藏
- [x] update: 增加环境配置. 挂载在application静态属性上
- [x] update: 修改文章
#### 4/8/2019
- [x] flutter project switch ios or android by androidstudio
- [x] android permission
- [x] remove extra files
#### 6/18/2019
- [x] 推送ios/android,test
#### 6/15/2019
- [x] 删除node相关
- [x] Merge branch 'develop' of github.com:alibaba/flutter-common-widgets-app into web
- [x] update: 完善demo
- [x] update: 界面增加title属性
- [x] add: cli使用说明
#### 6/11/2019
- [x] update: 替换markdown包引入方式
- [x] add: 加入标准page模板
- [x] 加入标准page
- [x] 加入初始化demo
- [x] 引入三方flutter_markdown gi
#### 6/10/2019
- [x] Merge pull request #249 from Nealyang/beta
- [x] 添加收藏功能
- [x] update: 标准化代码.
- [x] goCli 完成90%
#### 6/4/2019
- [x] markdown
- [x] 加入初始gocli
- [x] add page demo
- [x] 增加page的统一入口
- [x] add demos packges
- [x] Merge pull request #240 from Nealyang/beta
- [x] 退出登陆、feedback 测试
#### 5/31/2019
- [x] 添加个人中心
#### 5/30/2019
- [x] 首页不刷新
- [x] Merge pull request #1 from forever-713/zuston-patch-1
- [x] Fix App name error
#### 5/29/2019
- [x] 添加 github oAuth 认证,添加错误提醒
#### 5/23/2019
- [x] readme.md
- [x] Merge pull request #219 from weikx/develop
- [x] Merge pull request #215 from DeckeDeng/develop
- [x] delete firstPage
- [x] de
- [x] Test测试分支
- [x] Merge branch 'develop' of https://github.com/weikx/flutter-go into develop
- [x] Change word 'Free' into 'Three'
- [x] Chang word 'Free' into 'Three'
#### 5/17/2019
- [x] Merge pull request #216 from alibaba/master
#### 5/14/2019
- [x] update version
#### 2/3/2019
- [x] fix(解决ios报错):
- [x] Merge pull request #119 from Nealyang/master
- [x] fix:fix code conflic
- [x] fix: code conflict
- [x] Merge branch 'develop' into master
- [x] fix:view code
- [x] Merge pull request #118 from alibaba/dev/yisheng
#### 5/9/2019
- [x] test version
#### 5/7/2019
- [x] merge origin
- [x] add update test
- [x] Merge branch 'develop' of github.com:alibaba/flutter-go
- [x] cookie 校验
- [x] modify home.dart bottom tab
- [x] session 验证
- [x] merge develop
- [x] 登陆
- [x] Merge pull request #205 from alibaba/dev/sanl
- [x] modify bottom tab
- [x] delete ios file
- [x] add apk
- [x] Login 登陆界面
#### 5/6/2019
- [x] add login
#### 5/1/2019
- [x] Modfiy 改造业内资讯页面
#### 4/30/2019
- [x] Add:二期开发-重构首页布局
- [x] gradle 4.10.2 包添加AndroidX配置
#### 2/19/2019
- [x] packagename
- [x] Merge pull request #148 from alibaba/dev/yisheng
- [x] refactor:按照代码规范调整import 文件
- [x] update: 规范
- [x] Merge pull request #147 from Nealyang/master
- [x] fix:修复TabBar demo
- [x] Merge pull request #146 from Nealyang/master
- [x] refactor: 根据规范重构代码
- [x] Merge pull request #145 from alibaba/dev/yisheng
- [x] refactor:按照代码规范调整markdow解析
- [x] refactor(规范化代码):
- [x] Merge pull request #143 from Nealyang/master
- [x] refactor:按规范修改代码、注释等
- [x] Merge pull request #142 from Nealyang/master
- [x] commit
- [x] Merge pull request #141 from Nealyang/master
- [x] Merge pull request #140 from Nealyang/master
- [x] Merge pull request #135 from hanxu317317/develop
- [x] Merge branch 'develop' into develop
- [x] Merge pull request #139 from Nealyang/master
- [x] Merge branch 'develop' of github.com:alibaba/flutter-common-widgets-app
- [x] refactor:根据规范,重构代码
- [x] modify code comments
- [x] Merge pull request #138 from alibaba/dev/yisheng
- [x] refactor:按照代码规范调整注释文件
#### 4/29/2019
- [x] test app store
- [x] Merge branch 'master' into dev/sanl
- [x] 修改bug
#### 4/26/2019
- [x] Debug: GoogleService-Info.plist 位置问题 导致错误
- [x] change LICENSE date
- [x] 变更许可
- [x] Merge pull request #189 from alibaba/develop
- [x] change License
#### 4/22/2019
- [x] release apk
- [x] Merge pull request #192 from alibaba/dev/yisheng
- [x] 格式化
- [x] Merge pull request #191 from alibaba/dev/yisheng
- [x] Delete:删除 .gradle 文件夹
- [x] Merge pull request #188 from alibaba/dev/yisheng
#### 4/17/2019
- [x] gridView 网格效果 图片流
- [x] 添加渐变效果/网络图片覆盖图层渲染/图片填充
#### 1/31/2019
- [x] Merge pull request #112 from alibaba/dev/yisheng
- [x] Debug:canvas 路由问题
- [x] Merge pull request #111 from alibaba/dev/yisheng
- [x] feat: Canvas 细化各种方法
- [x] add file
- [x] fix:code
- [x] feat(加入启动图, 时间2秒):
#### 4/12/2019
- [x] update: 修改错字
- [x] Merge pull request #180 from alibaba/develop
- [x] add: doc roadmap
#### 4/1/2019
- [x] remove recruit
- [x] move recruit
#### 3/31/2019
- [x] 增加模板
- [x] Create pull_request_template.md
- [x] Delete .github
- [x] Create .github
- [x] Merge pull request #173 from alibaba/master
#### 2/2/2019
- [x] fix: 部分代码添加 mounted
- [x] Merge pull request #117 from alibaba/dev/yisheng
- [x] fix:修复Canvas组件收藏的bug
#### 2/20/2019
- [x] 同步文件
- [x] Merge pull request #152 from hanxu317317/develop
- [x] 更新跳转页方式
- [x] modify logo
- [x] Merge pull request #149 from hanxu317317/develop
- [x] fix(解决返回首页报错的问题):
#### 2/11/2019
- [x] fix: 部分代码 analysis 解决
#### 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 CupertinoPickerCupertinoPopupSurface CupertinoTimerPickerDemo
- [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 CupertinoPickerCupertinoPopupSurface CupertinoTimerPickerDemo
#### 2019-1-24
- [x] 功能:更新小部件的图标
- [x] 功能添加CupertinoTimerPickerDemo
- [x] 调试:消除警告
- [x] 修复:关于手册图标更换
- [x] 添加:文案描述
- [x] 添加CupertinoPickerCupertinoPopupSurface
- [x] 功能:更新小部件的图标
- [x] 功能添加CupertinoTimerPickerDemo
- [x] 调试:消除警告
- [x] 修复:关于手册图标更换
- [x] 添加:文案描述
- [x] 添加CupertinoPickerCupertinoPopupSurface
#### 2019-1-23
- [x] 修复: 导航栏home返回报错
- [x] 修复:收集错误
- [x] 添加CupertinoNavigationBar CupertinoPageRoute CupertinoPageScaffold
- [x] 修复: 导航栏home返回报错
- [x] 修复:收集错误
- [x] 添加CupertinoNavigationBar CupertinoPageRoute CupertinoPageScaffold
#### 2019-1-22
- [x] 功能在Allsimon拉请求中添加英文简介
- [x] 功能在Allsimon拉请求中添加英文简介
#### 2019-1-21
- [x] 功能Cupertino的子项
- [x] 功能Cupertino的子项
#### 2019-1-20
- [x] 功能CupertinoSwitch演示
- [x] 功能:为搜索列表加入图标
- [x] 功能CupertinoSliverRefreshControl演示
- [x] 功能CupertinoSliverNavigationBar演示
- [x] 功能CupertinoSwitch演示
- [x] 功能:为搜索列表加入图标
- [x] 功能CupertinoSliverRefreshControl演示
- [x] 功能CupertinoSliverNavigationBar演示
#### 2019-1-18
- [x] 更新SharedPreferences保存数据和android设备布局溢出
- [x] 功能添加CupertinoScrollbar演示
- [x] 功能:第四页暂时用欢迎页替代。后期再开发
- [x] 更新SharedPreferences保存数据和android设备布局溢出
- [x] 功能添加CupertinoScrollbar演示
- [x] 功能:第四页暂时用欢迎页替代。后期再开发
#### 2019-1-17
- [x] 添加:+许可证
- [x] 添加:+许可证
#### 2019-1-16
- [x] 转换将README翻译为En语言环境
- [x] 功能CupertinoScrollbar演示
- [x] 转换将README翻译为En语言环境
- [x] 功能CupertinoScrollbar演示
#### 2019-1-14
- [x] 添加:增加手册页面
- [x] 功能:文字演示
- [x] 重构:修改过的图标
- [x] 重构文档文章组件收藏新增webView
- [x] 重构:修改过的演示
- [x] 重构:代码视图
- [x] 更新:版本 和readme.md
- [x] 修改:添加代码视图
- [x] 功能:添加搜索历史记录板
- [x] 修改:列出加标头错误
- [x] 添加:增加手册页面
- [x] 功能:文字演示
- [x] 重构:修改过的图标
- [x] 重构文档文章组件收藏新增webView
- [x] 重构:修改过的演示
- [x] 重构:代码视图
- [x] 更新:版本 和readme.md
- [x] 修改:添加代码视图
- [x] 功能:添加搜索历史记录板
- [x] 修改:列出加标头错误
#### 2019-1-15
- [x] 功能welcomepage
- [x] 功能welcomepage
#### 2019-1-13
- [x] 添加:一些输入描述
- [x] 功能加入GridPaperSliverGrid
- [x] 重构修改db
- [x] 重构:删除数据库 TabBarView
- [x] 添加:网格视图
- [x] 修改checkbosListTile 错误
- [x] 修改:自动提示文案
- [x] 功能:增加免责声明,声明组件,自动弹出,左上角入口
- [x] 重构整理数据库初始逻辑判断数据库完整性判断是否存在已知的catwidgetcollection 三张表。
- [x] 修复DialogDemo无法关闭的问题
- [x] 添加:一些输入描述
- [x] 功能加入GridPaperSliverGrid
- [x] 重构修改db
- [x] 重构:删除数据库 TabBarView
- [x] 添加:网格视图
- [x] 修改checkbosListTile 错误
- [x] 修改:自动提示文案
- [x] 功能:增加免责声明,声明组件,自动弹出,左上角入口
- [x] 重构整理数据库初始逻辑判断数据库完整性判断是否存在已知的catwidgetcollection 三张表。
- [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警告
- [x] 修复icon没有但内容有的组件给补充了icon
- [x] 修改1.整理文件 2.修正分析
- [x] 更新flutter_rookie_book => flutter_go
- [x] 更新更新SearchInput文件名=> search_input
- [x] 修改:文件名称的大小写规范
- [x] 修改修正bottomNavigationBar iconButton警告

76
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at zhu.yan@alibaba-inc.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq

1
CONTRIBUTING.md Normal file
View File

@ -0,0 +1 @@
[Flutter Go 共建](https://github.com/alibaba/flutter-go/blob/master/docs/contribute.md)

View File

@ -80,8 +80,8 @@ Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en.
### android正式版下载地址:
- 华为市场已上线,华为应用市场搜索 "Fluttergo"或者直接[点击下载](https://appstore.huawei.com/search/fluttergo)
- [直接 apk 文件下载](https://github.com/alibaba/flutter-go/releases/download/0.0.5/app-release.apk)
<img src="https://img.alicdn.com/tfs/TB1LbEYarys3KVjSZFnXXXFzpXa-378-380.jpg" width=200>
- [直接 apk 文件下载](https://github.com/alibaba/flutter-go/blob/master/android/app/release/app-release.apk)
### iphone正式版下载地址:

View File

@ -9,7 +9,6 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
const disclaimerText1 =
'\r\r\r\r\r\r本APP属于个人的非赢利性开源项目以供开源社区使用凡本APP转载的所有的文章 、图片、音频、视频文件等资料的版权归版权所有人所有本APP采用的非本站原创文章及图片等内容无法一一和版权者联系如果本网所选内容的文章作者及编辑认为其作品不宜上网供大家浏览或不应无偿使用请及时用电子邮件或电话通知我们以迅速采取适当措施避免给双方造成不必要的经济损失。';
const disclaimerText2 =
@ -23,6 +22,7 @@ class DisclaimerMsg extends StatefulWidget {
DisclaimerMsgState createState() => DisclaimerMsgState();
}
class DisclaimerMsgState extends State<DisclaimerMsg> {
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
Future<bool> _unKnow;
@ -33,11 +33,14 @@ class DisclaimerMsgState extends State<DisclaimerMsg> {
void refs(bool value) async {
final SharedPreferences prefs = await _prefs;
final bool unKnow = value;
_valBool = value;
_readed = value;
if (mounted) {
setState(() {
_unKnow = prefs.setBool("disclaimer::Boolean", unKnow).then((bool success) {
return unKnow;
});
_unKnow =
prefs.setBool("disclaimer::Boolean", unKnow).then((bool success) {
return unKnow;
});
});
}
}
@ -60,110 +63,14 @@ class DisclaimerMsgState extends State<DisclaimerMsg> {
context: context,
barrierDismissible: false, // user must tap button!
builder: (BuildContext context) {
return AlertDialog(
//title: Text('免责声明'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
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: <Widget>[
new Container(
width: 250,
child: _create(),
)
],
);
return DisclaimerMsgDialog(_valBool, _readed, (b){
refs(b);
});
},
);
}
Row _create() {
//已读
if (_readed) {
return Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
FlatButton(
padding: EdgeInsets.symmetric(horizontal: 20.0),
child: Text('已阅读知晓',
style: TextStyle(fontSize: 16, color: Colors.white)),
//可点击
color: Theme.of(context).primaryColor,
onPressed: () {
Navigator.of(context).pop();
},
),
SizedBox(
width: 10.0,
)
],
);
}
//第一次读取
return Row(mainAxisAlignment: MainAxisAlignment.spaceAround,
//crossAxisAlignment:CrossAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
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(
@ -178,7 +85,7 @@ class DisclaimerMsgState extends State<DisclaimerMsg> {
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.horizontal(right: Radius.circular(10)),
BorderRadius.horizontal(right: Radius.circular(10)),
color: Colors.black45,
),
child: Text(
@ -194,3 +101,150 @@ class DisclaimerMsgState extends State<DisclaimerMsg> {
));
}
}
class DisclaimerMsgDialog extends StatefulWidget {
final bool valBool;
final bool readed;
final ValueChanged<bool> onValueChanged;
DisclaimerMsgDialog(this.valBool, this.readed, this.onValueChanged);
@override
_DisclaimerMsgDialogState createState() => _DisclaimerMsgDialogState();
}
class _DisclaimerMsgDialogState extends State<DisclaimerMsgDialog> {
bool readBool;
@override
void initState() {
super.initState();
readBool = widget.valBool;
}
Row _create() {
//已读
if (widget.readed) {
return Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
FlatButton(
padding: EdgeInsets.symmetric(horizontal: 20.0),
child: Text('已阅读知晓',
style: TextStyle(fontSize: 16, color: Colors.white)),
//可点击
color: Theme
.of(context)
.primaryColor,
onPressed: () {
Navigator.of(context).pop();
},
),
SizedBox(
width: 10.0,
)
],
);
}
/// 选中状态更新,并返回数据
checkChanged(){
if (mounted) {
setState(() {
readBool = !readBool;
});
}
}
//第一次读取
return Row(mainAxisAlignment: MainAxisAlignment.spaceAround,
//crossAxisAlignment:CrossAxisAlignment.start,
children: <Widget>[
GestureDetector(
onTap: (){
checkChanged();
},
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Checkbox(
activeColor: Theme
.of(context)
.primaryColor,
tristate: false,
value: readBool,
onChanged: (bool bol) {
checkChanged();
}),
Text('不再自动提示', style: TextStyle(fontSize: 14)),
],
),
),
FlatButton(
child: Text('知道了',
style: TextStyle(fontSize: 16, color: Colors.white)),
//可点击
color: readBool
? Theme
.of(context)
.primaryColor
: Theme
.of(context)
.primaryColor
.withAlpha(800),
onPressed: () {
widget.onValueChanged(readBool);
Navigator.of(context).pop();
},
),
]);
}
@override
Widget build(BuildContext context) {
return AlertDialog(
//title: Text('免责声明'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
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: <Widget>[
new Container(
width: 250,
child: _create(),
)
],
);
}}

View File

@ -15,13 +15,9 @@ typedef void OnSubmit(String value);
///搜索结果内容显示面板
class MaterialSearchResult<T> extends StatelessWidget {
const MaterialSearchResult({
Key key,
this.value,
this.text,
this.icon,
this.onTap
}) : super(key: key);
const MaterialSearchResult(
{Key key, this.value, this.text, this.icon, this.onTap})
: super(key: key);
final String value;
final VoidCallback onTap;
@ -30,7 +26,6 @@ class MaterialSearchResult<T> extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new InkWell(
onTap: this.onTap,
child: new Container(
@ -38,8 +33,14 @@ class MaterialSearchResult<T> extends StatelessWidget {
padding: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 10.0),
child: new Row(
children: <Widget>[
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 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)
],
),
@ -124,6 +125,7 @@ class _MaterialSearchState<T> extends State<MaterialSearch> {
}
Timer _resultsTimer;
Future _getResultsDebounced() async {
if (_results.length == 0) {
setState(() {
@ -164,6 +166,7 @@ class _MaterialSearchState<T> extends State<MaterialSearch> {
super.dispose();
_resultsTimer?.cancel();
}
Widget buildBody(List results) {
if (_criteria.isEmpty) {
return History();
@ -171,16 +174,11 @@ class _MaterialSearchState<T> extends State<MaterialSearch> {
return new Center(
child: new Padding(
padding: const EdgeInsets.only(top: 50.0),
child: new CircularProgressIndicator()
)
);
child: new CircularProgressIndicator()));
}
if (results.isNotEmpty) {
var content = new SingleChildScrollView(
child: new Column(
children: results
)
);
var content =
new SingleChildScrollView(child: new Column(children: results));
return content;
}
return Center(child: Text("暂无数据"));
@ -241,7 +239,7 @@ class _MaterialSearchState<T> extends State<MaterialSearch> {
],
),
body: buildBody(results),
);
);
}
}
@ -405,34 +403,35 @@ class SearchInput extends StatelessWidget {
}
// wigdet干掉.=> componets
class History extends StatefulWidget {
const History() : super();
@override
_History createState() => _History();
_History createState() => _History();
}
// AppBar 默认的实例,有状态
class _History extends State<History> {
SearchHistoryList searchHistoryList = new SearchHistoryList();
bool refreshFlag;
@override
void initState() {
super.initState();
this.refreshFlag = true;
}
@override
void dispose() {
super.dispose();
}
buildChips(BuildContext context) {
List<Widget> list = [];
List<SearchHistory> historyList = searchHistoryList.getList();
print("historyList> $historyList");
Color bgColor = Theme.of(context).primaryColor;
historyList.forEach((SearchHistory value) {
Widget icon = CircleAvatar(
backgroundColor: bgColor,
child: Text(
@ -445,20 +444,28 @@ class _History extends State<History> {
}
String targetRouter = value.targetRouter;
list.add(
InkWell(
onTap: () {
Application.router.navigateTo(context, "${targetRouter.toLowerCase()}", transition: TransitionType.inFromRight);
},
child: Chip(
avatar: icon,
label: Text("${value.name}"),
),
)
);
list.add(InkWell(
onTap: () {
Application.router.navigateTo(
context, "${targetRouter.toLowerCase()}",
transition: TransitionType.inFromRight);
},
child: Chip(
avatar: icon,
label: Text("${value.name}"),
),
));
});
return list;
}
_clearHistory() {
searchHistoryList.clear();
this.setState(() {
this.refreshFlag = !this.refreshFlag;
});
}
@override
Widget build(BuildContext context) {
List<Widget> childList = buildChips(context);
@ -470,25 +477,38 @@ class _History extends State<History> {
return Column(
children: <Widget>[
Container(
alignment: Alignment.centerLeft,
padding: EdgeInsets.fromLTRB(12.0, 12, 12, 0),
child: InkWell(
onLongPress: () {
searchHistoryList.clear();
},
child: Text('历史搜索'),
),
),
alignment: Alignment.centerLeft,
padding: EdgeInsets.fromLTRB(12.0, 12, 12, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
InkWell(
onLongPress: () {
searchHistoryList.clear();
},
child: Text('历史搜索'),
),
GestureDetector(
onTap: _clearHistory,
child: Container(
child: new Icon(Icons.delete,
size: 24.0, color: Theme.of(context).accentColor),
width: 30,
height: 30,
),
)
],
)),
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
),
spacing: 6.0, // gap between adjacent chips
runSpacing: 0.0, // gap between lines
children: childList),
)
],
);
}
}
}

View File

@ -185,7 +185,7 @@ class _WidgetDemoState extends State<WidgetDemo> {
new IconButton(
tooltip: 'goBack home',
onPressed: () {
Navigator.popUntil(context, ModalRoute.withName('/'));
Navigator.popUntil(context, ModalRoute.withName(Routes.root));
},
icon: Icon(Icons.home),
),

View File

@ -203,6 +203,7 @@ void _startupJpush() async {
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final provider = new Provider();
await provider.init(true);
sp = await SpUtil.getInstance();

View File

@ -73,7 +73,7 @@ class SearchHistoryList {
}
add(SearchHistory item) {
print("_searchHistoryList> ${_searchHistoryList.length}");
print("add item to serach history ${item.targetRouter}");
for (SearchHistory value in _searchHistoryList) {
if (value.name == item.name) {
return;

View File

@ -1 +1 @@
[{"name":"demoName","screenShot":"","author":"yourName","email":"yourEmail","desc":"这是一个测试的标准demo","id":"1a29aa8e_32ae_4241_9c8a_5c9e1f92b096"},{"name":"local","screenShot":"","author":"ab","email":"email","desc":"ags","id":"2c1d57d0_42ae_4241_9c8a_5c9e1f92b096"}]
[{"name":"RangeSlider","screenShot":"","author":"RangeSlider","email":"hanxu317@qq.com","desc":"RangeSlider widget demo","id":"e5f958bc_52ae_4241_9c8a_5c9e1f92b096"},{"name":"demoName","screenShot":"","author":"yourName","email":"yourEmail","desc":"这是一个测试的标准demo","id":"1a29aa8e_32ae_4241_9c8a_5c9e1f92b096"},{"name":"local","screenShot":"","author":"ab","email":"email","desc":"ags","id":"2c1d57d0_42ae_4241_9c8a_5c9e1f92b096"}]

View File

@ -0,0 +1,8 @@
{
"name": "RangeSlider",
"screenShot": "",
"author":"RangeSlider",
"email": "hanxu317@qq.com",
"desc": "RangeSlider widget demo",
"id": "e5f958bc_52ae_4241_9c8a_5c9e1f92b096"
}

View File

@ -0,0 +1,15 @@
//
// Created with flutter go cli
// User: RangeSlider
// Time: 2019-09-12 15:11:05.512158
// email: hanxu317@qq.com
// desc: RangeSlider widget demo
//
import 'src/index.dart';
var demoWidgets = [
new Demo()
];

View File

@ -0,0 +1,30 @@
import 'package:flutter/material.dart';
class Demo extends StatefulWidget {
@override
_State createState() => _State();
}
class _State extends State<Demo> {
RangeValues valuess = RangeValues(20.0, 50.0);
@override
Widget build(BuildContext context) {
return RangeSlider(
values: valuess,
//实际进度的位置
inactiveColor: Colors.black12,
//进度中不活动部分的颜色
labels: RangeLabels('12', '23'),
min: 0.0,
max: 100.0,
divisions: 1000,
activeColor: Colors.blue,
//进度中活动部分的颜色
onChanged: (rangeValues) {
setState(() {
valuess = rangeValues;
});
},
);
}
}

View File

@ -1,6 +1,8 @@
import 'RangeSlider_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardDemo_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096;
import 'demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardDemo_demoName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096;
import 'local_ab_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardDemo_local_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096;
var demoObjects = {
'e5f958bc_52ae_4241_9c8a_5c9e1f92b096': StandardDemo_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096.demoWidgets,
'1a29aa8e_32ae_4241_9c8a_5c9e1f92b096': StandardDemo_demoName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096.demoWidgets,
'2c1d57d0_42ae_4241_9c8a_5c9e1f92b096': StandardDemo_local_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096.demoWidgets
};

View File

@ -1 +1 @@
[{"name":"local","screenShot":"","author":"hnaxu","title":"本地","email":"hanxu@qq.com","desc":"desc","id":"5d7178d0_42ae_4241_9c8a_5c9e1f92b096"},{"name":"test","screenShot":"","author":"abc","title":"ya","email":"adsf.com","desc":"desc","id":"84f38e00_42ae_4241_9c8a_5c9e1f92b096"},{"name":"standard","screenShot":"","author":"sanfan","title":"介绍页","email":"hanxu317@qq.com","desc":"desc","id":"ee4feb8e_32ae_4241_9c8a_5c9e1f92b096"},{"name":"standard_for_slider","screenShot":"","author":"sanfan","title":"slider组件","email":"hanxu@qq.com","desc":"slider, new Slider","id":"8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096"}]
[{"name":"local","screenShot":"","author":"hnaxu","title":"本地","email":"hanxu@qq.com","desc":"desc","id":"5d7178d0_42ae_4241_9c8a_5c9e1f92b096"},{"name":"test","screenShot":"","author":"abc","title":"ya","email":"adsf.com","desc":"desc","id":"84f38e00_42ae_4241_9c8a_5c9e1f92b096"},{"name":"standard","screenShot":"","author":"sanfan","title":"介绍页","email":"hanxu317@qq.com","desc":"desc","id":"ee4feb8e_32ae_4241_9c8a_5c9e1f92b096"},{"name":"standard_for_slider","screenShot":"","author":"sanfan","title":"slider组件","email":"hanxu@qq.com","desc":"slider, new Slider","id":"8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096"},{"name":"RangeSlider","screenShot":"","author":"hanxu","title":"RangeSlider","email":"hanxu317@qq.com","desc":"RangeSlider widget","id":"cbffbf7c_52ae_4241_9c8a_5c9e1f92b096"}]

View File

@ -0,0 +1,10 @@
{
"name": "RangeSlider",
"screenShot": "",
"author":"hanxu",
"title":"RangeSlider",
"email": "hanxu317@qq.com",
"desc": "RangeSlider widget",
"id": "cbffbf7c_52ae_4241_9c8a_5c9e1f92b096"
}

View File

@ -0,0 +1,36 @@
String getMd() {
return """
# RangeSlider
> 用来选择范围性的数据
slider 用来选择连续性的或者非连续性的数据. 默认是在一段最大值最小值间做任意值的选择. 如果你想选择间隔性的值, 例如0.0到50.0间,选择10, 15,...50.0这样的值, 给divisions设定一个非空的整数5,, 去分割区间范围.
### **基本用法**
关于slider有以下的术语:
* **thumb** 滑块 用户可以水平拖拽移动的区域
* **track** 滑轨 thumb 可以滑动的线条区域
* **value indicator** 值指示器 当用户拖拽thumb的时候. 显示用户当前所选的属性值
* **active** 选中区
* **inactive** 非选中区
如果**onChanged**属性为空或者**min** .. **max**给出的范围 为空例如如果min等于max则将禁用滑块。
滑块小部件本身不保持任何状态State。相反当滑块状态发生变化时窗口小部件会调用 **onChanged** 回调。大多数使用滑块的小部件将侦听 **onChanged** 回调并使用新值重建滑块以更新滑块的视觉外观。要知道值何时开始更改,或何时更改,请设置可选回调**onChangeStart**或**onChangeEnd**。
默认情况下滑块将尽可能宽垂直居中。当给定无限制约束时它将尝试使轨道宽144像素每边有边距并垂直收缩。
### 实例展示
[demo:e5f958bc_52ae_4241_9c8a_5c9e1f92b096]""";
}

View File

@ -0,0 +1,30 @@
# RangeSlider
> 用来选择范围性的数据
slider 用来选择连续性的或者非连续性的数据. 默认是在一段最大值最小值间做任意值的选择. 如果你想选择间隔性的值, 例如0.0到50.0间,选择10, 15,...50.0这样的值, 给divisions设定一个非空的整数5,, 去分割区间范围.
### **基本用法**
关于slider有以下的术语:
* **thumb** 滑块 用户可以水平拖拽移动的区域
* **track** 滑轨 thumb 可以滑动的线条区域
* **value indicator** 值指示器 当用户拖拽thumb的时候. 显示用户当前所选的属性值
* **active** 选中区
* **inactive** 非选中区
如果**onChanged**属性为空或者**min** .. **max**给出的范围 为空例如如果min等于max则将禁用滑块。
滑块小部件本身不保持任何状态State。相反当滑块状态发生变化时窗口小部件会调用 **onChanged** 回调。大多数使用滑块的小部件将侦听 **onChanged** 回调并使用新值重建滑块以更新滑块的视觉外观。要知道值何时开始更改,或何时更改,请设置可选回调**onChangeStart**或**onChangeEnd**。
默认情况下滑块将尽可能宽垂直居中。当给定无限制约束时它将尝试使轨道宽144像素每边有边距并垂直收缩。
### 实例展示
[demo:e5f958bc_52ae_4241_9c8a_5c9e1f92b096]

View File

@ -3,6 +3,7 @@ import 'local_hnaxu_5d7178d0_42ae_4241_9c8a_5c9e1f92b096/index.dart' as Standard
import 'test_abc_84f38e00_42ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardPage_test_84f38e00_42ae_4241_9c8a_5c9e1f92b096;
import 'standard_sanfan_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardPage_standard_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096;
import 'standard_for_slider_sanfan_8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardPage_standard_for_slider_8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096;
import 'RangeSlider_hanxu_cbffbf7c_52ae_4241_9c8a_5c9e1f92b096/index.dart' as StandardPage_RangeSlider_cbffbf7c_52ae_4241_9c8a_5c9e1f92b096;
class StandardPages {
Map<String, String> standardPages;
Map<String, String> getPages() {
@ -15,6 +16,8 @@ class StandardPages {
"ee4feb8e_32ae_4241_9c8a_5c9e1f92b096" : StandardPage_standard_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096.getMd()
,
"8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096" : StandardPage_standard_for_slider_8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096.getMd()
,
"cbffbf7c_52ae_4241_9c8a_5c9e1f92b096" : StandardPage_RangeSlider_cbffbf7c_52ae_4241_9c8a_5c9e1f92b096.getMd()
};
}
List<Map<String, String>> getLocalList() {
@ -27,6 +30,8 @@ class StandardPages {
{ "id": "ee4feb8e_32ae_4241_9c8a_5c9e1f92b096", "name": "standard", "email": "hanxu317@qq.com", "author": "sanfan"}
,
{ "id": "8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096", "name": "standard_for_slider", "email": "hanxu@qq.com", "author": "sanfan"}
,
{ "id": "cbffbf7c_52ae_4241_9c8a_5c9e1f92b096", "name": "RangeSlider", "email": "hanxu317@qq.com", "author": "hanxu"}
];
}

View File

@ -1,5 +1,4 @@
# 标准的详情页
# 标准的详情页 this is test
您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件
您可以通过goCli创建详情页所需要的demo
@ -45,4 +44,4 @@ goCLi createDemo
```
[demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
```
```

View File

@ -1,4 +1,4 @@
# 标准的详情页
# 标准的详情页 this is title
您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件
@ -47,4 +47,4 @@ goCLi createDemo
```
[demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]
```
```

View File

@ -25,6 +25,8 @@ import 'package:flutter_go/model/search_history.dart';
import 'package:flutter_go/resources/widget_name_to_icon.dart';
import 'package:flutter_go/model/user_info.dart';
class AppPage extends StatefulWidget {
final UserInformation userInfo;
@ -96,10 +98,10 @@ class _MyHomePageState extends State<AppPage>
void onWidgetTap(WidgetPoint widgetPoint, BuildContext context) {
String targetName = widgetPoint.name;
searchHistoryList.add(
SearchHistory(name: targetName, targetRouter: widgetPoint.routerName));
print("searchHistoryList1 ${searchHistoryList.toString()}");
String targetRouter = widgetPoint.routerName;
searchHistoryList.add(
SearchHistory(name: targetName, targetRouter: targetRouter));
print("searchHistoryList1 ${searchHistoryList.toString()}");
Application.router.navigateTo(context, targetRouter.toLowerCase(),
transition: TransitionType.inFromRight);
}

View File

@ -387,10 +387,7 @@ class _LoginPageState extends State<LoginPage> {
decoration: TextDecoration.underline),
),
onPressed: () {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (context) => AppPage(UserInformation(id: 0))),
(route) => route == null);
Application.router.navigateTo(context, Routes.home, clearStack: true);
},
)
],

View File

@ -19,7 +19,7 @@ import 'package:flutter_go/routers/routers.dart';
import 'package:flutter_go/utils/net_utils.dart';
import 'package:flutter_go/components/loading.dart';
const githubHost = 'https://raw.githubusercontent.com/alibaba/flutter-go/beta';
const githubHost = 'https://raw.githubusercontent.com/alibaba/flutter-go/master';
const githubUrl = '$githubHost/lib/standard_pages/';
const PagesUrl = '$githubHost/lib/standard_pages/.pages.json';
const DemosUrl = '$githubHost/lib/page_demo_package/.demo.json';

View File

@ -34,7 +34,7 @@ const String _textFieldText2 = """### **进阶用法**
""";
class Demo extends StatefulWidget {
static const String routeName = 'elements/Form/Input/TextField';
static const String routeName = 'element/Form/Input/TextField';
@override
_DemoState createState() => _DemoState();