Merge branch 'develop' of github.com:alibaba/flutter-common-widgets-app into develop

This commit is contained in:
sanfan.hx
2019-01-29 15:06:22 +08:00
207 changed files with 549 additions and 786 deletions
CHANGE-LOG.mdREADME.md
android/app/src/main
assets
ios
Runner.xcodeproj
Runner
lib
common
components
event
generated
main.dart
model
resources
routers
utils
views
widgets
components
Bar
AppBar
BottomAppBar
ButtonBar
FlexibleSpaceBar
SliverAppBar
SnackBar
SnackBarAction
TabBar
Card/Card
Chip
Chip
ChipTheme
ChipThemeData
ChoiceChip
FilterChip
RawChip
inputChip
Dialog
AboutDialog
AlertDialog
Dialog
SimpleDialog
Grid
GridPaper
GridTile
GridTileBar
GridView
SliverGrid
LIst
AnimatedList
ListBody
ListView
Menu
CheckedPopupMenuItem
DropdownMenuItem
PopupMenuButton
PopupMenuDivider
PopupMenuEntry
PopupMenuItem
PopupMenuItemState
Navigation
BottomNavigationBar
BottomNavigationBarItem
Panel
ExpansionPanel
ExpansionPanelList
ExpansionPanelRadio
Pick
DayPicker
MonthPicker
ShowdatePicker
YearPicker
Progress
CircularProgressIndicator
LinearProgressIndicator
RefreshProgressIndicator
Scaffold
Scaffold
ScaffoldState
Scroll
BoxScrollView
CustomScrollView
NestedScrollView
ScrollMetrics
ScrollPhysics
ScrollView
Scrollable
ScrollbarPainter
Tab/Tab
elements
Form
Button
DropdownButton
FlatButton
FloatingActionButton
IconButton
OutlineButton
PopupMenuButton
RaisedButton
RawMaterialButton
CheckBox
Checkbox
CheckboxListTile
Input/TextField
Radio
Radio
RadioListTile
Slider
Slider
SliderTheme
SliderThemeData
Switch
AnimatedSwitcher
Switch
SwitchListTile
Text
Frame
Align/Align
Box
ConstrainedBox
DecoratedBox
Fittedbox
LimitedBox
OverflowBox
RenderBox
RotatedBox
SizeBox
SizedOverflowBox
TextBox
UnconstrainedBox
Expanded/Expanded
Layout
Spacing
Stack
IndexedStack
Stack
Table/Table
Media
Icon
Icon
IconData
IconTheme
IconThemeData
ImageIcon
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
pubspec.yaml
tools

62
CHANGE-LOG.md Normal file

@ -0,0 +1,62 @@
## 更新日志
#### 2019-1-24
- [x] 功能:更新小部件的图标
- [x] 功能添加CupertinoTimerPickerDemo
- [x] 调试:消除警告
- [x] 修复:关于手册图标更换
- [x] 添加:文案描述
- [x] 添加CupertinoPickerCupertinoPopupSurface
#### 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] 功能加入GridPaperSliverGrid
- [x] 重构修改db
- [x] 重构:删除数据库 TabBarView
- [x] 添加:网格视图
- [x] 修改checkbosListTile 错误
- [x] 修改:自动提示文案
- [x] 功能:增加免责声明,声明组件,自动弹出,左上角入口
- [x] 重构整理数据库初始逻辑判断数据库完整性判断是否存在已知的catwidgetcollection 三张表。
- [x] 修复DialogDemo无法关闭的问题
#### 2019-1-12
- [x] 修复icon没有但内容有的组件给补充了icon
- [x] 修改1.整理文件 2.修正分析
- [x] 更新flutter_rookie_book => flutter_go
- [x] 更新更新SearchInput文件名=> search_input
- [x] 修改:文件名称的大小写规范
- [x] 修改修正bottomNavigationBar iconButton警告

@ -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"

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;
}

@ -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