Merge branch 'develop' into dev/yisheng

# Conflicts:
#	lib/widgets/components/Bar/AppBar/index.dart
#	lib/widgets/components/Bar/BottomAppBar/demo.dart
#	lib/widgets/components/Bar/BottomAppBar/index.dart
#	lib/widgets/components/Bar/ButtonBar/index.dart
#	lib/widgets/components/Bar/FlexibleSpaceBar/index.dart
#	lib/widgets/components/Bar/SliverAppBar/index.dart
#	lib/widgets/components/Bar/SnackBar/index.dart
#	lib/widgets/components/Bar/SnackBarAction/index.dart
#	lib/widgets/components/Card/Card/index.dart
#	lib/widgets/components/LIst/ListBody/index.dart
#	lib/widgets/components/LIst/ListView/index.dart
#	lib/widgets/elements/Form/Button/DropdownButton/index.dart
#	lib/widgets/elements/Form/Button/FlatButton/index.dart
#	lib/widgets/elements/Form/Button/PopupMenuButton/index.dart
#	lib/widgets/elements/Form/CheckBox/Checkbox/index.dart
#	lib/widgets/elements/Form/CheckBox/CheckboxListTile/index.dart
#	lib/widgets/elements/Frame/Axis/crossAxis/index.dart
#	lib/widgets/elements/Frame/Axis/flipAxis/index.dart
#	lib/widgets/elements/Frame/Axis/mainAxis/index.dart
#	lib/widgets/elements/Media/Image/precacheImage/index.dart
This commit is contained in:
ryan730
2019-01-12 17:30:11 +08:00
130 changed files with 613 additions and 692 deletions

View File

@ -5,7 +5,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.1.2' classpath 'com.android.tools.build:gradle:3.2.0'
} }
} }

View File

@ -1,6 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017 #Thu Jan 10 15:37:36 CST 2019
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

BIN
assets/images/nothing.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -6,7 +6,6 @@
* email: zhu.yan@alibaba-inc.com * email: zhu.yan@alibaba-inc.com
* tartget: FlatButton 的示例 * tartget: FlatButton 的示例
*/ */
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@ -0,0 +1,53 @@
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
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);
void _launchURL(String url, BuildContext context) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
@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);
},
title: Padding(
child: Text(
itemTitle,
style: TextStyle(color: Colors.black, fontSize: 15.0),
),
padding: EdgeInsets.only(top: 10.0),
),
subtitle: Row(
children: <Widget>[
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),
),
);
}
}

View File

@ -1,55 +0,0 @@
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
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);
void _launchURL(String url,BuildContext context) async {
if (url.contains("https") || url.contains("http")) {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}else{
Navigator.of(context).pushNamed(url);
}
}
@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);
},
title: Padding(
child: Text(
itemTitle,
style: TextStyle(color: Colors.black, fontSize: 15.0),
),
padding: EdgeInsets.only(top: 10.0),
),
subtitle: Row(
children: <Widget>[
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)));
}
}

View File

@ -14,18 +14,21 @@ class Provider {
//Get a location using getDatabasesPath //Get a location using getDatabasesPath
String databasesPath = await getDatabasesPath(); String databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'flutter.db'); String path = join(databasesPath, 'flutter.db');
List<Map> list; List<Map> tables;
// try { try {
// db = await openDatabase(path, readOnly: true); db = await openDatabase(path);
tables = await db
.rawQuery('SELECT name FROM sqlite_master WHERE type = "table"');
print('${tables.length} 7891');
} catch (e) {
print("Error $e");
}
// } catch (e) { if (tables.length < 3) {
// print("Error $e");
// }
if (db == null) {
// Delete the database // Delete the database
await deleteDatabase(path); await deleteDatabase(path);
// 关闭上面打开的db否则无法执行open
db.close();
ByteData data = await rootBundle.load(join("assets", "app.db")); ByteData data = await rootBundle.load(join("assets", "app.db"));
List<int> bytes = List<int> bytes =
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);

View File

@ -69,7 +69,7 @@ class Sql extends BaseModel {
/// @mods [And, Or] default is Or /// @mods [And, Or] default is Or
/// search({'name': "hanxu', 'id': 1}; /// search({'name': "hanxu', 'id': 1};
/// ///
Future<List> search({Map<String, dynamic> conditions, String Mods = 'Or'}) async { Future<List> search({Map<String, dynamic> conditions, String mods = 'Or'}) async {
if (conditions == null || conditions.isEmpty) { if (conditions == null || conditions.isEmpty) {
return this.get(); return this.get();
} }
@ -88,7 +88,7 @@ class Sql extends BaseModel {
} }
if (index >= 0 && index < conditions.length -1) { if (index >= 0 && index < conditions.length -1) {
stringConditions = '$stringConditions $Mods'; stringConditions = '$stringConditions $mods';
} }
index++; index++;
}); });

