mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-06-08 12:09:00 +08:00
Merge branch 'develop' of github.com:alibaba/flutter-common-widgets-app into develop
This commit is contained in:
CHANGE-LOG.mdREADME.mdpubspec.yaml
android/app/src/main
assets
ios
lib
common
components
cate_card.dartcategory.dartcomp_list.dartdisclaimer_msg.dartfull_screen_code_dialog.dartlist_refresh.dartlist_view_item.dartmarkdown.dartwidget_demo.dartwidget_item.dartwidget_item_container.dart
event
generated
main.dartmodel
resources
routers
utils
example_code_parser.darthigh_light_code.dartnet_utils.dartprovider.dartsql.dartstyle.dartsyntax_highlighter.dartutil.dart
views
widgets
components
Bar
AppBar
BottomAppBar
ButtonBar
FlexibleSpaceBar
SliverAppBar
SnackBar
SnackBarAction
TabBar
Card/Card
Chip
Chip
ChipTheme
ChipThemeData
ChoiceChip
FilterChip
RawChip
inputChip
Dialog
Grid
LIst
Menu
CheckedPopupMenuItem
DropdownMenuItem
PopupMenuButton
PopupMenuDivider
PopupMenuEntry
PopupMenuItem
PopupMenuItemState
Navigation
Panel
Pick
Progress
CircularProgressIndicator
LinearProgressIndicator
RefreshProgressIndicator
Scaffold
Scroll
BoxScrollView
CustomScrollView
NestedScrollView
ScrollMetrics
ScrollPhysics
ScrollView
Scrollable
ScrollbarPainter
Tab/Tab
elements
Form
Button
DropdownButton
FlatButton
FloatingActionButton
IconButton
OutlineButton
PopupMenuButton
RaisedButton
RawMaterialButton
CheckBox
Input/TextField
Radio
Slider
Switch
Text
Frame
Align/Align
Box
ConstrainedBox
DecoratedBox
Fittedbox
LimitedBox
OverflowBox
RenderBox
RotatedBox
SizeBox
SizedOverflowBox
TextBox
UnconstrainedBox
Expanded/Expanded
Layout
Spacing
Stack
Table/Table
Media
Icon
Image
AssetImage
DecorationImage
DecorationImagePainter
ExactAssetImage
FadeInImage
FileImage
Image
MemoryImage
NetworkImage
RawImage
paintImage
themes
Cupertino
CupertinoApp
CupertinoButton
CupertinoColors
CupertinoIcons
CupertinoNavigationBar
CupertinoPageRoute
CupertinoPageScaffold
CupertinoPicker
CupertinoPopupSurface
CupertinoScrollbar
CupertinoSegmentedControl
CupertinoSlider
CupertinoSliverNavigationBar
CupertinoSwitch
CupertinoTabBar
CupertinoTabScaffold
CupertinoTabView
CupertinoTimerPicker
Material
MaterialAccentColor
MaterialApp
MaterialButton
MaterialColor
MaterialPageRoute
MergeableMaterialItem
tools
62
CHANGE-LOG.md
Normal file
62
CHANGE-LOG.md
Normal file
@ -0,0 +1,62 @@
|
||||
## 更新日志
|
||||
|
||||
#### 2019-1-24
|
||||
- [x] 功能:更新小部件的图标
|
||||
- [x] 功能:添加CupertinoTimerPickerDemo
|
||||
- [x] 调试:消除警告
|
||||
- [x] 修复:关于手册图标更换
|
||||
- [x] 添加:文案描述
|
||||
- [x] 添加:CupertinoPicker,CupertinoPopupSurface
|
||||
#### 2019-1-23
|
||||
- [x] 修复: 导航栏home返回报错
|
||||
- [x] 修复:收集错误
|
||||
- [x] 添加:CupertinoNavigationBar CupertinoPageRoute CupertinoPageScaffold
|
||||
#### 2019-1-22
|
||||
- [x] 功能:在Allsimon拉请求中添加英文简介
|
||||
#### 2019-1-21
|
||||
- [x] 功能:Cupertino的子项
|
||||
#### 2019-1-20
|
||||
- [x] 功能:CupertinoSwitch演示
|
||||
- [x] 功能:为搜索列表加入图标
|
||||
- [x] 功能:CupertinoSliverRefreshControl演示
|
||||
- [x] 功能:CupertinoSliverNavigationBar演示
|
||||
#### 2019-1-18
|
||||
- [x] 更新:SharedPreferences保存数据和android设备布局溢出
|
||||
- [x] 功能:添加CupertinoScrollbar演示
|
||||
- [x] 功能:第四页暂时用欢迎页替代。后期再开发
|
||||
#### 2019-1-17
|
||||
- [x] 添加:+许可证
|
||||
#### 2019-1-16
|
||||
- [x] 转换:将README翻译为En语言环境
|
||||
- [x] 功能:CupertinoScrollbar演示
|
||||
#### 2019-1-14
|
||||
- [x] 添加:增加手册页面
|
||||
- [x] 功能:文字演示
|
||||
- [x] 重构:修改过的图标
|
||||
- [x] 重构:文档,文章,组件收藏,新增webView
|
||||
- [x] 重构:修改过的演示
|
||||
- [x] 重构:代码视图
|
||||
- [x] 更新:版本 和readme.md
|
||||
- [x] 修改:添加代码视图
|
||||
- [x] 功能:添加搜索历史记录板
|
||||
- [x] 修改:列出加标头错误
|
||||
#### 2019-1-15
|
||||
- [x] 功能:welcomepage
|
||||
#### 2019-1-13
|
||||
- [x] 添加:一些输入描述
|
||||
- [x] 功能:加入GridPaper&SliverGrid
|
||||
- [x] 重构:修改db
|
||||
- [x] 重构:删除数据库 TabBarView
|
||||
- [x] 添加:网格视图
|
||||
- [x] 修改:checkbosListTile 错误
|
||||
- [x] 修改:自动提示文案
|
||||
- [x] 功能:增加免责声明,声明组件,自动弹出,左上角入口
|
||||
- [x] 重构:整理数据库初始逻辑,判断数据库完整性,判断是否存在已知的cat,widget,collection 三张表。
|
||||
- [x] 修复:DialogDemo,无法关闭的问题
|
||||
#### 2019-1-12
|
||||
- [x] 修复:icon没有,但内容有的,组件,给补充了icon
|
||||
- [x] 修改:1.整理文件 2.修正分析
|
||||
- [x] 更新:flutter_rookie_book => flutter_go
|
||||
- [x] 更新:更新SearchInput文件名=> search_input
|
||||
- [x] 修改:文件名称的大小写规范
|
||||
- [x] 修改:修正bottomNavigationBar iconButton警告
|
@ -79,5 +79,3 @@ flutter优点主要包括:
|
||||
|
||||
Powered by [阿里拍卖前端团队](https://github.com/alibaba-paimai-frontend)<img src="https://img.alicdn.com/tfs/TB1foEhAMHqK1RjSZJnXXbNLpXa-166-166.png" width=20 height=20>
|
||||
|
||||
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
FlutterApplication and put your custom class here. -->
|
||||
<application
|
||||
android:name="io.flutter.app.FlutterApplication"
|
||||
android:label="菜鸟手册"
|
||||
android:label="flutter go"
|
||||
android:icon="@drawable/logo">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
|
BIN
assets/app.db
BIN
assets/app.db
Binary file not shown.
@ -10,7 +10,6 @@
|
||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||
333E5DAE7FC10AC69FEC26C0 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA792F029EDD7A11295D192 /* libPods-Runner.a */; };
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||
2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; };
|
||||
3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
|
||||
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
|
||||
@ -41,7 +40,6 @@
|
||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||
2D5378251FAA1A9400D5DBA9 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = Flutter/flutter_assets; sourceTree = SOURCE_ROOT; };
|
||||
3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = "<group>"; };
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||
@ -92,7 +90,6 @@
|
||||
children = (
|
||||
3B80C3931E831B6300D905FE /* App.framework */,
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
|
||||
2D5378251FAA1A9400D5DBA9 /* flutter_assets */,
|
||||
9740EEBA1CF902C7004384FC /* Flutter.framework */,
|
||||
9740EEB21CF90195004384FC /* Debug.xcconfig */,
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
|
||||
@ -209,7 +206,6 @@
|
||||
files = (
|
||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
||||
2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */,
|
||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
||||
);
|
||||
|
@ -5,7 +5,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>菜鸟App</string>
|
||||
<string>Flutter Go</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
|
@ -1,29 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
//颜色配置
|
||||
class AppColor{
|
||||
static const int white = 0xFFFFFFFF;
|
||||
static const int mainTextColor = 0xFF121917;
|
||||
static const int subTextColor = 0xff959595;
|
||||
}
|
||||
|
||||
//文本设置
|
||||
class AppText{
|
||||
static const middleSize = 16.0;
|
||||
|
||||
static const middleText = TextStyle(
|
||||
color: Color(AppColor.mainTextColor),
|
||||
fontSize: middleSize,
|
||||
);
|
||||
|
||||
static const middleSubText = TextStyle(
|
||||
color: Color(AppColor.subTextColor),
|
||||
fontSize: middleSize,
|
||||
);
|
||||
}
|
||||
class WidgetDemoColor {
|
||||
static const int fontColor = 0xFF607173;
|
||||
static const int iconColor = 0xFF607173;
|
||||
static const int borderColor = 0xFFEFEFEF;
|
||||
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
import 'package:event_bus/event_bus.dart';
|
||||
|
||||
EventBus eventBus = new EventBus();
|
||||
|
||||
class MyEvent {
|
||||
String text;
|
||||
MyEvent(this.text);
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
class WidgetDemo extends StatelessWidget {
|
||||
final Widget child;
|
||||
final String docUrl;
|
||||
final String title;
|
||||
final String codeUrl;
|
||||
|
||||
WidgetDemo(
|
||||
{Key key,
|
||||
@required this.title,
|
||||
@required this.child,
|
||||
@required this.codeUrl,
|
||||
@required this.docUrl})
|
||||
: super(key: key);
|
||||
|
||||
void _launchURL(String url) async {
|
||||
if (await canLaunch(url)) {
|
||||
await launch(url);
|
||||
} else {
|
||||
throw 'Could not launch $url';
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context,[bottomNaviBar]) {
|
||||
return Scaffold(
|
||||
appBar: new AppBar(
|
||||
title: Text(title),
|
||||
actions: <Widget>[
|
||||
new IconButton(
|
||||
tooltip: 'widget doc',
|
||||
onPressed: (){
|
||||
_launchURL(docUrl);
|
||||
},
|
||||
icon: Icon(Icons.library_books),
|
||||
),
|
||||
new IconButton(
|
||||
tooltip: 'github code',
|
||||
onPressed: (){
|
||||
_launchURL(codeUrl);
|
||||
},
|
||||
icon: Icon(Icons.code),
|
||||
),
|
||||
new IconButton(
|
||||
tooltip: 'goBack home',
|
||||
onPressed: (){
|
||||
Navigator.popUntil(context, ModalRoute.withName('/'));
|
||||
},
|
||||
icon: Icon(Icons.home),
|
||||
),
|
||||
],
|
||||
),
|
||||
body: new Container(
|
||||
padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0),
|
||||
child: ListView(
|
||||
shrinkWrap: true,
|
||||
padding: const EdgeInsets.all(0.0),
|
||||
children: <Widget>[
|
||||
Column(
|
||||
children: <Widget>[
|
||||
SizedBox(
|
||||
height: 10.0,
|
||||
),
|
||||
child,
|
||||
],
|
||||
),
|
||||
])
|
||||
),
|
||||
bottomNavigationBar: (bottomNaviBar is Widget)?bottomNaviBar:null
|
||||
);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../model/cat.dart';
|
||||
import '../common/widget_name_to_icon.dart';
|
||||
import '../resources/widget_name_to_icon.dart';
|
||||
import '../components/widget_item_container.dart';
|
||||
|
||||
class CateCard extends StatefulWidget {
|
||||
|
@ -1,99 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_go/views/Detail.dart';
|
||||
|
||||
class CompList extends StatefulWidget {
|
||||
@override
|
||||
State<StatefulWidget> createState() {
|
||||
return new ListState();
|
||||
}
|
||||
}
|
||||
|
||||
class ListState extends State<CompList> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
/// getData() ; this is test;
|
||||
return new ListView.builder(
|
||||
//itemCount: data == null ? 0 : data.length,
|
||||
itemCount: 100,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return new Card(
|
||||
/////child: new Container(
|
||||
/////padding: new EdgeInsets.all(10.0),
|
||||
child: new ListTile(
|
||||
subtitle: new Container(
|
||||
child: new Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
new Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
new Expanded(
|
||||
child: new Text("Title",
|
||||
|
||||
///data[index]["title"],
|
||||
style: new TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 16.0)),
|
||||
)
|
||||
],
|
||||
),
|
||||
new Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
new Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
new Text("time:"),
|
||||
new Text("2018-05-06")
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
new Row(
|
||||
children: <Widget>[
|
||||
new Container(
|
||||
padding:
|
||||
const EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 2.0),
|
||||
child: new Text("content"),
|
||||
|
||||
///child: new Text("id:"+data[index]["id"].toString()),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
trailing: new Icon(
|
||||
Icons.keyboard_arrow_right,
|
||||
color: Colors.grey,
|
||||
),
|
||||
|
||||
///onTap: () => _onTap(data[index]["id"].toString()),
|
||||
onTap: () => _onTap('1'),
|
||||
),
|
||||
/////),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void _onTap(String id){
|
||||
Navigator.of(context).push(new PageRouteBuilder(
|
||||
opaque: false,
|
||||
pageBuilder: (BuildContext context, _,__){
|
||||
return new Detail(id);
|
||||
},
|
||||
transitionsBuilder: (_,Animation<double> animation,__,Widget child){
|
||||
return new FadeTransition(
|
||||
opacity: animation,
|
||||
child: new SlideTransition(position: new Tween<Offset>(
|
||||
begin: const Offset(0.0, 1.0),
|
||||
end: Offset.zero,
|
||||
).animate(animation),child: child,
|
||||
),
|
||||
) ;
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
}
|
@ -5,11 +5,10 @@
|
||||
* Time: 下午9:19
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
//import 'package:flutter_rookie_book/model/collection_general.dart';
|
||||
//import 'package:flutter_rookie_book/model/collection_general.dart';
|
||||
import 'dart:async';
|
||||
|
||||
const disclaimerText1 =
|
||||
'\r\r\r\r\r\r本APP属于个人的非赢利性开源项目,以供开源社区使用,凡本APP转载的所有的文章 、图片、音频、视频文件等资料的版权归版权所有人所有,本APP采用的非本站原创文章及图片等内容无法一一和版权者联系,如果本网所选内容的文章作者及编辑认为其作品不宜上网供大家浏览,或不应无偿使用请及时用电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。';
|
||||
|
@ -5,8 +5,8 @@
|
||||
* @Last Modified time: 2019-01-14 14:42:00
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'example_code_parser.dart';
|
||||
import 'syntax_highlighter.dart';
|
||||
import 'package:flutter_go/utils/example_code_parser.dart';
|
||||
import 'package:flutter_go/utils/syntax_highlighter.dart';
|
||||
|
||||
class FullScreenCodeDialog extends StatefulWidget {
|
||||
const FullScreenCodeDialog({this.filePath});
|
@ -7,6 +7,7 @@
|
||||
* tartget: FlatButton 的示例
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
|
||||
class ListRefresh extends StatefulWidget {
|
||||
final renderItem;
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'package:flutter_markdown/flutter_markdown.dart' as md;
|
||||
import '../common/high_light_code.dart';
|
||||
import 'package:flutter_go/utils/high_light_code.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// 使用方法
|
||||
|
@ -9,9 +9,8 @@ import '../routers/routers.dart';
|
||||
import '../components/markdown.dart';
|
||||
import '../model/collection.dart';
|
||||
import '../widgets/index.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import '../event/event-bus.dart';
|
||||
import '../event/event-model.dart';
|
||||
import '../event/event_bus.dart';
|
||||
import '../event/event_model.dart';
|
||||
import 'dart:core';
|
||||
|
||||
class WidgetDemo extends StatefulWidget {
|
||||
@ -27,8 +26,7 @@ class WidgetDemo extends StatefulWidget {
|
||||
@required this.contentList,
|
||||
@required this.codeUrl,
|
||||
@required this.docUrl,
|
||||
this.bottomNaviBar
|
||||
})
|
||||
this.bottomNaviBar})
|
||||
: super(key: key);
|
||||
|
||||
_WidgetDemoState createState() => _WidgetDemoState();
|
||||
@ -40,17 +38,7 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
||||
var _collectionIcons;
|
||||
List widgetDemosList = new WidgetDemoList().getDemos();
|
||||
String _router = '';
|
||||
|
||||
void showInSnackBar(String value) {
|
||||
Fluttertoast.showToast(
|
||||
msg: value,
|
||||
toastLength: Toast.LENGTH_SHORT,
|
||||
gravity: ToastGravity.CENTER,
|
||||
timeInSecForIos: 1,
|
||||
backgroundColor: Colors.grey,
|
||||
textColor: Colors.white);
|
||||
}
|
||||
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
List<Widget> _buildContent() {
|
||||
List<Widget> _list = [
|
||||
@ -99,8 +87,8 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
||||
setState(() {
|
||||
_hasCollected = false;
|
||||
});
|
||||
showInSnackBar('已取消收藏');
|
||||
|
||||
_scaffoldKey.currentState
|
||||
.showSnackBar(SnackBar(content: Text('已取消收藏')));
|
||||
if (ApplicationEvent.event != null) {
|
||||
ApplicationEvent.event
|
||||
.fire(CollectionEvent(widget.title, _router, true));
|
||||
@ -124,19 +112,21 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
||||
.fire(CollectionEvent(widget.title, _router, false));
|
||||
}
|
||||
|
||||
showInSnackBar('收藏成功');
|
||||
_scaffoldKey.currentState
|
||||
.showSnackBar(SnackBar(content: Text('收藏成功')));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void _selectValue(value){
|
||||
if(value == 'doc'){
|
||||
void _selectValue(value) {
|
||||
if (value == 'doc') {
|
||||
// _launchURL(widget.docUrl);
|
||||
Application.router.navigateTo(context, '${Routes.webViewPage}?title=${Uri.encodeComponent(widget.title)} Doc&&url=${Uri.encodeComponent(widget.docUrl)}');
|
||||
}else if(value =='code'){
|
||||
Application.router.navigateTo(context, '${Routes.codeView}?filePath=${Uri.encodeComponent(widget.codeUrl)}');
|
||||
|
||||
Application.router.navigateTo(context,
|
||||
'${Routes.webViewPage}?title=${Uri.encodeComponent(widget.title)} Doc&&url=${Uri.encodeComponent(widget.docUrl)}');
|
||||
} else if (value == 'code') {
|
||||
Application.router.navigateTo(context,
|
||||
'${Routes.codeView}?filePath=${Uri.encodeComponent(widget.codeUrl)}');
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,6 +138,7 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
||||
_collectionIcons = Icons.favorite_border;
|
||||
}
|
||||
return Scaffold(
|
||||
key: _scaffoldKey,
|
||||
appBar: AppBar(
|
||||
title: Text(widget.title),
|
||||
actions: <Widget>[
|
||||
@ -169,7 +160,10 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
||||
const PopupMenuItem<String>(
|
||||
value: 'doc',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.library_books,size: 22.0,),
|
||||
leading: Icon(
|
||||
Icons.library_books,
|
||||
size: 22.0,
|
||||
),
|
||||
title: Text('查看文档'),
|
||||
),
|
||||
),
|
||||
@ -177,7 +171,10 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
||||
const PopupMenuItem<String>(
|
||||
value: 'code',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.code,size: 22.0,),
|
||||
leading: Icon(
|
||||
Icons.code,
|
||||
size: 22.0,
|
||||
),
|
||||
title: Text('查看Demo'),
|
||||
),
|
||||
),
|
||||
@ -197,8 +194,7 @@ class _WidgetDemoState extends State<WidgetDemo> {
|
||||
],
|
||||
),
|
||||
),
|
||||
bottomNavigationBar: (widget.bottomNaviBar is Widget) ? widget
|
||||
.bottomNaviBar : null
|
||||
);
|
||||
bottomNavigationBar:
|
||||
(widget.bottomNaviBar is Widget) ? widget.bottomNaviBar : null);
|
||||
}
|
||||
}
|
@ -2,8 +2,8 @@
|
||||
* @author 一凨
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../common/style.dart';
|
||||
import '../common/widget_name_to_icon.dart';
|
||||
import 'package:flutter_go/utils/style.dart';
|
||||
import 'package:flutter_go/resources/widget_name_to_icon.dart';
|
||||
|
||||
String _widgetName;
|
||||
|
||||
@ -13,9 +13,15 @@ class WidgetItem extends StatelessWidget {
|
||||
final int index; //用于计算border
|
||||
final int totalCount;
|
||||
final int rowLength;
|
||||
final String textSize;
|
||||
|
||||
WidgetItem(
|
||||
{this.title, this.onTap, this.index, this.totalCount, this.rowLength});
|
||||
{this.title,
|
||||
this.onTap,
|
||||
this.index,
|
||||
this.totalCount,
|
||||
this.rowLength,
|
||||
this.textSize});
|
||||
|
||||
Border _buildBorder(context) {
|
||||
Border _border;
|
||||
@ -64,6 +70,9 @@ class WidgetItem extends StatelessWidget {
|
||||
Icons.crop,
|
||||
);
|
||||
}
|
||||
final textStyle = (textSize == 'middle')
|
||||
? TextStyle(fontSize: 13.8, fontFamily: 'MediumItalic')
|
||||
: TextStyle(fontSize: 16.0);
|
||||
return InkWell(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
@ -80,7 +89,7 @@ class WidgetItem extends StatelessWidget {
|
||||
SizedBox(
|
||||
height: 8.0,
|
||||
),
|
||||
Text(_widgetName),
|
||||
Text(_widgetName, style: textStyle),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
@ -7,6 +7,7 @@ class WidgetItemContainer extends StatelessWidget {
|
||||
final int columnCount; //一行几个
|
||||
final List<dynamic> categories;
|
||||
final bool isWidgetPoint;
|
||||
|
||||
// 所有的可用demos;
|
||||
final List widgetDemosList = new WidgetDemoList().getDemos();
|
||||
|
||||
@ -50,6 +51,7 @@ class WidgetItemContainer extends StatelessWidget {
|
||||
index: addI,
|
||||
totalCount: length,
|
||||
rowLength: columnCount,
|
||||
textSize: isWidgetPoint ? 'middle' : 'small',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -1,78 +0,0 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
// ignore_for_file: non_constant_identifier_names
|
||||
// ignore_for_file: camel_case_types
|
||||
// ignore_for_file: prefer_single_quotes
|
||||
|
||||
//This file is automatically generated. DO NOT EDIT, all your changes would be lost.
|
||||
|
||||
class S implements WidgetsLocalizations {
|
||||
const S();
|
||||
|
||||
static const GeneratedLocalizationsDelegate delegate =
|
||||
const GeneratedLocalizationsDelegate();
|
||||
|
||||
static S of(BuildContext context) =>
|
||||
Localizations.of<S>(context, WidgetsLocalizations);
|
||||
|
||||
@override
|
||||
TextDirection get textDirection => TextDirection.ltr;
|
||||
|
||||
}
|
||||
|
||||
class en extends S {
|
||||
const en();
|
||||
}
|
||||
|
||||
|
||||
class GeneratedLocalizationsDelegate extends LocalizationsDelegate<WidgetsLocalizations> {
|
||||
const GeneratedLocalizationsDelegate();
|
||||
|
||||
List<Locale> get supportedLocales {
|
||||
return const <Locale>[
|
||||
|
||||
const Locale("en", ""),
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
LocaleResolutionCallback resolution({Locale fallback}) {
|
||||
return (Locale locale, Iterable<Locale> supported) {
|
||||
final Locale languageLocale = new Locale(locale.languageCode, "");
|
||||
if (supported.contains(locale))
|
||||
return locale;
|
||||
else if (supported.contains(languageLocale))
|
||||
return languageLocale;
|
||||
else {
|
||||
final Locale fallbackLocale = fallback ?? supported.first;
|
||||
return fallbackLocale;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@override
|
||||
Future<WidgetsLocalizations> load(Locale locale) {
|
||||
final String lang = getLang(locale);
|
||||
switch (lang) {
|
||||
|
||||
case "en":
|
||||
return new SynchronousFuture<WidgetsLocalizations>(const en());
|
||||
|
||||
default:
|
||||
return new SynchronousFuture<WidgetsLocalizations>(const S());
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
bool isSupported(Locale locale) => supportedLocales.contains(locale);
|
||||
|
||||
@override
|
||||
bool shouldReload(GeneratedLocalizationsDelegate old) => false;
|
||||
}
|
||||
|
||||
String getLang(Locale l) => l.countryCode != null && l.countryCode.isEmpty
|
||||
? l.languageCode
|
||||
: l.toString();
|
@ -3,7 +3,7 @@ import 'package:fluro/fluro.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'routers/routers.dart';
|
||||
import 'routers/application.dart';
|
||||
import 'common/provider.dart';
|
||||
import 'package:flutter_go/utils/provider.dart';
|
||||
|
||||
import 'views/welcome_page/index.dart';
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
import 'dart:async';
|
||||
import '../common/sql.dart';
|
||||
import 'package:flutter_go/utils/sql.dart';
|
||||
|
||||
abstract class CatInterface{
|
||||
int get id;
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2019-01-08 17:37:42
|
||||
*/
|
||||
import 'dart:async';
|
||||
import '../common/sql.dart';
|
||||
import 'package:flutter_go/utils/sql.dart';
|
||||
|
||||
abstract class CollectionInterface {
|
||||
String get name;
|
||||
|
@ -1,68 +0,0 @@
|
||||
/**
|
||||
* Created with Android Studio.
|
||||
* User: 一晟
|
||||
* Date: 2019/1/12
|
||||
* Time: 下午9:19
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
*/
|
||||
import 'dart:async';
|
||||
import '../common/sql.dart';
|
||||
|
||||
abstract class CollectionInterface {
|
||||
String get key;
|
||||
String get values;
|
||||
}
|
||||
|
||||
class CollectionGeneral implements CollectionInterface {
|
||||
String key;
|
||||
String values;
|
||||
|
||||
CollectionGeneral({this.key, this.values});
|
||||
|
||||
factory CollectionGeneral.fromJSON(Map json){
|
||||
return CollectionGeneral(key: json['name'],values: json['values']);
|
||||
}
|
||||
|
||||
Object toMap() {
|
||||
return {'key': key, 'values': values};
|
||||
}
|
||||
}
|
||||
|
||||
class CollectionControlModel {
|
||||
final String table = 'collectionGeneral';
|
||||
Sql sql;
|
||||
|
||||
CollectionControlModel() {
|
||||
sql = Sql.setTable(table);
|
||||
}
|
||||
|
||||
// 获取所有的收藏
|
||||
|
||||
// 插入新收藏
|
||||
Future insert(CollectionGeneral collection) {
|
||||
var result =
|
||||
sql.insert({'key': collection.key, 'values': collection.values});
|
||||
return result;
|
||||
}
|
||||
|
||||
// 获取全部的收藏
|
||||
Future<List<CollectionGeneral>> getAllCollection() async {
|
||||
List list = await sql.getByCondition();
|
||||
List<CollectionGeneral> resultList = [];
|
||||
list.forEach((item){
|
||||
resultList.add(CollectionGeneral.fromJSON(item));
|
||||
});
|
||||
return resultList;
|
||||
}
|
||||
|
||||
// 通过收藏名获取router
|
||||
Future getRouterByName(String key) async {
|
||||
List list = await sql.getByCondition(conditions: {'key': key});
|
||||
return list;
|
||||
}
|
||||
|
||||
// 删除
|
||||
Future deleteByName(String key) async{
|
||||
return await sql.delete(key,'key');
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
|
||||
import 'dart:async';
|
||||
import '../common/sql.dart';
|
||||
import 'package:flutter_go/utils/sql.dart';
|
||||
import "package:flutter/material.dart";
|
||||
|
||||
abstract class WidgetInterface {
|
||||
|
@ -157,12 +157,12 @@ class WidgetName2Icon {
|
||||
"CupertinoPopupSurface":Icons.center_focus_weak,
|
||||
"CupertinoScrollbar": Icons.fullscreen,
|
||||
"CupertinoSlider": Icons.switch_camera,
|
||||
"CupertinoSegmentedControl": Icons.radio_button_checked,
|
||||
"CupertinoSegmentedControl": Icons.business_center,
|
||||
"CupertinoSliverNavigationBar": Icons.subtitles,
|
||||
"CupertinoSwitch": Icons.check_box,
|
||||
"CupertinoSwitch": Icons.radio_button_checked,
|
||||
"CupertinoTabBar": Icons.tab,
|
||||
"CupertinoTabScaffold": Icons.tab,
|
||||
"CupertinoTabView": Icons.table_chart,
|
||||
"CupertinoTabScaffold": Icons.crop_original,
|
||||
"CupertinoTabView": Icons.tablet,
|
||||
"CupertinoTimerPicker": Icons.timer
|
||||
};
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluro/fluro.dart';
|
||||
import '../views/category.dart';
|
||||
import 'package:flutter_go/components/category.dart';
|
||||
import '../widgets/404.dart';
|
||||
import '../common/full_screen_code_dialog.dart';
|
||||
import '../views/web_view_page.dart';
|
||||
import '../views/home.dart';
|
||||
import 'package:flutter_go/components/full_screen_code_dialog.dart';
|
||||
import 'package:flutter_go/views/web_page/web_view_page.dart';
|
||||
import 'package:flutter_go/views/first_page/home.dart';
|
||||
|
||||
// app的首页
|
||||
var homeHandler = new Handler(
|
||||
|
@ -9,7 +9,7 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:async';
|
||||
import '../routers/application.dart';
|
||||
import 'package:flutter_go/routers/application.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import 'package:flutter/material.dart';
|
@ -59,7 +59,6 @@ class Provider {
|
||||
//Get a location using getDatabasesPath
|
||||
String databasesPath = await getDatabasesPath();
|
||||
String path = join(databasesPath, 'flutter.db');
|
||||
|
||||
try {
|
||||
db = await openDatabase(path);
|
||||
} catch (e) {
|
@ -1,22 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Detail extends StatelessWidget {
|
||||
|
||||
final String id ;
|
||||
Detail(this.id) ;
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return new Scaffold(
|
||||
appBar: new AppBar(
|
||||
title: new Text('List Detail'),
|
||||
),
|
||||
body: new Center(
|
||||
child: new Text('msg:'+ 'id='+id),
|
||||
),
|
||||
) ;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -5,11 +5,11 @@
|
||||
* @Last Modified time: 2019-01-14 20:13:28
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../model/collection.dart';
|
||||
import '../routers/application.dart';
|
||||
import '../routers/routers.dart';
|
||||
import '../event/event-bus.dart';
|
||||
import '../event/event-model.dart';
|
||||
import 'package:flutter_go/model/collection.dart';
|
||||
import 'package:flutter_go/routers/application.dart';
|
||||
import 'package:flutter_go/routers/routers.dart';
|
||||
import 'package:flutter_go/event/event_bus.dart';
|
||||
import 'package:flutter_go/event/event_model.dart';
|
||||
import 'package:event_bus/event_bus.dart';
|
||||
|
||||
class CollectionPage extends StatefulWidget {
|
@ -1,22 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Detail extends StatelessWidget {
|
||||
|
||||
final String id ;
|
||||
Detail(this.id) ;
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return new Scaffold(
|
||||
appBar: new AppBar(
|
||||
title: new Text('List Detail'),
|
||||
),
|
||||
body: new Center(
|
||||
child: new Text('msg:'+ 'id='+id),
|
||||
),
|
||||
) ;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,13 +1,13 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_go/common/list_view_item.dart';
|
||||
import 'package:flutter_go/components/list_view_item.dart';
|
||||
import 'package:flutter_go/components/list_refresh.dart' as listComp;
|
||||
import 'package:flutter_go/components/pagination.dart';
|
||||
import 'package:flutter_go/components/first_page_item.dart';
|
||||
import 'package:flutter_go/views/first_page/first_page_item.dart';
|
||||
import 'package:flutter_go/components/disclaimer_msg.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../common/net_utils.dart';
|
||||
import 'package:flutter_go/utils/net_utils.dart';
|
||||
|
||||
GlobalKey<DisclaimerMsgState> key;
|
||||
|
@ -7,7 +7,7 @@
|
||||
* tartget: FirstPageItem
|
||||
*/
|
||||
|
||||
import '../common/Util.dart';
|
||||
import 'package:flutter_go/utils/util.dart';
|
||||
|
||||
class FirstPageItem {
|
||||
bool hot;
|
@ -12,16 +12,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
|
||||
import 'first_page.dart';
|
||||
import 'widget_page.dart';
|
||||
import 'package:flutter_go/views/first_page/first_page.dart';
|
||||
import 'package:flutter_go/views/widget_page/widget_page.dart';
|
||||
import 'package:flutter_go/views/welcome_page/fourth_page.dart';
|
||||
import 'collection_page.dart';
|
||||
import '../routers/application.dart';
|
||||
import '../common/provider.dart';
|
||||
import '../model/widget.dart';
|
||||
import '../widgets/index.dart';
|
||||
import 'package:flutter_go/views/collection_page/collection_page.dart';
|
||||
import 'package:flutter_go/routers/application.dart';
|
||||
import 'package:flutter_go/utils//provider.dart';
|
||||
import 'package:flutter_go/model/widget.dart';
|
||||
import 'package:flutter_go/widgets/index.dart';
|
||||
import 'package:flutter_go/components/search_input.dart';
|
||||
import '../common/widget_name_to_icon.dart';
|
||||
import 'package:flutter_go/resources/widget_name_to_icon.dart';
|
||||
|
||||
const int ThemeColor = 0xFFC91B3A;
|
||||
|
@ -3,7 +3,7 @@ import 'dart:async';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import './pager_indicator.dart';
|
||||
import 'package:flutter_go/views/fourth_page/pager_indicator.dart';
|
||||
|
||||
class PageDragger extends StatefulWidget {
|
||||
|
@ -46,7 +46,6 @@ class CircleRevealClipper extends CustomClipper<Rect>{
|
||||
|
||||
@override
|
||||
bool shouldReclip(CustomClipper<Rect> oldClipper) {
|
||||
// TODO: implement shouldReclip
|
||||
return true;
|
||||
}
|
||||
|
2
lib/components/fourth_page_feature/pager_indicator.dart → lib/views/fourth_page/pager_indicator.dart
2
lib/components/fourth_page_feature/pager_indicator.dart → lib/views/fourth_page/pager_indicator.dart
@ -1,7 +1,7 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import './pages.dart';
|
||||
import 'package:flutter_go/views/fourth_page/pages.dart';
|
||||
|
||||
class PagerIndicator extends StatelessWidget {
|
||||
|
@ -6,10 +6,9 @@
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
|
||||
import '../model/collection.dart';
|
||||
import '../event/event-bus.dart';
|
||||
import '../event/event-model.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:flutter_go/model/collection.dart';
|
||||
import 'package:flutter_go/event/event_bus.dart';
|
||||
import 'package:flutter_go/event/event_model.dart';
|
||||
import 'dart:core';
|
||||
|
||||
class WebViewPage extends StatefulWidget {
|
||||
@ -26,23 +25,15 @@ class _WebViewPageState extends State<WebViewPage> {
|
||||
var _collectionIcons;
|
||||
CollectionControlModel _collectionControl = new CollectionControlModel();
|
||||
|
||||
void showInSnackBar(String value) {
|
||||
Fluttertoast.showToast(
|
||||
msg: value,
|
||||
toastLength: Toast.LENGTH_SHORT,
|
||||
gravity: ToastGravity.CENTER,
|
||||
timeInSecForIos: 1,
|
||||
backgroundColor: Colors.grey,
|
||||
textColor: Colors.white);
|
||||
}
|
||||
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_collectionControl.getRouterByName(Uri.encodeComponent(widget.title.trim())).then((list) {
|
||||
|
||||
_collectionControl
|
||||
.getRouterByName(Uri.encodeComponent(widget.title.trim()))
|
||||
.then((list) {
|
||||
list.forEach((item) {
|
||||
if(widget.title.trim() == item['name']){
|
||||
if (widget.title.trim() == item['name']) {
|
||||
_router = item['router'];
|
||||
}
|
||||
});
|
||||
@ -58,13 +49,15 @@ class _WebViewPageState extends State<WebViewPage> {
|
||||
_getCollection() {
|
||||
if (_hasCollected) {
|
||||
// 删除操作
|
||||
_collectionControl.deleteByName(Uri.encodeComponent(widget.title.trim())).then((result) {
|
||||
_collectionControl
|
||||
.deleteByName(Uri.encodeComponent(widget.title.trim()))
|
||||
.then((result) {
|
||||
if (result > 0 && this.mounted) {
|
||||
setState(() {
|
||||
_hasCollected = false;
|
||||
});
|
||||
showInSnackBar('已取消收藏');
|
||||
|
||||
_scaffoldKey.currentState
|
||||
.showSnackBar(SnackBar(content: Text('已取消收藏')));
|
||||
if (ApplicationEvent.event != null) {
|
||||
ApplicationEvent.event
|
||||
.fire(CollectionEvent(widget.title, _router, true));
|
||||
@ -76,7 +69,9 @@ class _WebViewPageState extends State<WebViewPage> {
|
||||
} else {
|
||||
// 插入操作
|
||||
_collectionControl
|
||||
.insert(Collection(name:Uri.encodeComponent(widget.title.trim()) , router: widget.url))
|
||||
.insert(Collection(
|
||||
name: Uri.encodeComponent(widget.title.trim()),
|
||||
router: widget.url))
|
||||
.then((result) {
|
||||
if (this.mounted) {
|
||||
setState(() {
|
||||
@ -87,8 +82,8 @@ class _WebViewPageState extends State<WebViewPage> {
|
||||
ApplicationEvent.event
|
||||
.fire(CollectionEvent(widget.title, _router, false));
|
||||
}
|
||||
|
||||
showInSnackBar('收藏成功');
|
||||
_scaffoldKey.currentState
|
||||
.showSnackBar(SnackBar(content: Text('收藏成功')));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -101,21 +96,26 @@ class _WebViewPageState extends State<WebViewPage> {
|
||||
} else {
|
||||
_collectionIcons = Icons.favorite_border;
|
||||
}
|
||||
return WebviewScaffold(
|
||||
url: widget.url,
|
||||
return Scaffold(
|
||||
key: _scaffoldKey,
|
||||
appBar: AppBar(
|
||||
title: Text(widget.title),
|
||||
actions: <Widget>[
|
||||
new IconButton(
|
||||
tooltip: 'goBack home',
|
||||
onPressed: _getCollection,
|
||||
icon: Icon(_collectionIcons,),
|
||||
icon: Icon(
|
||||
_collectionIcons,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
body: WebviewScaffold(
|
||||
url: widget.url,
|
||||
withZoom: false,
|
||||
withLocalStorage: true,
|
||||
withJavascript: true,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_go/components/fourth_page_feature/page_dragger.dart';
|
||||
import 'package:flutter_go/components/fourth_page_feature/page_reveal.dart';
|
||||
import 'package:flutter_go/components/fourth_page_feature/pager_indicator.dart';
|
||||
import 'package:flutter_go/components/fourth_page_feature/pages.dart';
|
||||
import 'package:flutter_go/views/fourth_page/page_dragger.dart';
|
||||
import 'package:flutter_go/views/fourth_page/page_reveal.dart';
|
||||
import 'package:flutter_go/views/fourth_page/pager_indicator.dart';
|
||||
import 'package:flutter_go/views/fourth_page/pages.dart';
|
||||
|
||||
class FourthPage extends StatefulWidget {
|
||||
@override
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_go/components/cate_card.dart';
|
||||
import '../model/cat.dart';
|
||||
import 'package:flutter_go/model/cat.dart';
|
||||
|
||||
class WidgetPage extends StatefulWidget {
|
||||
final db;
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: AppBar 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: BottomAppBar 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: ButtonBar 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: FlexibleSpaceBar 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: SliverAppBar 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: SnackBar 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: SnackBarAction 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import './demo.dart' as SnackBarDemo;
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: SnackBarAction 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import './demo.dart';
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: Card 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-18 15:13:23
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-18 15:14:03
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-18 17:38:56
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-21 10:25:22
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: sanfan.hx@alibaba-inc.com
|
||||
* tartget: xxx
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import './model.dart';
|
||||
import 'package:flutter_go/widgets/components/LIst/AnimatedList/model.dart';
|
||||
|
||||
class AnimatedListFullDefault extends StatefulWidget {
|
||||
AnimatedListFullDefault({Key key, this.parent}) : super(key: key);
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: AnimatedList 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: ListBody 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: ListView 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-27 15:37:04
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
//import 'package:fluttertoast/fluttertoast.dart';
|
||||
|
||||
class CheckedPopupMenuItemDemo extends StatefulWidget {
|
||||
_CheckedPopupMenuItemDemoState createState() =>
|
||||
@ -26,27 +26,18 @@ class _CheckedPopupMenuItemDemoState extends State<CheckedPopupMenuItemDemo> {
|
||||
_checkedValues = <String>[_checkedValue3];
|
||||
}
|
||||
|
||||
void showInSnackBar(String value){
|
||||
Fluttertoast.showToast(
|
||||
msg: value,
|
||||
toastLength: Toast.LENGTH_SHORT,
|
||||
gravity: ToastGravity.CENTER,
|
||||
timeInSecForIos: 1,
|
||||
backgroundColor: Colors.grey,
|
||||
textColor: Colors.white
|
||||
);
|
||||
}
|
||||
|
||||
bool isChecked(String value) => _checkedValues.contains(value);
|
||||
|
||||
|
||||
void showCheckedMenuSelections(String value){
|
||||
if(_checkedValues.contains(value)){
|
||||
_checkedValues.remove(value);
|
||||
}else{
|
||||
_checkedValues.add(value);
|
||||
}
|
||||
showInSnackBar('Checked $_checkedValues');
|
||||
|
||||
Scaffold.of(context).showSnackBar(new SnackBar(
|
||||
content: new Text('Checked $_checkedValues')));
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-22 21:26:54
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import './demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-27 14:51:44
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import './demo.dart';
|
||||
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
* @Last Modified time: 2018-12-27 15:39:35
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
|
||||
class PopupMenuButtonDemo extends StatefulWidget {
|
||||
_PopupMenuButtonDemoState createState() => _PopupMenuButtonDemoState();
|
||||
@ -20,18 +19,11 @@ class _PopupMenuButtonDemoState extends State<PopupMenuButtonDemo> {
|
||||
void showMenuSelection(String value) {
|
||||
if (<String>[_simpleValue1, _simpleValue2, _simpleValue3].contains(value))
|
||||
_simpleValue = value;
|
||||
showInSnackBar('You selected: $value');
|
||||
Scaffold.of(context).showSnackBar(new SnackBar(
|
||||
content: new Text('You selected: $value')));
|
||||
}
|
||||
|
||||
void showInSnackBar(String value) {
|
||||
Fluttertoast.showToast(
|
||||
msg: value,
|
||||
toastLength: Toast.LENGTH_SHORT,
|
||||
gravity: ToastGravity.CENTER,
|
||||
timeInSecForIos: 1,
|
||||
backgroundColor: Colors.grey,
|
||||
textColor: Colors.white);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-27 15:44:31
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import './demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,28 +5,21 @@
|
||||
* @Last Modified time: 2018-12-27 15:45:26
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
|
||||
|
||||
|
||||
class PopupMenuDividerDemo extends StatelessWidget {
|
||||
|
||||
class PopupMenuDividerDemo extends StatefulWidget {
|
||||
_PopupMenuDividerDemoState createState() => _PopupMenuDividerDemoState();
|
||||
}
|
||||
|
||||
class _PopupMenuDividerDemoState extends State<PopupMenuDividerDemo> {
|
||||
void showInSnackBar(String value) {
|
||||
Fluttertoast.showToast(
|
||||
msg: value,
|
||||
toastLength: Toast.LENGTH_SHORT,
|
||||
gravity: ToastGravity.CENTER,
|
||||
timeInSecForIos: 1,
|
||||
backgroundColor: Colors.grey,
|
||||
textColor: Colors.white);
|
||||
Scaffold.of(context)
|
||||
.showSnackBar(new SnackBar(content: new Text('You selected: $value')));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
child:ListTile(
|
||||
child: ListTile(
|
||||
title: const Text('An item with a sectioned menu'),
|
||||
trailing: PopupMenuButton<String>(
|
||||
padding: EdgeInsets.zero,
|
||||
@ -36,34 +29,23 @@ class PopupMenuDividerDemo extends StatelessWidget {
|
||||
value: 'Preview',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.visibility),
|
||||
title: Text('Preview')
|
||||
)
|
||||
),
|
||||
title: Text('Preview'))),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Share',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.person_add),
|
||||
title: Text('Share')
|
||||
)
|
||||
),
|
||||
title: Text('Share'))),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Get Link',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.link),
|
||||
title: Text('Get link')
|
||||
)
|
||||
),
|
||||
title: Text('Get link'))),
|
||||
const PopupMenuDivider(),
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Remove',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.delete),
|
||||
title: Text('Remove')
|
||||
)
|
||||
)
|
||||
]
|
||||
)
|
||||
),
|
||||
leading: Icon(Icons.delete), title: Text('Remove')))
|
||||
])),
|
||||
);
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-27 15:55:22
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import './demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-27 16:06:20
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import '../PopupMenuDivider/demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-29 15:07:16
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import '../PopupMenuDivider/demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-29 16:22:06
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import '../PopupMenuDivider/demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -8,7 +8,7 @@
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||
import './demo.dart' as BottomNavigationBarDemo;
|
||||
|
@ -6,7 +6,7 @@
|
||||
* email: zhu.yan@alibaba-inc.com
|
||||
* tartget: BottomNavigationBarItem 的示例
|
||||
*/
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
// import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-17 15:50:02
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-17 17:06:34
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-17 16:00:07
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @Last Modified time: 2018-12-17 16:00:07
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../common/widget_demo.dart';
|
||||
import 'package:flutter_go/components/widget_demo.dart';
|
||||
import 'demo.dart';
|
||||
|
||||
const String content0 = '''
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user