View File

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import '../routers/application.dart';
class WidgetDemo extends StatelessWidget { class WidgetDemo extends StatelessWidget {
final Widget child; final Widget child;

View File

@ -10,6 +10,8 @@ import '../components/markdown.dart';
import '../model/collection.dart'; import '../model/collection.dart';
import '../widgets/index.dart'; import '../widgets/index.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import '../event/event-bus.dart';
import '../event/event-model.dart';
class WidgetDemo extends StatefulWidget { class WidgetDemo extends StatefulWidget {
final List<dynamic> contentList; final List<dynamic> contentList;
@ -34,7 +36,6 @@ class WidgetDemo extends StatefulWidget {
class _WidgetDemoState extends State<WidgetDemo> { class _WidgetDemoState extends State<WidgetDemo> {
bool _hasCollected = false; bool _hasCollected = false;
CollectionControlModel _collectionControl = new CollectionControlModel(); CollectionControlModel _collectionControl = new CollectionControlModel();
Collection _collection;
Color _collectionColor; Color _collectionColor;
List widgetDemosList = new WidgetDemoList().getDemos(); List widgetDemosList = new WidgetDemoList().getDemos();
String _router = ''; String _router = '';
@ -87,9 +88,11 @@ class _WidgetDemoState extends State<WidgetDemo> {
_router = item.routerName; _router = item.routerName;
} }
}); });
setState(() { if (this.mounted) {
_hasCollected = list.length > 0; setState(() {
}); _hasCollected = list.length > 0;
});
}
}); });
} }
@ -103,6 +106,11 @@ class _WidgetDemoState extends State<WidgetDemo> {
_hasCollected = false; _hasCollected = false;
}); });
showInSnackBar('已取消收藏'); showInSnackBar('已取消收藏');
if (ApplicationEvent.event != null) {
ApplicationEvent.event
.fire(CollectionEvent(widget.title, _router, true));
}
return; return;
} }
print('删除错误'); print('删除错误');
@ -116,12 +124,19 @@ class _WidgetDemoState extends State<WidgetDemo> {
setState(() { setState(() {
_hasCollected = true; _hasCollected = true;
}); });
if (ApplicationEvent.event != null) {
ApplicationEvent.event
.fire(CollectionEvent(widget.title, _router, false));
}
showInSnackBar('收藏成功'); showInSnackBar('收藏成功');
} }
}); });
} }
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (_hasCollected) { if (_hasCollected) {
@ -170,6 +185,7 @@ class _WidgetDemoState extends State<WidgetDemo> {
), ),
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: _getCollection, onPressed: _getCollection,
mini: true,
tooltip: '收藏', tooltip: '收藏',
child: Icon( child: Icon(
Icons.star, Icons.star,

View File

@ -1,10 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_rookie_book/views/Detail.dart'; import 'package:flutter_rookie_book/views/Detail.dart';
class CompList extends StatefulWidget { class CompList extends StatefulWidget {
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
// TODO: implement createState
return new ListState(); return new ListState();
} }
} }

View File

@ -7,14 +7,12 @@
* tartget: FlatButton 的示例 * tartget: FlatButton 的示例
*/ */
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'dart:math';
class ListRefresh extends StatefulWidget { class ListRefresh extends StatefulWidget {
final renderItem; final renderItem;
final requestApi; final requestApi;
const ListRefresh([this.requestApi,this.renderItem]) : super(); const ListRefresh([this.requestApi, this.renderItem]) : super();
@override @override
State<StatefulWidget> createState() => listRefresh(); State<StatefulWidget> createState() => listRefresh();
@ -34,7 +32,8 @@ class listRefresh extends State<ListRefresh> {
_getMoreData(); _getMoreData();
_scrollController.addListener(() { _scrollController.addListener(() {
// 如果下拉的当前位置到scroll的最下面 // 如果下拉的当前位置到scroll的最下面
if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent) { if (_scrollController.position.pixels ==
_scrollController.position.maxScrollExtent) {
_getMoreData(); _getMoreData();
} }
}); });
@ -43,7 +42,7 @@ class listRefresh extends State<ListRefresh> {
/* /*
* 回弹效果 * 回弹效果
* */ * */
backElasticEffect(){ backElasticEffect() {
// double edge = 50.0; // double edge = 50.0;
// double offsetFromBottom = _scrollController.position.maxScrollExtent - _scrollController.position.pixels; // double offsetFromBottom = _scrollController.position.maxScrollExtent - _scrollController.position.pixels;
// if (offsetFromBottom < edge) { // 添加一个动画没有更多数据的时候 ListView 向下移动覆盖正在加载更多数据的标志 // if (offsetFromBottom < edge) { // 添加一个动画没有更多数据的时候 ListView 向下移动覆盖正在加载更多数据的标志
@ -58,18 +57,22 @@ class listRefresh extends State<ListRefresh> {
* list探底执行的具体事件 * list探底执行的具体事件
* */ * */
Future _getMoreData() async { Future _getMoreData() async {
if (!isLoading && _hasMore) { // 如果上一次异步请求数据完成 同时有数据可以加载 if (!isLoading && _hasMore) {
// 如果上一次异步请求数据完成 同时有数据可以加载
setState(() => isLoading = true); setState(() => isLoading = true);
//if(_hasMore){ // 还有数据可以拉新 //if(_hasMore){ // 还有数据可以拉新
List newEntries = await mokeHttpRequest(); List newEntries = await mokeHttpRequest();
//if (newEntries.isEmpty) { //if (newEntries.isEmpty) {
_hasMore = (_pageIndex <= _pageTotal); _hasMore = (_pageIndex <= _pageTotal);
setState(() { if (this.mounted) {
items.addAll(newEntries); setState(() {
isLoading = false; items.addAll(newEntries);
}); isLoading = false;
});
}
backElasticEffect(); backElasticEffect();
}else if (!isLoading && !_hasMore){ // 这样判断,减少以后的绘制 } else if (!isLoading && !_hasMore) {
// 这样判断,减少以后的绘制
_pageIndex = 0; _pageIndex = 0;
backElasticEffect(); backElasticEffect();
} }
@ -79,12 +82,12 @@ class listRefresh extends State<ListRefresh> {
* 伪装吐出新数据 * 伪装吐出新数据
* */ * */
Future<List> mokeHttpRequest() async { Future<List> mokeHttpRequest() async {
if(widget.requestApi is Function){ if (widget.requestApi is Function) {
final listObj = await widget.requestApi({'pageIndex':_pageIndex}); final listObj = await widget.requestApi({'pageIndex': _pageIndex});
_pageIndex = listObj['pageIndex']; _pageIndex = listObj['pageIndex'];
_pageTotal = listObj['total']; _pageTotal = listObj['total'];
return listObj['list']; return listObj['list'];
}else { } else {
return Future.delayed(Duration(seconds: 2), () { return Future.delayed(Duration(seconds: 2), () {
return []; return [];
}); });
@ -97,20 +100,23 @@ class listRefresh extends State<ListRefresh> {
* */ * */
Future<Null> _handleRefresh() async { Future<Null> _handleRefresh() async {
List newEntries = await mokeHttpRequest(); List newEntries = await mokeHttpRequest();
setState(() { if (this.mounted) {
items.clear(); setState(() {
items.addAll(newEntries); items.clear();
isLoading = false; items.addAll(newEntries);
_hasMore = true; isLoading = false;
return null; _hasMore = true;
}); return null;
});
}
} }
/* /*
* 加载中的提示 * 加载中的提示
* */ * */
Widget _buildLoadText() { Widget _buildLoadText() {
return Container(child: Padding( return Container(
child: Padding(
padding: const EdgeInsets.all(18.0), padding: const EdgeInsets.all(18.0),
child: Center( child: Center(
child: Text("数据没有更多了!!!"), child: Text("数据没有更多了!!!"),
@ -122,23 +128,28 @@ class listRefresh extends State<ListRefresh> {
* 上提加载loading的widget,如果数据到达极限,显示没有更多 * 上提加载loading的widget,如果数据到达极限,显示没有更多
* */ * */
Widget _buildProgressIndicator() { Widget _buildProgressIndicator() {
if(_hasMore){ if (_hasMore) {
return new Padding( return new Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: new Center( child: new Center(
child:Column( child: Column(
children: <Widget>[ children: <Widget>[
new Opacity( new Opacity(
opacity: isLoading ? 1.0 : 0.0, opacity: isLoading ? 1.0 : 0.0,
child: new CircularProgressIndicator(valueColor: AlwaysStoppedAnimation(Colors.blue)), child: new CircularProgressIndicator(
), valueColor: AlwaysStoppedAnimation(Colors.blue)),
SizedBox(height:20.0), ),
Text('稍等片刻更精彩...',style: TextStyle(fontSize: 14.0),) SizedBox(height: 20.0),
],) Text(
//child: '稍等片刻更精彩...',
), style: TextStyle(fontSize: 14.0),
)
],
)
//child:
),
); );
}else { } else {
return _buildLoadText(); return _buildLoadText();
} }
} }
@ -152,11 +163,11 @@ class listRefresh extends State<ListRefresh> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new RefreshIndicator( return new RefreshIndicator(
child:ListView.builder( child: ListView.builder(
itemCount: items.length + 1, itemCount: items.length + 1,
itemBuilder: (context, index) { itemBuilder: (context, index) {
if(index == 0 && index != items.length){ if (index == 0 && index != items.length) {
return Container(height:0); return Container(height: 0);
} }
if (index == items.length) { if (index == items.length) {
//return _buildLoadText(); //return _buildLoadText();
@ -165,7 +176,7 @@ class listRefresh extends State<ListRefresh> {
//print('itemsitemsitemsitems:${items[index].title}'); //print('itemsitemsitemsitems:${items[index].title}');
//return ListTile(title: Text("Index${index}:${items[index].title}")); //return ListTile(title: Text("Index${index}:${items[index].title}"));
if (widget.renderItem is Function) { if (widget.renderItem is Function) {
return widget.renderItem(index,items[index]); return widget.renderItem(index, items[index]);
} }
//return makeCard(index,items[index]); //return makeCard(index,items[index]);
} }
@ -175,4 +186,4 @@ class listRefresh extends State<ListRefresh> {
onRefresh: _handleRefresh, onRefresh: _handleRefresh,
); );
} }
} }

View File

@ -8,7 +8,7 @@ import '../model/story.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
class Pagination extends StatelessWidget { class Pagination extends StatelessWidget {
static const String routeName = '/material/page-selector'; static final String routeName = '/material/page-selector';
static final List<Icon> icons = <Icon>[ static final List<Icon> icons = <Icon>[
const Icon(Icons.event, semanticLabel: 'Event'), const Icon(Icons.event, semanticLabel: 'Event'),
const Icon(Icons.home, semanticLabel: 'Home'), const Icon(Icons.home, semanticLabel: 'Home'),
@ -18,9 +18,9 @@ class Pagination extends StatelessWidget {
const Icon(Icons.language, semanticLabel: 'Language'), const Icon(Icons.language, semanticLabel: 'Language'),
]; ];
List<StoryModel> bannerStories = []; final List<StoryModel> bannerStories = [];
List<dynamic> arr = [ final List<dynamic> arr = [
{'image': 'https://img.alicdn.com/tfs/TB1W4hMAwHqK1RjSZJnXXbNLpXa-519-260.jpg', 'type': 0, 'id': 9695909, 'url': 'https://www.zhihu.com/question/294145797/answer/551162834', 'title': '为什么阿里巴巴、腾讯和 Google 之类的企业都在使用 Flutter 开发 App'}, {'image': 'https://img.alicdn.com/tfs/TB1W4hMAwHqK1RjSZJnXXbNLpXa-519-260.jpg', 'type': 0, 'id': 9695909, 'url': 'https://www.zhihu.com/question/294145797/answer/551162834', 'title': '为什么阿里巴巴、腾讯和 Google 之类的企业都在使用 Flutter 开发 App'},
{'image': 'https://img.alicdn.com/tfs/TB1XmFIApzqK1RjSZSgXXcpAVXa-720-338.jpg', 'type': 0, 'id': 9695859, 'url': 'https://zhuanlan.zhihu.com/p/51696594', 'title': 'Flutter 1.0 正式发布: Google 的便携 UI 工具包'}, {'image': 'https://img.alicdn.com/tfs/TB1XmFIApzqK1RjSZSgXXcpAVXa-720-338.jpg', 'type': 0, 'id': 9695859, 'url': 'https://zhuanlan.zhihu.com/p/51696594', 'title': 'Flutter 1.0 正式发布: Google 的便携 UI 工具包'},
{'image': 'https://img.alicdn.com/tfs/TB1mClCABLoK1RjSZFuXXXn0XXa-600-362.jpg', 'type': 0, 'id': 96956491409, 'url':'https://zhuanlan.zhihu.com/p/53497167','title': 'Flutter 示范应用现已开源 — 万物起源(The History of Everything)'}, {'image': 'https://img.alicdn.com/tfs/TB1mClCABLoK1RjSZFuXXXn0XXa-600-362.jpg', 'type': 0, 'id': 96956491409, 'url':'https://zhuanlan.zhihu.com/p/53497167','title': 'Flutter 示范应用现已开源 — 万物起源(The History of Everything)'},
@ -35,7 +35,7 @@ class Pagination extends StatelessWidget {
} }
} }
List<Widget> _PageSelector(BuildContext context) { List<Widget> _pageSelector(BuildContext context) {
List<Widget> list = []; List<Widget> list = [];
/// super.initState(); /// super.initState();
arr.forEach((item) { arr.forEach((item) {
@ -57,7 +57,7 @@ class Pagination extends StatelessWidget {
Column( Column(
//physics: AlwaysScrollableScrollPhysics(), //physics: AlwaysScrollableScrollPhysics(),
//padding: EdgeInsets.only(), //padding: EdgeInsets.only(),
children: _PageSelector(context) children: _pageSelector(context)
); );
} }
} }

View File

@ -138,7 +138,6 @@ class _MaterialSearchState<T> extends State<MaterialSearch> {
_loading = true; _loading = true;
}); });
//TODO: debounce widget.results too
var results = await widget.getResults(_criteria); var results = await widget.getResults(_criteria);
if (!mounted) { if (!mounted) {

View File

@ -8,7 +8,6 @@ final hightlighter = new HighLight();
class HighLight extends md.SyntaxHighlighter { class HighLight extends md.SyntaxHighlighter {
@override @override
TextSpan format(String source) { TextSpan format(String source) {
// TODO: implement format
final SyntaxHighlighterStyle style = SyntaxHighlighterStyle.lightThemeStyle(); final SyntaxHighlighterStyle style = SyntaxHighlighterStyle.lightThemeStyle();
return TextSpan( return TextSpan(
style: const TextStyle(fontSize: 10.0), style: const TextStyle(fontSize: 10.0),
@ -22,11 +21,10 @@ class HighLight extends md.SyntaxHighlighter {
class MarkdownBody extends StatelessWidget { class MarkdownBody extends StatelessWidget {
String data; final String data;
MarkdownBody(this.data); MarkdownBody(this.data);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// TODO: implement build
return md.MarkdownBody(data: data, syntaxHighlighter: new HighLight()); return md.MarkdownBody(data: data, syntaxHighlighter: new HighLight());
} }
} }

View File

@ -72,16 +72,16 @@ class WidgetItem extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 30.0, horizontal: 10.0), padding: const EdgeInsets.symmetric(vertical: 30.0, horizontal: 10.0),
height: 150.0, height: 150.0,
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: <Widget>[ children: <Widget>[
widgetIcon, widgetIcon,
SizedBox( SizedBox(
height: 8.0, height: 8.0,
), ),
Text(_widgetName), Text(_widgetName),
], ],
) , ),
), ),
); );
} }

View File

@ -8,7 +8,7 @@ class WidgetItemContainer extends StatelessWidget {
final List<dynamic> categories; final List<dynamic> categories;
final bool isWidgetPoint; final bool isWidgetPoint;
// 所有的可用demos; // 所有的可用demos;
List widgetDemosList = new WidgetDemoList().getDemos(); final List widgetDemosList = new WidgetDemoList().getDemos();
WidgetItemContainer( WidgetItemContainer(
{Key key, {Key key,
@ -41,7 +41,7 @@ class WidgetItemContainer extends StatelessWidget {
targetRouter = item.routerName; targetRouter = item.routerName;
} }
}); });
Application.router.navigateTo(context, "${targetRouter}"); Application.router.navigateTo(context, "$targetRouter");
} else { } else {
Application.router Application.router
.navigateTo(context, "/category/${item.name}"); .navigateTo(context, "/category/${item.name}");

5
lib/event/event-bus.dart Normal file
View File

@ -0,0 +1,5 @@
import 'package:event_bus/event_bus.dart';
class ApplicationEvent{
static EventBus event;
}

View File

@ -0,0 +1,7 @@
class CollectionEvent{
final String widgetName;
final String router;
final bool isRemove;
// token uid...
CollectionEvent(this.widgetName,this.router,this.isRemove);
}

View File

@ -4,7 +4,6 @@ import 'package:flutter/rendering.dart';
import 'views/FirstPage.dart'; import 'views/FirstPage.dart';
import 'views/widgetPage.dart'; import 'views/widgetPage.dart';
import 'views/ThirdPage.dart';
import 'views/FourthPage.dart'; import 'views/FourthPage.dart';
import 'views/collection_page.dart'; import 'views/collection_page.dart';
import 'routers/routers.dart'; import 'routers/routers.dart';
@ -14,6 +13,8 @@ import 'model/widget.dart';
import './widgets/index.dart'; import './widgets/index.dart';
import 'package:flutter_rookie_book/components/SearchInput.dart'; import 'package:flutter_rookie_book/components/SearchInput.dart';
const int ThemeColor = 0xFFC91B3A; const int ThemeColor = 0xFFC91B3A;
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
@ -81,7 +82,6 @@ class _MyHomePageState extends State<MyHomePage>
@override @override
void initState() { void initState() {
// TODO: implement initState
super.initState(); super.initState();
controller = new TabController( controller = new TabController(
initialIndex: 0, vsync: this, length: 4); // 这里的length 决定有多少个底导 submenus initialIndex: 0, vsync: this, length: 4); // 这里的length 决定有多少个底导 submenus
@ -111,7 +111,7 @@ class _MyHomePageState extends State<MyHomePage>
targetRouter = item.routerName; targetRouter = item.routerName;
} }
}); });
Application.router.navigateTo(context, "${targetRouter}"); Application.router.navigateTo(context, "$targetRouter");
} }
Widget buildSearchInput(BuildContext context) { Widget buildSearchInput(BuildContext context) {
@ -184,11 +184,11 @@ class _MyHomePageState extends State<MyHomePage>
} }
} }
void _onDataChange(val) { // void _onDataChange(val) {
if (this.mounted) { // if (this.mounted) {
setState(() { // setState(() {
data = val; // data = val;
}); // });
} // }
} // }
} }

View File

@ -1,5 +1,5 @@
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';
import 'dart:async';
class BaseModel{ class BaseModel{
Database db; Database db;

View File

@ -1,6 +1,5 @@
import 'base.dart';
import 'dart:async'; import 'dart:async';
import 'dart:convert';
import '../common/sql.dart'; import '../common/sql.dart';
abstract class CatInterface{ abstract class CatInterface{

View File

@ -1,4 +1,4 @@
import 'base.dart';
import 'dart:async'; import 'dart:async';
import '../common/sql.dart'; import '../common/sql.dart';
import "package:flutter/material.dart"; import "package:flutter/material.dart";

View File

@ -1,6 +1,5 @@
import 'package:fluro/fluro.dart'; import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../widgets/index.dart';
class Application { class Application {
static Router router; static Router router;
static TabController controller; static TabController controller;

View File

@ -2,7 +2,6 @@
import 'package:fluro/fluro.dart'; import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../widgets/index.dart'; import '../widgets/index.dart';
import '../model/widget.dart';
import './router_handler.dart'; import './router_handler.dart';
class Routes { class Routes {

View File

@ -1,30 +1,25 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_rookie_book/common/myListView.dart'; import 'package:flutter_rookie_book/common/list_view_item.dart';
//import 'package:flutter_rookie_book/components/CompList.dart';
import 'package:flutter_rookie_book/components/ListRefresh.dart' as listComp; import 'package:flutter_rookie_book/components/ListRefresh.dart' as listComp;
import 'package:flutter_rookie_book/components/Pagination.dart'; import 'package:flutter_rookie_book/components/Pagination.dart';
import './widgetFeature/FirstPageItem.dart'; import './widgetFeature/FirstPageItem.dart';
import '../common/net_utils.dart'; import '../common/net_utils.dart';
import 'package:flutter_rookie_book/common/iconNames.dart'; import 'package:flutter_rookie_book/common/iconNames.dart';
import '../common/sql.dart';
import 'dart:async';
import 'package:url_launcher/url_launcher.dart';
class FirstPage extends StatefulWidget { class FirstPage extends StatefulWidget {
@override @override
FirstPageState createState() => new FirstPageState(); FirstPageState createState() => new FirstPageState();
} }
class FirstPageState extends State<FirstPage> { class FirstPageState extends State<FirstPage> with AutomaticKeepAliveClientMixin{
@override
bool get wantKeepAlive => true;
@override @override
void initState() { void initState() {
// TODO: implement initState
super.initState(); super.initState();
} }
@ -68,6 +63,7 @@ class FirstPageState extends State<FirstPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
super.build(context);
return new Column( return new Column(
children: <Widget>[ children: <Widget>[
new Container( new Container(

View File

@ -1,4 +1,4 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../components/CompList.dart'; import '../components/CompList.dart';

View File

@ -1,69 +0,0 @@
import 'dart:async';
import 'package:flutter/material.dart';
import '../common/eventBus.dart';
class ThirdPage extends StatefulWidget {
ThirdPage({Key key, this.data2ThirdPage, this.callback}) : super(key: key);
final callback;
String data2ThirdPage;
@override
ThirdPageState createState() => new ThirdPageState();
}
class ThirdPageState extends State<ThirdPage> {
String data = '';
String inputTxt;
TextEditingController controller = new TextEditingController();
void initState() {
//print('data4Two' + widget.data2ThirdPage);
data = widget.data2ThirdPage;
}
void firedA() {
widget.callback('$inputTxt');
}
void firedB() {
eventBus.fire(new MyEvent('$inputTxt'));
}
void _onChanged(String value) {
setState(() {
inputTxt = value;
});
}
@override
Widget build(BuildContext context) {
return new Center(
child: new Column(children: <Widget>[
new Container(
padding: new EdgeInsets.only(bottom: 15.0),
child: new Text('子组件2'),
),
new Container(
padding: new EdgeInsets.only(bottom: 10.0),
child: new Text('父传子:' + data),
),
new Container(
margin: new EdgeInsets.only(bottom: 40.0),
child: new TextField(
controller: controller,
onChanged: _onChanged,
decoration: (new InputDecoration(labelText: '请输入你要发送的值')))),
new Container(
child: new RaisedButton(
onPressed: firedA, child: new Text('to父组件'))),
new Container(
child: new RaisedButton(
onPressed: firedB, child: new Text('to兄弟组件')))
]
)
);
}
}

View File

@ -61,7 +61,6 @@ class _CategoryHome extends State<CategoryHome> {
// 假设进入这个界面的parent一定存在 // 假设进入这个界面的parent一定存在
Cat parentCat = catHistory.last; Cat parentCat = catHistory.last;
int depth = catHistory.length;
// 继续搜索显示下一级depth: depth + 1, parentId: parentCat.id // 继续搜索显示下一级depth: depth + 1, parentId: parentCat.id
List<Cat> _categories = List<Cat> _categories =
@ -92,7 +91,7 @@ class _CategoryHome extends State<CategoryHome> {
targetRouter = item.routerName; targetRouter = item.routerName;
} }
}); });
Application.router.navigateTo(context, "${targetRouter}"); Application.router.navigateTo(context, "$targetRouter");
} }
Widget _buildContent() { Widget _buildContent() {

View File

@ -6,30 +6,128 @@
*/ */
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../model/collection.dart'; import '../model/collection.dart';
import '../routers/application.dart';
import '../event/event-bus.dart';
import '../event/event-model.dart';
import 'package:event_bus/event_bus.dart';
class CollectionPage extends StatefulWidget { class CollectionPage extends StatefulWidget {
_CollectionPageState createState() => _CollectionPageState(); _CollectionPageState createState() => _CollectionPageState();
} }
class _CollectionPageState extends State<CollectionPage> { class _CollectionPageState extends State<CollectionPage>
with AutomaticKeepAliveClientMixin {
_CollectionPageState() {
final eventBus = new EventBus();
ApplicationEvent.event = eventBus;
}
CollectionControlModel _collectionControl = new CollectionControlModel(); CollectionControlModel _collectionControl = new CollectionControlModel();
List<Collection> _collectionList = []; List<Collection> _collectionList = [];
ScrollController _scrollController = new ScrollController();
@override
bool get wantKeepAlive => true;
@override @override
void initState() { void initState() {
// TODO: implement initState
super.initState(); super.initState();
_getList();
ApplicationEvent.event.on<CollectionEvent>().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: <Widget>[
Icon(
Icons.warning,
size: 22.0,
),
SizedBox(
width: 5.0,
),
Text('模拟器重新运行会丢失收藏'),
],
),
);
}
return Container(
padding: const EdgeInsets.all(10.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(
title: Text(
_collectionList[index - 1].name,
style: TextStyle(fontSize: 17.0),
),
trailing:
Icon(Icons.keyboard_arrow_right, color: Colors.grey, size: 30.0),
onTap: () {
Application.router
.navigateTo(context, "${_collectionList[index - 1].router}");
},
),
);
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_collectionControl.getAllCollection().then((resultList) { super.build(context);
_collectionList = resultList; if (_collectionList.length == 0) {
_collectionList.forEach((item){ return ListView(
print(item.toMap()); children: <Widget>[
}); Column(
}); children: <Widget>[
return Container( Image.asset(
child: Text('敬请期待'), '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,
); );
} }
} }

View File

@ -1,3 +1,9 @@
/*
* @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/material.dart';
import 'widgetPage/cate_card.dart'; import 'widgetPage/cate_card.dart';
import '../model/cat.dart'; import '../model/cat.dart';
@ -13,7 +19,7 @@ class WidgetPage extends StatefulWidget {
SecondPageState createState() => new SecondPageState(catModel); SecondPageState createState() => new SecondPageState(catModel);
} }
class SecondPageState extends State<WidgetPage> { class SecondPageState extends State<WidgetPage> with AutomaticKeepAliveClientMixin{
CatControlModel catModel; CatControlModel catModel;
SecondPageState(this.catModel) : super(); SecondPageState(this.catModel) : super();
@ -23,6 +29,10 @@ class SecondPageState extends State<WidgetPage> {
List<Cat> categories = []; List<Cat> categories = [];
@override
bool get wantKeepAlive => true;
@override
void initState() { void initState() {
super.initState(); super.initState();
renderCats(); renderCats();
@ -41,7 +51,6 @@ class SecondPageState extends State<WidgetPage> {
Widget buildGrid() { Widget buildGrid() {
// 存放最后的widget // 存放最后的widget
List<Widget> tiles = []; List<Widget> tiles = [];
Widget content;
for (Cat item in categories) { for (Cat item in categories) {
tiles.add(new CateCard(category: item)); tiles.add(new CateCard(category: item));
} }
@ -52,6 +61,7 @@ class SecondPageState extends State<WidgetPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
super.build(context);
if (categories.length == 0) { if (categories.length == 0) {
return ListView( return ListView(
children: <Widget>[new Container()], children: <Widget>[new Container()],
@ -63,10 +73,4 @@ class SecondPageState extends State<WidgetPage> {
); );
} }
void _onChanged(String value) {
setState(() {
active = value;
data = '90';
});
}
} }

View File

@ -7,7 +7,6 @@
* tartget: AppBar 的示例 * tartget: AppBar 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,7 +7,7 @@
* tartget: AppBar 的示例 * tartget: AppBar 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -48,18 +48,18 @@ class _DemoState extends State<Demo> {
return WidgetDemo( return WidgetDemo(
title: 'AppBar', title: 'AppBar',
codeUrl: 'componentss/Bar/AppBar/demo.dart', codeUrl: 'componentss/Bar/AppBar/demo.dart',
contentList: [ allDemoBoxs(context, this) ], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/material/AppBar-class.html', docUrl: 'https://docs.flutter.io/flutter/material/AppBar-class.html',
); );
} }
} }
/** /*
* 所有的 AppBar widget * 所有的 AppBar widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDemoBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -6,6 +6,7 @@
* email: zhu.yan@alibaba-inc.com * email: zhu.yan@alibaba-inc.com
* tartget: BottomAppBar 的示例 * tartget: BottomAppBar 的示例
*/ */
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,6 +7,7 @@
* tartget: BottomAppBar 的示例 * tartget: BottomAppBar 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -24,11 +25,6 @@ const String _Text1 =
> 通常与Scaffold和FloatingActionButton一起使用。 > 通常与Scaffold和FloatingActionButton一起使用。
"""; """;
const String _Text2 =
"""### **进阶用法**
> BottomAppBar
-
""";
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = '/components//Bar/BottomAppBar'; static const String routeName = '/components//Bar/BottomAppBar';
@ -43,18 +39,18 @@ class _DemoState extends State<Demo> {
return WidgetDemo( return WidgetDemo(
title: 'BottomAppBar', title: 'BottomAppBar',
codeUrl: 'componentss/Bar/BottomAppBar/demo.dart', codeUrl: 'componentss/Bar/BottomAppBar/demo.dart',
contentList: [allDomeBoxs(context, this)], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/material/BottomAppBar-class.html', docUrl: 'https://docs.flutter.io/flutter/material/BottomAppBar-class.html',
); );
} }
} }
/** /*
* 所有的 BottomAppBar widget * 所有的 BottomAppBar widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDomeBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -7,7 +7,6 @@
* tartget: ButtonBar 的示例 * tartget: ButtonBar 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,7 +7,7 @@
* tartget: ButtonBar 的示例 * tartget: ButtonBar 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -26,11 +26,6 @@ const String _Text1 =
- 当Directionality为TextDirection.ltr时按钮栏的子项右对齐最后一个子项成为最右边的子项。当Directionality TextDirection.rtl时子项被左对齐最后一个子项成为最左边的子项。 - 当Directionality为TextDirection.ltr时按钮栏的子项右对齐最后一个子项成为最右边的子项。当Directionality TextDirection.rtl时子项被左对齐最后一个子项成为最左边的子项。
"""; """;
const String _Text2 =
"""### **进阶用法**
> ButtonBar
-
""";
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = '/components/Bar/ButtonBar'; static const String routeName = '/components/Bar/ButtonBar';
@ -44,19 +39,19 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'ButtonBar', title: 'ButtonBar',
codeUrl: 'componentss//Bar/ButtonBar/demo.dart', codeUrl: 'components/Bar/ButtonBar/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/material/ButtonBar-class.html', docUrl: 'https://docs.flutter.io/flutter/material/ButtonBar-class.html',
); );
} }
} }
/** /*
* 所有的 ButtonBar widget * 所有的 ButtonBar widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDemoBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -7,7 +7,7 @@
* tartget: FlexibleSpaceBar 的示例 * tartget: FlexibleSpaceBar 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,7 +7,7 @@
* tartget: FlexibleSpaceBar 的示例 * tartget: FlexibleSpaceBar 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -27,11 +27,6 @@ const String _Text1 =
- 要调整 AppBar 大小,必须将其包装在 FlexibleSpaceBar.createSettings 返回的 widget 中 ,以将大小调整信息传递给 FlexibleSpaceBar。 - 要调整 AppBar 大小,必须将其包装在 FlexibleSpaceBar.createSettings 返回的 widget 中 ,以将大小调整信息传递给 FlexibleSpaceBar。
"""; """;
const String _Text2 =
"""### **进阶用法**
> FlexibleSpaceBar
-
""";
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = '/components//Bar/FlexibleSpaceBar'; static const String routeName = '/components//Bar/FlexibleSpaceBar';
@ -45,19 +40,19 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'FlexibleSpaceBar', title: 'FlexibleSpaceBar',
codeUrl: 'Bar/FlexibleSpaceBar/demo.dart', codeUrl: 'components/Bar/FlexibleSpaceBar/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/material/FlexibleSpaceBar-class.html', docUrl: 'https://docs.flutter.io/flutter/material/FlexibleSpaceBar-class.html',
); );
} }
} }
/** /*
* 所有的 FlexibleSpaceBar widget * 所有的 FlexibleSpaceBar widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDemoBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -7,7 +7,6 @@
* tartget: SliverAppBar 的示例 * tartget: SliverAppBar 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,7 +7,7 @@
* tartget: SliverAppBar 的示例 * tartget: SliverAppBar 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -41,18 +41,18 @@ class _DemoState extends State<Demo> {
return WidgetDemo( return WidgetDemo(
title: 'SliverAppBar', title: 'SliverAppBar',
codeUrl: 'componentss/Bar/SliverAppBar/demo.dart', codeUrl: 'componentss/Bar/SliverAppBar/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList:[allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/widgets/SliverAppBar-class.html', docUrl: 'https://docs.flutter.io/flutter/widgets/SliverAppBar-class.html',
); );
} }
} }
/** /*
* 所有的 SliverAppBar widget * 所有的 SliverAppBar widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDemoBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -7,7 +7,7 @@
* tartget: SnackBar 的示例 * tartget: SnackBar 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,7 +7,7 @@
* tartget: SnackBar 的示例 * tartget: SnackBar 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -27,11 +27,6 @@ const String _Text1 =
- 要控制SnackBar保持可见的时间请指定持续时间。 - 要控制SnackBar保持可见的时间请指定持续时间。
"""; """;
const String _Text2 =
"""### **进阶用法**
> SnackBar
-
""";
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = '/components//Bar/SnackBar'; static const String routeName = '/components//Bar/SnackBar';
@ -46,18 +41,18 @@ class _DemoState extends State<Demo> {
return WidgetDemo( return WidgetDemo(
title: 'SnackBar', title: 'SnackBar',
codeUrl: 'componentss/Bar/SnackBar/demo.dart', codeUrl: 'componentss/Bar/SnackBar/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/material/SnackBar-class.html', docUrl: 'https://docs.flutter.io/flutter/material/SnackBar-class.html',
); );
} }
} }
/** /*
* 所有的 SnackBar widget * 所有的 SnackBar widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDemoBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -7,10 +7,8 @@
* tartget: SnackBarAction 的示例 * tartget: SnackBarAction 的示例
*/ */
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'demo.dart';
class SnackBarActionDemo extends StatefulWidget { class SnackBarActionDemo extends StatefulWidget {
_Demo createState() => _Demo(); _Demo createState() => _Demo();

View File

@ -7,10 +7,7 @@
* tartget: SnackBarAction 的示例 * tartget: SnackBarAction 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../../components/markdown.dart';
import './demo.dart' as SnackBarDemo; import './demo.dart' as SnackBarDemo;
const String _Text0 = """ const String _Text0 = """

View File

@ -7,7 +7,6 @@
* tartget: TabBar 的示例 * tartget: TabBar 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class TabBarDemo extends StatefulWidget { class TabBarDemo extends StatefulWidget {

View File

@ -7,8 +7,6 @@
* tartget: SnackBarAction 的示例 * tartget: SnackBarAction 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import './demo.dart'; import './demo.dart';

View File

@ -7,7 +7,6 @@
* tartget: Card 的示例 * tartget: Card 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,7 +7,7 @@
* tartget: Card 的示例 * tartget: Card 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -25,11 +25,6 @@ const String _Text1 =
> 此示例显示了创建卡片窗口组件,其中显示了相册信息和两个操作 > 此示例显示了创建卡片窗口组件,其中显示了相册信息和两个操作
"""; """;
const String _Text2 =
"""### **进阶用法**
> Card
-
""";
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = '/components/Card/Card'; static const String routeName = '/components/Card/Card';
@ -43,19 +38,19 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'Card', title: 'Card',
codeUrl: 'componentss/Card/Card/demo.dart', codeUrl: 'components/Card/Card/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/material/Card-class.html', docUrl: 'https://docs.flutter.io/flutter/material/Card-class.html',
); );
} }
} }
/** /*
* 所有的 Card widget * 所有的 Card widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDemoBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -27,8 +27,7 @@ final List<InputEntry> _lists=<InputEntry>[
const InputEntry('web', 'W'), const InputEntry('web', 'W'),
]; ];
List<String> _inputs=<String>[]; Iterable<Widget> get _rawChipWidget sync*{
Iterable<Widget> get RawChipWidget sync*{
for(InputEntry value in _lists){ for(InputEntry value in _lists){
yield Padding( yield Padding(
padding: const EdgeInsets.all(4.0), padding: const EdgeInsets.all(4.0),
@ -57,7 +56,7 @@ Iterable<Widget> get RawChipWidget sync*{
return Column( return Column(
children: <Widget>[ children: <Widget>[
Wrap( Wrap(
children: RawChipWidget.toList(), children: _rawChipWidget.toList(),
), ),
], ],

View File

@ -7,8 +7,6 @@
* tartget: xxx * tartget: xxx
*/ */
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@ -7,8 +7,6 @@
* tartget: xxx * tartget: xxx
*/ */
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@ -7,8 +7,6 @@
* tartget: xxx * tartget: xxx
*/ */
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -72,7 +70,7 @@ class _DialogMoreDemo extends State<DialogMoreDemo> {
value += 1; value += 1;
}); });
}, },
child: Text("我是一个Dialog, 点我更新value: ${value}"), child: Text("我是一个Dialog, 点我更新value: $value"),
) )
); );
} }
@ -105,3 +103,4 @@ class _DialogMoreDemo extends State<DialogMoreDemo> {
); );
} }
} }

View File

@ -7,8 +7,6 @@
* tartget: xxx * tartget: xxx
*/ */
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@ -7,8 +7,6 @@
* tartget: xxx * tartget: xxx
*/ */
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@ -7,8 +7,6 @@
* tartget: xxx * tartget: xxx
*/ */
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@ -7,8 +7,6 @@
* tartget: xxx * tartget: xxx
*/ */
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@ -1,4 +1,4 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import './model.dart'; import './model.dart';

View File

@ -39,19 +39,19 @@ class Demo extends StatefulWidget {
} }
class _DemoState extends State<Demo> { class _DemoState extends State<Demo> {
var animatedList = null; State animatedList;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'AnimatedList', title: 'AnimatedList',
codeUrl: 'componentss/List/AnimatedList/demo.dart', codeUrl: 'components/List/AnimatedList/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList: [allDemoBoxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/widgets/AnimatedList-class.html', docUrl: 'https://docs.flutter.io/flutter/widgets/AnimatedList-class.html',
); );
} }
} }
/** /*
* 所有的 AnimatedList widget * 所有的 AnimatedList widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget

View File

@ -7,7 +7,6 @@
* tartget: ListBody 的示例 * tartget: ListBody 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,7 +7,7 @@
* tartget: ListBody 的示例 * tartget: ListBody 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -41,19 +41,19 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'ListBody', title: 'ListBody',
codeUrl: 'componentss/List/ListBody/demo.dart', codeUrl: 'components/List/ListBody/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/widgets/ListBody-class.html', docUrl: 'https://docs.flutter.io/flutter/widgets/ListBody-class.html',
); );
} }
} }
/** /*
* 所有的 ListBody widget * 所有的 ListBody widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDemoBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -7,7 +7,6 @@
* tartget: ListView 的示例 * tartget: ListView 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*
@ -86,8 +85,8 @@ class ListViewLessDefault extends StatelessWidget {
dense:true, // item 直观感受是整体大小 dense:true, // item 直观感受是整体大小
contentPadding: EdgeInsets.all(10.0),// item 内容内边距 contentPadding: EdgeInsets.all(10.0),// item 内容内边距
enabled:true, enabled:true,
onTap:(){print('点击:${index}');},// item onTap 点击事件 onTap:(){print('点击:$index');},// item onTap 点击事件
onLongPress:(){print('长按:${index}');},// item onLongPress 长按事件 onLongPress:(){print('长按:$index');},// item onLongPress 长按事件
selected:false, // item 是否选中状态 selected:false, // item 是否选中状态
); );
}, },
@ -111,8 +110,8 @@ class ListViewLessDefault extends StatelessWidget {
dense:true, // item 直观感受是整体大小 dense:true, // item 直观感受是整体大小
contentPadding: EdgeInsets.all(10.0),// item 内容内边距 contentPadding: EdgeInsets.all(10.0),// item 内容内边距
enabled:true, enabled:true,
onTap:(){print('点击:${index}');},// item onTap 点击事件 onTap:(){print('点击:$index');},// item onTap 点击事件
onLongPress:(){print('长按:${index}');},// item onLongPress 长按事件 onLongPress:(){print('长按:$index');},// item onLongPress 长按事件
selected:false, // item 是否选中状态 selected:false, // item 是否选中状态
); );
}, },

View File

@ -7,7 +7,6 @@
* tartget: ListView 的示例 * tartget: ListView 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -68,19 +67,19 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'ListView', title: 'ListView',
codeUrl: 'componentss/List/ListView/demo.dart', codeUrl: '/componentss/List/ListView/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/widgets/ListView-class.html', docUrl: 'https://docs.flutter.io/flutter/widgets/ListView-class.html',
); );
} }
} }
/** /*
* 所有的 ListView widget * 所有的 ListView widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget
*/ */
Widget allDemoBoxs(BuildContext context, _DemoState that) { Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container( return Container(
//padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0), //padding: new EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column( child: Column(

View File

@ -13,7 +13,6 @@ class CheckedPopupMenuItemDemo extends StatefulWidget {
} }
class _CheckedPopupMenuItemDemoState extends State<CheckedPopupMenuItemDemo> { class _CheckedPopupMenuItemDemoState extends State<CheckedPopupMenuItemDemo> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
List<String> _checkedValues; List<String> _checkedValues;
final String _checkedValue1 = 'One'; final String _checkedValue1 = 'One';

View File

@ -12,7 +12,6 @@ import './DropdownMenuItem/index.dart' as DropdownMenuItem;
import './PopupMenuButton/index.dart' as PopupMenuButton; import './PopupMenuButton/index.dart' as PopupMenuButton;
import './PopupMenuDivider/index.dart' as PopupMenuDivider; import './PopupMenuDivider/index.dart' as PopupMenuDivider;
import './PopupMenuEntry/index.dart' as PopupMenuEntry; import './PopupMenuEntry/index.dart' as PopupMenuEntry;
import './PopupMenuItem/index.dart' as PopupMenuItem;
import './PopupMenuItemState/index.dart' as PopupMenuItemState; import './PopupMenuItemState/index.dart' as PopupMenuItemState;

View File

@ -7,7 +7,6 @@
* tartget: BottomNavigationBar 的示例 * tartget: BottomNavigationBar 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -6,7 +6,7 @@
* email: zhu.yan@alibaba-inc.com * email: zhu.yan@alibaba-inc.com
* tartget: BottomNavigationBar 的示例 * tartget: BottomNavigationBar 的示例
*/ */
import '../../../../routers/application.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
@ -42,7 +42,7 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'BottomNavigationBar', title: 'BottomNavigationBar',
codeUrl: '${Application.github['widgetsURL']}components/Navigation/BottomNavigationBar/demo.dart', codeUrl: 'components/Navigation/BottomNavigationBar/demo.dart',
contentList: [allDemoBoxs(context, this)], contentList: [allDemoBoxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/material/BottomNavigationBar-class.html', docUrl: 'https://docs.flutter.io/flutter/material/BottomNavigationBar-class.html',
bottomNaviBar:BottomNavigationBarDemo.BottomNavigationBarFullDefault() bottomNaviBar:BottomNavigationBarDemo.BottomNavigationBarFullDefault()
@ -50,7 +50,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 BottomNavigationBar widget * 所有的 BottomNavigationBar widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget

View File

@ -7,7 +7,6 @@
* tartget: BottomNavigationBarItem 的示例 * tartget: BottomNavigationBarItem 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,8 +7,7 @@
* tartget: BottomNavigationBarItem 的示例 * tartget: BottomNavigationBarItem 的示例
*/ */
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import '../../../../routers/application.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -26,11 +25,6 @@ const String _Text1 =
> 这个类很少单独使用。通常嵌入在上面的一个底部 bottom navigation widgets 中。 > 这个类很少单独使用。通常嵌入在上面的一个底部 bottom navigation widgets 中。
"""; """;
const String _Text2 =
"""### **进阶用法**
> BottomNavigationBarItem
-
""";
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = '/components/Navigation/BottomNavigationBarItem'; static const String routeName = '/components/Navigation/BottomNavigationBarItem';
@ -44,14 +38,14 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'BottomNavigationBarItem', title: 'BottomNavigationBarItem',
codeUrl: '${Application.github['widgetsURL']}components/Bar/BottomNavigationBarItem/demo.dart', codeUrl: 'components/Bar/BottomNavigationBarItem/demo.dart',
contentList: [allCheckboxs(context, this)], contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/widgets/BottomNavigationBarItem-class.html', docUrl: 'https://docs.flutter.io/flutter/widgets/BottomNavigationBarItem-class.html',
); );
} }
} }
/** /*
* 所有的 BottomNavigationBarItem widget * 所有的 BottomNavigationBarItem widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget

View File

@ -15,7 +15,7 @@ enum Location {
typedef DemoItemBodyBuilder<T> = Widget Function(DemoItem<T> item); typedef DemoItemBodyBuilder<T> = Widget Function(DemoItem<T> item);
typedef ValueToString<T> = String Function(T value); typedef ValueToString<T> = String Function(T value);
/** /*
* google flutter 详情多个例子地址: * google flutter 详情多个例子地址:
* https://github.com/flutter/flutter/blob/master/examples/flutter_gallery/lib/demo/material/expansion_panels_demo.dart * https://github.com/flutter/flutter/blob/master/examples/flutter_gallery/lib/demo/material/expansion_panels_demo.dart
*/ */
@ -135,11 +135,6 @@ class _ExpansionPanelsDemoState extends State<ExpansionPanelsDemo> {
hint: 'Select location', hint: 'Select location',
valueToString: (Location location) => location.toString().split('.')[1], valueToString: (Location location) => location.toString().split('.')[1],
builder: (DemoItem<Location> item) { builder: (DemoItem<Location> item) {
void close() {
setState(() {
item.isExpanded = false;
});
}
return Form( return Form(
child: Builder( child: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {

View File

@ -1,8 +1,8 @@
/* /*
* @Author: xiaojia.dxj * @Author: xiaojia.dxj
* @Date: 2018-12-17 15:37:32 * @Date: 2018-12-17 15:37:32
* @Last Modified by: xiaojia.dxj * @Last Modified by: 一凨
* @Last Modified time: 2018-12-18 19:12:32 * @Last Modified time: 2019-01-11 15:17:26
*/ */
import 'dart:async'; import 'dart:async';

View File

@ -6,7 +6,6 @@
*/ */
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import 'demo.dart';
const String content0 = ''' const String content0 = '''
### **简介** ### **简介**

View File

@ -5,7 +5,6 @@
* @Last Modified time: 2018-12-15 21:26:11 * @Last Modified time: 2018-12-15 21:26:11
*/ */
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import '../../../../common/widget_demo.dart'; import '../../../../common/widget_demo.dart';
import './demo.dart'; import './demo.dart';

View File

@ -6,7 +6,6 @@
* email: zhu.yan@alibaba-inc.com * email: zhu.yan@alibaba-inc.com
* tartget: DropdownButton 的示例 * tartget: DropdownButton 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*
@ -14,15 +13,15 @@ import 'package:flutter/material.dart';
* isDisabled:是否是禁用isDisabled 默认为true * isDisabled:是否是禁用isDisabled 默认为true
* */ * */
class DropdownButtonDefault extends StatelessWidget { class DropdownButtonDefault extends StatelessWidget {
List<DropdownMenuItem> generateItemList() { List<DropdownMenuItem> generateItemList() {
List<DropdownMenuItem> items = new List(); final List<DropdownMenuItem> items = new List();
DropdownMenuItem item1 = new DropdownMenuItem( final DropdownMenuItem item1 = new DropdownMenuItem(
value: '张三', child: new Text('张三')); value: '张三', child: new Text('张三'));
DropdownMenuItem item2 = new DropdownMenuItem( final DropdownMenuItem item2 = new DropdownMenuItem(
value: '李四', child: new Text('李四')); value: '李四', child: new Text('李四'));
DropdownMenuItem item3 = new DropdownMenuItem( final DropdownMenuItem item3 = new DropdownMenuItem(
value: '王二', child: new Text('王二')); value: '王二', child: new Text('王二'));
DropdownMenuItem item4 = new DropdownMenuItem( final DropdownMenuItem item4 = new DropdownMenuItem(
value: '麻子', child: new Text('麻子')); value: '麻子', child: new Text('麻子'));
items.add(item1); items.add(item1);
items.add(item2); items.add(item2);

View File

@ -8,6 +8,7 @@
* 对应文档地址:https://docs.flutter.io/flutter/material/DropdownButton-class.html * 对应文档地址:https://docs.flutter.io/flutter/material/DropdownButton-class.html
*/ */
import '../../../../../common/widget_demo.dart'; import '../../../../../common/widget_demo.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -56,7 +57,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 DropdownButton 按钮 * 所有的 DropdownButton 按钮
*/ */
Widget allDropdownButtons(BuildContext context,_DemoState that){ Widget allDropdownButtons(BuildContext context,_DemoState that){

View File

@ -16,7 +16,7 @@ import 'package:flutter/material.dart';
class FlatButtonDefault extends StatelessWidget { class FlatButtonDefault extends StatelessWidget {
final bool isDisabled; final bool isDisabled;
const FlatButtonDefault([bool this.isDisabled = true]) const FlatButtonDefault([ this.isDisabled = true])
: assert(isDisabled != null), : assert(isDisabled != null),
super(); super();
@ -39,7 +39,7 @@ class FlatButtonIconDefault extends StatelessWidget {
final IconData icon; final IconData icon;
const FlatButtonIconDefault( const FlatButtonIconDefault(
[bool this.isDisabled = true, IconData this.icon = Icons.add_circle]) [ this.isDisabled = true, this.icon = Icons.add_circle])
: super(); : super();
Color _randomColor() { Color _randomColor() {
@ -73,10 +73,10 @@ class FlatButtonCustom extends StatelessWidget {
final VoidCallback onPressed; final VoidCallback onPressed;
const FlatButtonCustom([ const FlatButtonCustom([
String this.txt = '自定义按钮', this.txt = '自定义按钮',
Color this.color = Colors.blueAccent, this.color = Colors.blueAccent,
ShapeBorder this.shape, this.shape,
VoidCallback this.onPressed this.onPressed
]) :super(); ]) :super();
@override @override

View File

@ -8,39 +8,12 @@
* 对应文档地址:https://docs.flutter.io/flutter/material/FlatButton-class.html * 对应文档地址:https://docs.flutter.io/flutter/material/FlatButton-class.html
*/ */
import '../../../../../common/widget_demo.dart'; import '../../../../../common/widget_demo.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
import './demo.dart' as flatButton; import './demo.dart' as flatButton;
const String _markdownData = """# Markdown Example
Markdown allows you to easily include formatted text, images, and even formatted Dart code in your app.
## Styling
Style text as _italic_, __bold__, or `inline code`.
- Use bulleted lists
- To better clarify
- Your points
## Links
You can use [hyperlinks](hyperlink) in markdown
## Images
You can include images:
![Flutter logo](https://flutter.io/images/flutter-mark-square-100.png#100x100)
## Markdown widget
This is an example of how to create your own Markdown widget:
new Markdown(data: 'Hello _world_!');
## Code blocks
Formatted Dart code looks really pretty too:
```
void main() {
runApp(new MaterialApp(
home: new Scaffold(
body: new Markdown(data: markdownData)
)
));
}
```
Enjoy!
""";
const String _flatText0 = const String _flatText0 =
@ -88,7 +61,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 FlatButton 按钮 * 所有的 FlatButton 按钮
*/ */
Widget allFlatButtons(BuildContext context){ Widget allFlatButtons(BuildContext context){

View File

@ -6,7 +6,6 @@
* email: zhu.yan@alibaba-inc.com * email: zhu.yan@alibaba-inc.com
* tartget: OutlineButton 的示例 * tartget: OutlineButton 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*
@ -16,7 +15,7 @@ import 'package:flutter/material.dart';
class FloatingActionButtonDefault extends StatelessWidget { class FloatingActionButtonDefault extends StatelessWidget {
final bool isDisabled; final bool isDisabled;
const FloatingActionButtonDefault([bool this.isDisabled = true]) const FloatingActionButtonDefault([ this.isDisabled = true])
: assert(isDisabled != null), : assert(isDisabled != null),
super(); super();
@ -41,10 +40,10 @@ class FloatingActionButtonCustom extends StatelessWidget {
final VoidCallback onPressed; final VoidCallback onPressed;
const FloatingActionButtonCustom( const FloatingActionButtonCustom(
[String this.txt = '自定义按钮', [ this.txt = '自定义按钮',
Color this.color = Colors.orange, this.color = Colors.orange,
ShapeBorder this.shape, this.shape,
VoidCallback this.onPressed]) this.onPressed])
: super(); : super();
@override @override
@ -93,10 +92,10 @@ class FloatingActionButtonCustom2 extends StatelessWidget {
final VoidCallback onPressed; final VoidCallback onPressed;
const FloatingActionButtonCustom2( const FloatingActionButtonCustom2(
[String this.txt = '自定义按钮', [ this.txt = '自定义按钮',
Color this.color = Colors.orange, this.color = Colors.orange,
ShapeBorder this.shape, this.shape,
VoidCallback this.onPressed]) this.onPressed])
: super(); : super();
@override @override

View File

@ -14,8 +14,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
import './demo.dart' as floatingActionButton; import './demo.dart' as floatingActionButton;
const String _floatingActionTitle =
'FloatingAction Button 示例';
const String _floatingActionText0 = const String _floatingActionText0 =
"""### **简介** """### **简介**
@ -68,7 +66,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 FloatingActionButton 按钮 * 所有的 FloatingActionButton 按钮
*/ */
Widget allFloatingActionButtons(BuildContext context,_DemoState that){ Widget allFloatingActionButtons(BuildContext context,_DemoState that){
@ -105,26 +103,26 @@ Widget allFloatingActionButtons(BuildContext context,_DemoState that){
* alert 弹框 * alert 弹框
* context:容器的父级 * context:容器的父级
* */ * */
void _showMessage(String name, BuildContext context) { // void _showMessage(String name, BuildContext context) {
showDialog( // showDialog(
// alert 的父级 // // alert 的父级
context: context, // context: context,
builder: (BuildContext context) { // builder: (BuildContext context) {
return AlertDialog( // return AlertDialog(
title: new Text('提示'), // title: new Text('提示'),
content: new Text(name), // content: new Text(name),
actions: <Widget>[ // actions: <Widget>[
new FlatButton( // new FlatButton(
// alert 的取消按钮 // // alert 的取消按钮
onPressed: () { // onPressed: () {
// 取消的事件 // // 取消的事件
Navigator.of(context).pop(true); // Navigator.of(context).pop(true);
}, // },
child: new Text('取消')) // child: new Text('取消'))
]); // ]);
} // }
); // );
} // }
/* /*
* 带align的text * 带align的text

View File

@ -19,7 +19,7 @@ final int len = IconNames.Names.length;
class IconButtonDefault extends StatelessWidget { class IconButtonDefault extends StatelessWidget {
final bool isDisabled; final bool isDisabled;
const IconButtonDefault([bool this.isDisabled = true]) const IconButtonDefault([ this.isDisabled = true])
: assert(isDisabled != null), : assert(isDisabled != null),
super(); super();
@ -43,10 +43,10 @@ class IconButtonCustom extends StatelessWidget {
final VoidCallback onPressed; final VoidCallback onPressed;
const IconButtonCustom( const IconButtonCustom(
[String this.txt = '自定义按钮', [ this.txt = '自定义按钮',
Color this.color = Colors.blueAccent, this.color = Colors.blueAccent,
ShapeBorder this.shape, this.shape,
VoidCallback this.onPressed]) this.onPressed])
: super(); : super();
getIcons(){ getIcons(){

View File

@ -60,7 +60,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 IconButton 按钮 * 所有的 IconButton 按钮
*/ */
Widget allIconButtons(BuildContext context,_DemoState that){ Widget allIconButtons(BuildContext context,_DemoState that){

View File

@ -16,7 +16,7 @@ import 'package:flutter/material.dart';
class OutlineButtonDefault extends StatelessWidget { class OutlineButtonDefault extends StatelessWidget {
final bool isDisabled; final bool isDisabled;
const OutlineButtonDefault([bool this.isDisabled = true]) const OutlineButtonDefault([ this.isDisabled = true])
: assert(isDisabled != null), : assert(isDisabled != null),
super(); super();
@ -39,7 +39,7 @@ class OutlineButtonIconDefault extends StatelessWidget {
final IconData icon; final IconData icon;
const OutlineButtonIconDefault( const OutlineButtonIconDefault(
[bool this.isDisabled = true, IconData this.icon = Icons.add_circle]) [ this.isDisabled = true, this.icon = Icons.add_circle])
: super(); : super();
@override @override
@ -66,10 +66,10 @@ class OutlineButtonCustom extends StatelessWidget {
final VoidCallback onPressed; final VoidCallback onPressed;
const OutlineButtonCustom( const OutlineButtonCustom(
[String this.txt = '自定义按钮', [ this.txt = '自定义按钮',
Color this.color = Colors.blueAccent, this.color = Colors.blueAccent,
ShapeBorder this.shape, this.shape,
VoidCallback this.onPressed]) this.onPressed])
: super(); : super();
@override @override

View File

@ -69,7 +69,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 OutlineButton 按钮 * 所有的 OutlineButton 按钮
*/ */
Widget allOutlineButtons(BuildContext context,_DemoState that){ Widget allOutlineButtons(BuildContext context,_DemoState that){
@ -130,26 +130,26 @@ Widget allOutlineButtons(BuildContext context,_DemoState that){
* alert 弹框 * alert 弹框
* context:容器的父级 * context:容器的父级
* */ * */
void _showMessage(String name, BuildContext context) { // void _showMessage(String name, BuildContext context) {
showDialog( // showDialog(
// alert 的父级 // // alert 的父级
context: context, // context: context,
builder: (BuildContext context) { // builder: (BuildContext context) {
return AlertDialog( // return AlertDialog(
title: new Text('提示'), // title: new Text('提示'),
content: new Text(name), // content: new Text(name),
actions: <Widget>[ // actions: <Widget>[
new FlatButton( // new FlatButton(
// alert 的取消按钮 // // alert 的取消按钮
onPressed: () { // onPressed: () {
// 取消的事件 // // 取消的事件
Navigator.of(context).pop(true); // Navigator.of(context).pop(true);
}, // },
child: new Text('取消')) // child: new Text('取消'))
]); // ]);
} // }
); // );
} // }
/* /*
* 带align的text * 带align的text

View File

@ -6,7 +6,6 @@
* email: zhu.yan@alibaba-inc.com * email: zhu.yan@alibaba-inc.com
* tartget: RaisedButton 的示例 * tartget: RaisedButton 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*
@ -20,7 +19,7 @@ class PopupMenuButtonDefault extends StatelessWidget {
final String type; final String type;
const PopupMenuButtonDefault( const PopupMenuButtonDefault(
[String this.type = 'default1', bool this.isDisabled = true]) [ this.type = 'default1', this.isDisabled = true])
: assert(isDisabled != null), : assert(isDisabled != null),
super(); super();
@ -107,7 +106,7 @@ class PopupMenuButtonCustom extends StatelessWidget {
label: Text( label: Text(
'自定义按钮', style: TextStyle(color: Colors.white), '自定义按钮', style: TextStyle(color: Colors.white),
semanticsLabel: 'FLAT BUTTON'), semanticsLabel: 'FLAT BUTTON'),
// onPressed:(){} // 激活状态按钮 onPressed:(){} // 激活状态按钮
), ),
// 打开时放置菜单的z坐标。这可以控制菜单下方阴影的大小。 // 打开时放置菜单的z坐标。这可以控制菜单下方阴影的大小。
elevation:10.0, elevation:10.0,

View File

@ -9,7 +9,7 @@
*/ */
import '../../../../../common/widget_demo.dart'; import '../../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
import './demo.dart' as popupMenuButton; import './demo.dart' as popupMenuButton;
@ -37,8 +37,9 @@ const String _titleText2 = """
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = '/element/Form/Button/PopupMenuButton'; static const String routeName = '/element/Form/Button/PopupMenuButton';
final Map<String,String> options = {'defaultSelect': '选项二的内容'}; final Map<String,String> options = {'defaultSelect': '选项二的内容'};
@override
final _DemoState self = _DemoState(); final _DemoState self = _DemoState();
@override
_DemoState createState() => self; _DemoState createState() => self;
} }

View File

@ -16,7 +16,7 @@ import 'package:flutter/material.dart';
class RaisedButtonDefault extends StatelessWidget { class RaisedButtonDefault extends StatelessWidget {
final bool isDisabled; final bool isDisabled;
const RaisedButtonDefault([bool this.isDisabled = true]) const RaisedButtonDefault([ this.isDisabled = true])
: assert(isDisabled != null), : assert(isDisabled != null),
super(); super();
@ -39,7 +39,7 @@ class RaisedButtonIconDefault extends StatelessWidget {
final IconData icon; final IconData icon;
const RaisedButtonIconDefault( const RaisedButtonIconDefault(
[bool this.isDisabled = true, IconData this.icon = Icons.add_circle]) [ this.isDisabled = true, this.icon = Icons.add_circle])
: super(); : super();
Color _randomColor() { Color _randomColor() {
@ -73,10 +73,10 @@ class RaisedButtonCustom extends StatelessWidget {
final VoidCallback onPressed; final VoidCallback onPressed;
const RaisedButtonCustom( const RaisedButtonCustom(
[String this.txt = '自定义按钮', [ this.txt = '自定义按钮',
Color this.color = Colors.blueAccent, this.color = Colors.blueAccent,
ShapeBorder this.shape, this.shape,
VoidCallback this.onPressed]) this.onPressed])
: super(); : super();
@override @override

View File

@ -69,7 +69,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 RaisedButton 按钮 * 所有的 RaisedButton 按钮
*/ */
Widget allRaisedButtons(BuildContext context,_DemoState that){ Widget allRaisedButtons(BuildContext context,_DemoState that){
@ -130,26 +130,26 @@ Widget allRaisedButtons(BuildContext context,_DemoState that){
* alert 弹框 * alert 弹框
* context:容器的父级 * context:容器的父级
* */ * */
void _showMessage(String name, BuildContext context) { // void _showMessage(String name, BuildContext context) {
showDialog( // showDialog(
// alert 的父级 // // alert 的父级
context: context, // context: context,
builder: (BuildContext context) { // builder: (BuildContext context) {
return AlertDialog( // return AlertDialog(
title: new Text('提示'), // title: new Text('提示'),
content: new Text(name), // content: new Text(name),
actions: <Widget>[ // actions: <Widget>[
new FlatButton( // new FlatButton(
// alert 的取消按钮 // // alert 的取消按钮
onPressed: () { // onPressed: () {
// 取消的事件 // // 取消的事件
Navigator.of(context).pop(true); // Navigator.of(context).pop(true);
}, // },
child: new Text('取消')) // child: new Text('取消'))
]); // ]);
} // }
); // );
} // }
/* /*
* 带align的text * 带align的text

View File

@ -16,7 +16,7 @@ import 'package:flutter/material.dart';
class RawMaterialButtonDefault extends StatelessWidget { class RawMaterialButtonDefault extends StatelessWidget {
final bool isDisabled; final bool isDisabled;
const RawMaterialButtonDefault([bool this.isDisabled = true]) const RawMaterialButtonDefault([ this.isDisabled = true])
: assert(isDisabled != null), : assert(isDisabled != null),
super(); super();
@ -39,10 +39,10 @@ class RawMaterialButtonCustom extends StatelessWidget {
final VoidCallback onPressed; final VoidCallback onPressed;
const RawMaterialButtonCustom( const RawMaterialButtonCustom(
[String this.txt = '自定义按钮', [ this.txt = '自定义按钮',
Color this.color = Colors.blueAccent, this.color = Colors.blueAccent,
ShapeBorder this.shape, this.shape,
VoidCallback this.onPressed]) this.onPressed])
: super(); : super();
@override @override

View File

@ -58,7 +58,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 RawMaterialButton 按钮 * 所有的 RawMaterialButton 按钮
*/ */
Widget allRawMaterialButtons(BuildContext context,_DemoState that){ Widget allRawMaterialButtons(BuildContext context,_DemoState that){
@ -102,26 +102,26 @@ Widget allRawMaterialButtons(BuildContext context,_DemoState that){
* alert 弹框 * alert 弹框
* context:容器的父级 * context:容器的父级
* */ * */
void _showMessage(String name, BuildContext context) { // void _showMessage(String name, BuildContext context) {
showDialog( // showDialog(
// alert 的父级 // // alert 的父级
context: context, // context: context,
builder: (BuildContext context) { // builder: (BuildContext context) {
return AlertDialog( // return AlertDialog(
title: new Text('提示'), // title: new Text('提示'),
content: new Text(name), // content: new Text(name),
actions: <Widget>[ // actions: <Widget>[
new FlatButton( // new FlatButton(
// alert 的取消按钮 // // alert 的取消按钮
onPressed: () { // onPressed: () {
// 取消的事件 // // 取消的事件
Navigator.of(context).pop(true); // Navigator.of(context).pop(true);
}, // },
child: new Text('取消')) // child: new Text('取消'))
]); // ]);
} // }
); // );
} // }
/* /*
* 带align的text * 带align的text

View File

@ -16,7 +16,7 @@ import 'package:flutter/material.dart';
class CheckboxDefault extends StatefulWidget{ class CheckboxDefault extends StatefulWidget{
final int index; final int index;
final parent; final parent;
const CheckboxDefault([this.parent,int this.index = -1]) : super(); const CheckboxDefault([this.parent, this.index = -1]) : super();
@override @override
State<StatefulWidget> createState() =>_CheckboxDefault(); State<StatefulWidget> createState() =>_CheckboxDefault();
} }
@ -47,7 +47,7 @@ class CheckboxSelect extends StatelessWidget {
final widget; final widget;
final parent; final parent;
const CheckboxSelect([this.widget,this.parent,int this.index = -1]) const CheckboxSelect([this.widget,this.parent, this.index = -1])
: super(); : super();
@override @override

View File

@ -8,7 +8,7 @@
* 对应文档地址:https://docs.flutter.io/flutter/material/Checkbox-class.html * 对应文档地址:https://docs.flutter.io/flutter/material/Checkbox-class.html
*/ */
import '../../../../../common/widget_demo.dart'; import '../../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
@ -54,7 +54,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 Checkbox 按钮 * 所有的 Checkbox 按钮
*/ */
Widget allCheckboxs(BuildContext context,_DemoState that){ Widget allCheckboxs(BuildContext context,_DemoState that){

View File

@ -7,7 +7,6 @@
* tartget: CheckboxListTile 的示例 * tartget: CheckboxListTile 的示例
*/ */
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*

View File

@ -7,9 +7,8 @@
* tartget: CheckboxListTile 的示例 * tartget: CheckboxListTile 的示例
*/ */
import '../../../../../common/widget_demo.dart'; import '../../../../../common/widget_demo.dart';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
import './demo.dart' as CheckboxListTileDemo; import './demo.dart' as CheckboxListTileDemo;
@ -38,7 +37,7 @@ const String _CheckboxListTileText2 =
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = '/element/Form/Checkbox/CheckboxListTile'; static const String routeName = '/element/Form/Checkbox/CheckboxListTile';
bool valBool = true; final bool valBool = true;
@override @override
_DemoState createState() => _DemoState(); _DemoState createState() => _DemoState();
} }
@ -55,7 +54,7 @@ class _DemoState extends State<Demo> {
} }
} }
/** /*
* 所有的 CheckboxListTile widget * 所有的 CheckboxListTile widget
* context: 运行上下文 * context: 运行上下文
* that: 指向有状态的 StatefulWidget * that: 指向有状态的 StatefulWidget

View File

@ -10,48 +10,47 @@
import '../../../../../common/widget_demo.dart'; import '../../../../../common/widget_demo.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import './text_field_demo.dart' ; import './text_field_demo.dart';
const String _textFieldText0 = """### **简介**
const String _textFieldText0 = > TextField 最常用的文本输入widget
"""### **简介** - 该 widget 作为文本输入框,可以接收用户以屏幕按键或者键盘输入的文本信息,该信息可以用于消息传递,搜索体验等
> Text Field “文本字段” - 用户修改文本信息时Onchange会被调用获取到最新的文本信息
- 文本字段允许用户输入文本,无论是硬件键盘还是屏幕键盘。 - 已知用户输入的字段文本输入完毕时例如通过按软键盘上的按钮确认输入完毕该widget会调用onSubmitted回调
- 每当用户更改字段中的文本时文本字段就会调用Onchange的回调。
- 如果用户指示他们在字段中输入完成例如通过按软键盘上的按钮则文本字段调用onSubmitted回调。
"""; """;
const String _textFieldText1 = const String _textFieldText1 = """### **基本用法**
"""### **基本用法** > 参数控制默认的按钮和禁用按钮
> 参数的默认的按钮和禁用按钮 - 默认情况下TextField 下方有一个下划线进行修饰。
- 默认情况下,文本字段具有在文本字段下方绘制分隔符的修饰 - 您可以使用decoration属性来控制该widget样式例如通过添加标签或图标。如果将decoration属性设置为空则将完全删除装饰包括装饰引入的额外填充以节省标签的空间
- 您可以使用装饰属性来控制装饰,例如通过添加标签或图标。如果将装饰属性设置为空,则将完全删除装饰,包括装饰引入的额外填充,以节省标签的空间 - 如果decoration属性是非null这是默认的文本字段需要它的父类是一个Material widget。当文本字段被点击时会出发被点击的效果
- 如果装饰是非null这是默认的文本字段需要它的祖先之一是一个材质widget。当文本字段被敲击时墨水溅到材料上的油漆被触发。 - 若要将TextField和其他FormFild集成到Form中请考虑使用TeTFrimeField。""";
- 若要将TeXFieldField集成到其他FieldFieldWrices窗体中请考虑使用TeTFrimeField。""";
const String _textFieldText2 = const String _textFieldText2 = """### **进阶用法**
"""### **进阶用法** > 实现稍微复杂点的效果TextField 的输入以数字优先为输入框做一些其他的效果如提示文字icon、标签文字等
> 实现稍微复杂点的效果键盘就变成了数字优先为输入框做一些其他的效果如提示文字icon、标签文字等
- 增加一个keyboardType属性把keyboardType设置为 TextInputType.number 让TextField获得焦点的时候弹出的键盘就变成了数字优先。 - 增加一个keyboardType属性把keyboardType设置为 TextInputType.number 让TextField获得焦点的时候弹出的键盘就变成了数字优先。
- 新增decoration属性设置相关属性可以发现当我们的TextField获得焦点时图标会自动变色提示文字会自动上移。 - 新增decoration属性设置相关属性可以发现当我们的TextField获得焦点时图标会自动变色提示文字会自动上移。
- onChanged是每次输入框内每次文字变更触发的回调onSubmitted是用户提交而触发的回调。 - onChanged是输入框内每次文字变更触发的回调方法onSubmitted是用户提交而触发的回调方法
- 每当用户改变输入框内的文字,都会在控制台输出现在的字符串.与onSubmitted用法相同。 - 每当用户改变输入框内的文字,都会在控制台输出现在的字符串.与onSubmitted用法相同。
"""; """;
class Demo extends StatefulWidget { class Demo extends StatefulWidget {
static const String routeName = 'elements/Form/Input/TextField'; static const String routeName = 'elements/Form/Input/TextField';
@override @override
_DemoState createState() => _DemoState(); _DemoState createState() => _DemoState();
} }
class _DemoState extends State<Demo> { class _DemoState extends State<Demo> {
String buttonShapeType = 'border'; // 边框类型 String buttonShapeType = 'border'; // 边框类型
void setButtonShapeType(){ void setButtonShapeType() {
String _buttonShapeType = (buttonShapeType == 'border') ? 'radius' : 'border'; String _buttonShapeType =
this.setState((){ (buttonShapeType == 'border') ? 'radius' : 'border';
this.setState(() {
buttonShapeType = _buttonShapeType; buttonShapeType = _buttonShapeType;
}); });
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
@ -68,4 +67,3 @@ class _DemoState extends State<Demo> {
); );
} }
} }

View File

@ -9,7 +9,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../../../common/widget_demo.dart'; import '../../../../../common/widget_demo.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'demo.dart'; import 'demo.dart';
const content1 = """ const content1 = """
# Radio # Radio

View File

@ -1,6 +1,6 @@
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
/** /*
* Author: xiaojia.dxj * Author: xiaojia.dxj
* Date: 2018/11/22 * Date: 2018/11/22
* Email: xiaojia.dxj@alibaba-inc.com * Email: xiaojia.dxj@alibaba-inc.com
@ -14,7 +14,7 @@ class AlignAlignment extends StatelessWidget {
final Alignment status; final Alignment status;
final String dec; final String dec;
const AlignAlignment(Alignment this.status, String this.dec) : super(); const AlignAlignment( this.status, this.dec) : super();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -39,8 +39,8 @@ class AlignFactor extends StatelessWidget {
final double hFactor; final double hFactor;
final String dec; final String dec;
const AlignFactor(Alignment this.status, double this.wFactor, const AlignFactor( this.status, this.wFactor,
double this.hFactor, String this.dec) this.hFactor, this.dec)
: super(); : super();
@override @override

View File

@ -41,12 +41,12 @@ class _DemoState extends State<Demo> {
contentList: [ contentList: [
_flatText0, _flatText0,
_flatText1, _flatText1,
_AlignCreate() _alignCreate()
], ],
); );
} }
Column _AlignCreate() { Column _alignCreate() {
return new Column( return new Column(
children: <Widget>[ children: <Widget>[
SizedBox(height: 10.0), SizedBox(height: 10.0),

View File

@ -11,7 +11,7 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'crossAxis', title: 'crossAxis',
child: Column( contentList: [Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Container(
@ -39,7 +39,7 @@ class _DemoState extends State<Demo> {
margin: const EdgeInsets.all(10.0), margin: const EdgeInsets.all(10.0),
), ),
], ],
), )],
docUrl: 'https://docs.flutter.io/flutter/widgets/Padding-class.html', docUrl: 'https://docs.flutter.io/flutter/widgets/Padding-class.html',
); );
} }

View File

@ -37,7 +37,7 @@ class _DemoState extends State<Demo> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WidgetDemo( return WidgetDemo(
title: 'flipAxis', title: 'flipAxis',
child: Flex( contentList: [Flex(
direction: _direction, direction: _direction,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
@ -72,7 +72,7 @@ class _DemoState extends State<Demo> {
onPressed: _changeDirection, onPressed: _changeDirection,
) )
], ],
), )],
docUrl: 'https://docs.flutter.io/flutter/painting/flipAxis.html', docUrl: 'https://docs.flutter.io/flutter/painting/flipAxis.html',
); );
} }

View File

@ -1,24 +0,0 @@
import 'package:flutter/material.dart';
import '../../../../model/widget.dart';
import './crossAxis/index.dart' as crossAxis;
import './flipAxis/index.dart' as flipAxis;
import './mainAxis/index.dart' as mainAxis;
List<WidgetPoint> widgetPoints = [
WidgetPoint(
name: 'crossAxis',
routerName: crossAxis.Demo.routeName,
buildRouter: (BuildContext context) => crossAxis.Demo(),
),
WidgetPoint(
name: 'flipAxis',
routerName: flipAxis.Demo.routeName,
buildRouter: (BuildContext context) => flipAxis.Demo(),
),
WidgetPoint(
name: 'mainAxis',
routerName: mainAxis.Demo.routeName,
buildRouter: (BuildContext context) => mainAxis.Demo(),
),
];

Some files were not shown because too many files have changed in this diff Show More