From 9924d91afcd6cee15f1d69a04f6b5ba86b3a2229 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Sat, 4 Jul 2020 18:28:47 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=9B=B4=E6=96=B0macOS=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/flutter.db | Bin 651264 -> 700416 bytes lib/.gitignore | 3 +- lib/components/project/widget_node_panel.dart | 2 +- lib/views/app/flutter_app.dart | 1 + lib/views/pages/home/home_page.dart | 3 + .../CustomMultiChildLayout/node1_base.dart | 94 ++++++++++++++ .../ProxyWidget/LayoutId/node1_base.dart | 94 ++++++++++++++ .../CustomSingleChildLayout/node1_base.dart | 61 +++++++++ .../CustomSingleChildLayout/node2_offset.dart | 118 ++++++++++++++++++ .../SliverOverlapAbsorber/node1_base.dart | 97 ++++++++++++++ .../SliverOverlapInjector/node1_base.dart | 97 ++++++++++++++ .../CupertinoSegmentedControl/node1_base.dart | 52 ++++++++ .../node2_color.dart | 56 +++++++++ .../NestedScrollView/node1_base.dart | 102 +++++++++++++++ lib/views/widgets/exp/proxy_unit.dart | 3 +- lib/views/widgets/exp/render_object_unit.dart | 4 +- lib/views/widgets/exp/sliver_unit.dart | 2 + lib/views/widgets/exp/stateful_unit.dart | 4 +- lib/views/widgets/widgets_map.dart | 38 +++++- macos/Podfile.lock | 4 +- test/widget_test.dart | 3 +- 21 files changed, 824 insertions(+), 14 deletions(-) create mode 100644 lib/views/widgets/MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart create mode 100644 lib/views/widgets/ProxyWidget/LayoutId/node1_base.dart create mode 100644 lib/views/widgets/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart create mode 100644 lib/views/widgets/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart create mode 100644 lib/views/widgets/Sliver/SliverOverlapAbsorber/node1_base.dart create mode 100644 lib/views/widgets/Sliver/SliverOverlapInjector/node1_base.dart create mode 100644 lib/views/widgets/StatefulWidget/CupertinoSegmentedControl/node1_base.dart create mode 100644 lib/views/widgets/StatefulWidget/CupertinoSegmentedControl/node2_color.dart create mode 100644 lib/views/widgets/StatefulWidget/NestedScrollView/node1_base.dart diff --git a/assets/flutter.db b/assets/flutter.db index 59308b4737ecefb397d90e7004708882ca18c189..4b635205f3e30a393a2bbadd0bc25e6b05b0844a 100644 GIT binary patch delta 71339 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ÐV$0uSm}_{pww3 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 Q)hh$~Oi~P%{76gx8$BgcSO5S3 diff --git a/lib/.gitignore b/lib/.gitignore index 84ea85a..0d5de89 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1 +1,2 @@ -/tools/ \ No newline at end of file +/tools/ +/single/ \ No newline at end of file diff --git a/lib/components/project/widget_node_panel.dart b/lib/components/project/widget_node_panel.dart index 1b92a5d..147a124 100644 --- a/lib/components/project/widget_node_panel.dart +++ b/lib/components/project/widget_node_panel.dart @@ -144,7 +144,7 @@ class _WidgetNodePanelState extends State { //执行分享 _doCopy() async{ await Clipboard.setData(ClipboardData(text: widget.code)); - Toast.toast(context, '复制成功!',duration: Duration(seconds: 10)); + Toast.toast(context, '复制成功!',duration: Duration(seconds: 1)); // Share.share(widget.code); } diff --git a/lib/views/app/flutter_app.dart b/lib/views/app/flutter_app.dart index 1833f1a..fc60335 100644 --- a/lib/views/app/flutter_app.dart +++ b/lib/views/app/flutter_app.dart @@ -20,6 +20,7 @@ class FlutterApp extends StatelessWidget { debugShowCheckedModeBanner: false, onGenerateRoute: Router.generateRoute, theme: ThemeData( + visualDensity: VisualDensity.adaptivePlatformDensity, primarySwatch: state.themeColor, fontFamily: state.fontFamily, ), diff --git a/lib/views/pages/home/home_page.dart b/lib/views/pages/home/home_page.dart index e0c9fe2..a805c88 100644 --- a/lib/views/pages/home/home_page.dart +++ b/lib/views/pages/home/home_page.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -25,6 +27,7 @@ class _HomePageState extends State { @override void initState() { + print(Directory.current.path); _ctrl = ScrollController()..addListener(_updateAppBarHeight); super.initState(); } diff --git a/lib/views/widgets/MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart b/lib/views/widgets/MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart new file mode 100644 index 0000000..10961cb --- /dev/null +++ b/lib/views/widgets/MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart @@ -0,0 +1,94 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/6 +/// contact me by email 1981462002@qq.com +/// 说明: + +// { +// "widgetId": 341, +// "name": 'CustomMultiChildLayout基本使用', +// "priority": 1, +// "subtitle": +// "【children】 : 子组件集 【List】\n" +// "【delegate】 : 布局代理 【MultiChildLayoutDelegate】", +// } + + +class CustomMultiChildLayoutDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + width: 300, + height: 150, + color: Colors.grey.withAlpha(33), + child: CustomMultiChildLayout( + delegate: CornerCustomMultiChildLayout( + padding:EdgeInsets.only(left: 10,top: 5,right: 10,bottom: 5), + ), + children: [ + LayoutId(id: CornerType.topLeft, child: Box50(Colors.red)), + LayoutId(id: CornerType.topRight, child: Box50(Colors.yellow)), + LayoutId(id: CornerType.bottomLeft, child: Box50(Colors.blue)), + LayoutId(id: CornerType.bottomRight, child: Box50(Colors.green)), + ], + ), + ); + } +} + +// 50 颜射盒 +class Box50 extends StatelessWidget { + final Color color; + Box50(this.color); + + @override + Widget build(BuildContext context) { + return Container( + width: 50, + height: 50, + color: color, + ); + } +} + + +enum CornerType{ + topLeft, + topRight, + bottomLeft, + bottomRight +} + + +class CornerCustomMultiChildLayout extends MultiChildLayoutDelegate{ + final EdgeInsets padding; + + CornerCustomMultiChildLayout({this.padding = EdgeInsets.zero}); + + @override + void performLayout(Size size) { + if (hasChild(CornerType.topLeft)) { + layoutChild(CornerType.topLeft, BoxConstraints.loose(size)); + positionChild(CornerType.topLeft, Offset.zero.translate(padding.left, padding.top)); + } + if (hasChild(CornerType.topRight)) { + var childSize = layoutChild(CornerType.topRight, BoxConstraints.loose(size)); + positionChild(CornerType.topRight, Offset(size.width-childSize.width,0).translate(-padding.right, padding.top)); + } + if (hasChild(CornerType.bottomLeft)) { + var childSize = layoutChild(CornerType.bottomLeft, BoxConstraints.loose(size)); + positionChild(CornerType.bottomLeft, Offset(0,size.height-childSize.height).translate(padding.left, -padding.bottom)); + } + if (hasChild(CornerType.bottomRight)) { + var childSize = layoutChild(CornerType.bottomRight, BoxConstraints.loose(size)); + positionChild(CornerType.bottomRight, Offset(size.width-childSize.width,size.height-childSize.height).translate(-padding.right, -padding.bottom)); + } + } + + @override + bool shouldRelayout(CornerCustomMultiChildLayout oldDelegate) => oldDelegate.padding!=padding; + +} + diff --git a/lib/views/widgets/ProxyWidget/LayoutId/node1_base.dart b/lib/views/widgets/ProxyWidget/LayoutId/node1_base.dart new file mode 100644 index 0000000..b4215aa --- /dev/null +++ b/lib/views/widgets/ProxyWidget/LayoutId/node1_base.dart @@ -0,0 +1,94 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/6 +/// contact me by email 1981462002@qq.com +/// 说明: + +// { +// "widgetId": 315, +// "name": 'LayoutId使用场景', +// "priority": 1, +// "subtitle": +// "【id】 : 标识id 【Object】\n" +// "【child】 : 子组件 【Widget】", +// } + + +class LayoutIdDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + width: 300, + height: 150, + color: Colors.grey.withAlpha(33), + child: CustomMultiChildLayout( + delegate: CornerCustomMultiChildLayout( + padding:EdgeInsets.only(left: 10,top: 5,right: 10,bottom: 5), + ), + children: [ + LayoutId(id: CornerType.topLeft, child: Box50(Colors.red)), + LayoutId(id: CornerType.topRight, child: Box50(Colors.yellow)), + LayoutId(id: CornerType.bottomLeft, child: Box50(Colors.blue)), + LayoutId(id: CornerType.bottomRight, child: Box50(Colors.green)), + ], + ), + ); + } +} + +// 50 颜射盒 +class Box50 extends StatelessWidget { + final Color color; + Box50(this.color); + + @override + Widget build(BuildContext context) { + return Container( + width: 50, + height: 50, + color: color, + ); + } +} + + +enum CornerType{ + topLeft, + topRight, + bottomLeft, + bottomRight +} + + +class CornerCustomMultiChildLayout extends MultiChildLayoutDelegate{ + final EdgeInsets padding; + + CornerCustomMultiChildLayout({this.padding = EdgeInsets.zero}); + + @override + void performLayout(Size size) { + if (hasChild(CornerType.topLeft)) { + layoutChild(CornerType.topLeft, BoxConstraints.loose(size)); + positionChild(CornerType.topLeft, Offset.zero.translate(padding.left, padding.top)); + } + if (hasChild(CornerType.topRight)) { + var childSize = layoutChild(CornerType.topRight, BoxConstraints.loose(size)); + positionChild(CornerType.topRight, Offset(size.width-childSize.width,0).translate(-padding.right, padding.top)); + } + if (hasChild(CornerType.bottomLeft)) { + var childSize = layoutChild(CornerType.bottomLeft, BoxConstraints.loose(size)); + positionChild(CornerType.bottomLeft, Offset(0,size.height-childSize.height).translate(padding.left, -padding.bottom)); + } + if (hasChild(CornerType.bottomRight)) { + var childSize = layoutChild(CornerType.bottomRight, BoxConstraints.loose(size)); + positionChild(CornerType.bottomRight, Offset(size.width-childSize.width,size.height-childSize.height).translate(-padding.right, -padding.bottom)); + } + } + + @override + bool shouldRelayout(CornerCustomMultiChildLayout oldDelegate) => oldDelegate.padding!=padding; + +} + diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart b/lib/views/widgets/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart new file mode 100644 index 0000000..a3daf4a --- /dev/null +++ b/lib/views/widgets/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart @@ -0,0 +1,61 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/3 +/// contact me by email 1981462002@qq.com +/// 说明: + +// { +// "widgetId": 285, +// "name": 'CustomSingleChildLayout基本使用', +// "priority": 1, +// "subtitle": +// "【delegate】 : 代理 【SingleChildLayoutDelegate】", +// } + +class CustomSingleChildLayoutDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + print('-------CustomSingleChildLayoutDemo------'); + return Container( + width: 300, + height: 200, + color: Colors.grey.withAlpha(11), + child: CustomSingleChildLayout( + delegate: _TolySingleChildLayoutDelegate(), + child: Container( + color: Colors.orange, + ), + ), + ); + } +} + +class _TolySingleChildLayoutDelegate extends SingleChildLayoutDelegate { + @override + bool shouldRelayout(SingleChildLayoutDelegate oldDelegate) { + return true; + } + + @override + Size getSize(BoxConstraints constraints) { + print('----getSize:----constraints:$constraints----'); + return super.getSize(constraints); + } + + @override + Offset getPositionForChild(Size size, Size childSize) { + print('----getPositionForChild: size:$size----childSize:$childSize----'); + return Offset(size.width / 2, 0); + } + + @override + BoxConstraints getConstraintsForChild(BoxConstraints constraints) { + print('----getConstraintsForChild:----constraints:$constraints----'); + return BoxConstraints( + maxWidth: constraints.maxWidth / 2, + maxHeight: constraints.maxHeight / 2, + minHeight: constraints.maxHeight / 4, + minWidth: constraints.maxWidth / 4, + ); + } +} \ No newline at end of file diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart b/lib/views/widgets/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart new file mode 100644 index 0000000..4b5444c --- /dev/null +++ b/lib/views/widgets/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart @@ -0,0 +1,118 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/3 +/// contact me by email 1981462002@qq.com +/// 说明: + +// { +// "widgetId": 285, +// "name": 'CustomSingleChildLayout的偏移使用', +// "priority": 2, +// "subtitle": +// "可以利用代理的偏移能力,对子组件进行偏移定位。", +// } + +class OffSetWidgetDemo extends StatelessWidget { + final data = [ + { + 'offset': Offset(20, 20), + 'direction': Direction.topLeft, + }, + { + 'offset': Offset(20, -15), + 'direction': Direction.topRight, + }, + { + 'offset': Offset(-15, 20), + 'direction': Direction.bottomLeft, + }, + { + 'offset': Offset(-15, 20), + 'direction': Direction.bottomLeft, + }, + { + 'offset': Offset(15, 20), + 'direction': Direction.bottomLeft, + }, + { + 'offset': Offset(-15, -15), + 'direction': Direction.topRight, + }, + ]; + + @override + Widget build(BuildContext context) { + return Wrap( + spacing: 20, + runSpacing: 20, + children: data + .map((e) => Container( + width: 150, + height: 100, + alignment: Alignment.topRight, + color: Colors.grey.withAlpha(11), + child: OffSetWidget( + offset: e['offset'], + direction: e['direction'], + child: Icon( + Icons.android, + size: 30, + color: Colors.green, + ), + ))) + .toList()); + } +} + +class OffSetWidget extends StatelessWidget { + final Offset offset; + final Widget child; + final Direction direction; + + OffSetWidget( + {this.offset = Offset.zero, + this.child, + this.direction = Direction.topLeft}); + + @override + Widget build(BuildContext context) { + return CustomSingleChildLayout( + delegate: _OffSetDelegate(offset: offset, direction: direction), + child: child, + ); + } +} + +enum Direction { topLeft, topRight, bottomLeft, bottomRight } + +class _OffSetDelegate extends SingleChildLayoutDelegate { + final Offset offset; + final Direction direction; + + _OffSetDelegate( + {this.offset = Offset.zero, this.direction = Direction.topLeft}); + + @override + bool shouldRelayout(_OffSetDelegate oldDelegate) => + offset != oldDelegate.offset; + + @override + Offset getPositionForChild(Size size, Size childSize) { + var w = size.width; + var h = size.height; + var wc = childSize.width; + var hc = childSize.height; + + switch (direction) { + case Direction.topLeft: + return offset; + case Direction.topRight: + return offset.translate(w - wc - offset.dx * 2, 0); + case Direction.bottomLeft: + return offset.translate(0, h - hc - offset.dy * 2); + case Direction.bottomRight: + return offset.translate(w - wc - offset.dx * 2, h - hc - offset.dy * 2); + } + return offset; + } +} diff --git a/lib/views/widgets/Sliver/SliverOverlapAbsorber/node1_base.dart b/lib/views/widgets/Sliver/SliverOverlapAbsorber/node1_base.dart new file mode 100644 index 0000000..8f62261 --- /dev/null +++ b/lib/views/widgets/Sliver/SliverOverlapAbsorber/node1_base.dart @@ -0,0 +1,97 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/16 +/// contact me by email 1981462002@qq.com +/// 说明: + +// { +// "widgetId": 307, +// "name": 'SliverOverlapAbsorber基本使用', +// "priority": 1, +// "subtitle": +// "【sliver】 : 子组件 【Widget】\n" +// "【handle】 : *处理器 【SliverOverlapAbsorberHandle】\n" +// "如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。", +// } + +class SliverOverlapAbsorberDemo extends StatelessWidget { + final _tabs = ['风神传', '封妖志', "幻将录", "永恒传说"]; + + @override + Widget build(BuildContext context) { + return Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height - 200, + child: Scaffold( + body: DefaultTabController( + length: _tabs.length, + child: NestedScrollView( + headerSliverBuilder: + (BuildContext context, bool innerBoxIsScrolled) { + return [ + SliverOverlapAbsorber( + handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), + sliver: SliverAppBar( + title: const Text('旷古奇书'), + pinned: true, + elevation: 6, //影深 + expandedHeight: 220.0, + forceElevated: innerBoxIsScrolled, //为true时展开有阴影 + flexibleSpace: FlexibleSpaceBar( + background: Image.asset( + "assets/images/wy_300x200_filter.jpg", + fit: BoxFit.cover, + ), + ), + bottom: TabBar( + tabs: _tabs + .map((String name) => Tab(text: name,)) + .toList(), + ), + ), + ), + ]; + }, + body: _buildTabBarView(), + ), + ), + )); + } + + Widget _buildTabBarView() { + return TabBarView( + children: _tabs.map((String name) { + return SafeArea( + top: false, + bottom: false, + child: Builder( + builder: (BuildContext context) { + return CustomScrollView( + key: PageStorageKey(name), + slivers: [ + SliverOverlapInjector( + handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), + ), + SliverPadding( + padding: const EdgeInsets.all(8.0), + sliver: SliverFixedExtentList( + itemExtent: 48.0, + delegate: SliverChildBuilderDelegate( + (BuildContext context, int index) { + return ListTile( + title: Text('《$name》 第 $index章'), + ); + }, + childCount: 50, + ), + ), + ), + ], + ); + }, + ), + ); + }).toList(), + ); + } +} diff --git a/lib/views/widgets/Sliver/SliverOverlapInjector/node1_base.dart b/lib/views/widgets/Sliver/SliverOverlapInjector/node1_base.dart new file mode 100644 index 0000000..4381e06 --- /dev/null +++ b/lib/views/widgets/Sliver/SliverOverlapInjector/node1_base.dart @@ -0,0 +1,97 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/16 +/// contact me by email 1981462002@qq.com +/// 说明: + +// { +// "widgetId": 308, +// "name": 'SliverOverlapInjector基本使用', +// "priority": 1, +// "subtitle": +// "【sliver】 : 子组件 【Widget】\n" +// "【handle】 : *处理器 【SliverOverlapAbsorberHandle】\n" +// "如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。", +// } + +class SliverOverlapInjectorDemo extends StatelessWidget { + final _tabs = ['风神传', '封妖志', "幻将录", "永恒传说"]; + + @override + Widget build(BuildContext context) { + return Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height - 200, + child: Scaffold( + body: DefaultTabController( + length: _tabs.length, + child: NestedScrollView( + headerSliverBuilder: + (BuildContext context, bool innerBoxIsScrolled) { + return [ + SliverOverlapAbsorber( + handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), + sliver: SliverAppBar( + title: const Text('旷古奇书'), + pinned: true, + elevation: 6, //影深 + expandedHeight: 220.0, + forceElevated: innerBoxIsScrolled, //为true时展开有阴影 + flexibleSpace: FlexibleSpaceBar( + background: Image.asset( + "assets/images/wy_300x200_filter.jpg", + fit: BoxFit.cover, + ), + ), + bottom: TabBar( + tabs: _tabs + .map((String name) => Tab(text: name,)) + .toList(), + ), + ), + ), + ]; + }, + body: _buildTabBarView(), + ), + ), + )); + } + + Widget _buildTabBarView() { + return TabBarView( + children: _tabs.map((String name) { + return SafeArea( + top: false, + bottom: false, + child: Builder( + builder: (BuildContext context) { + return CustomScrollView( + key: PageStorageKey(name), + slivers: [ + SliverOverlapInjector( + handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), + ), + SliverPadding( + padding: const EdgeInsets.all(8.0), + sliver: SliverFixedExtentList( + itemExtent: 48.0, + delegate: SliverChildBuilderDelegate( + (BuildContext context, int index) { + return ListTile( + title: Text('《$name》 第 $index章'), + ); + }, + childCount: 50, + ), + ), + ), + ], + ); + }, + ), + ); + }).toList(), + ); + } +} diff --git a/lib/views/widgets/StatefulWidget/CupertinoSegmentedControl/node1_base.dart b/lib/views/widgets/StatefulWidget/CupertinoSegmentedControl/node1_base.dart new file mode 100644 index 0000000..49bc1b2 --- /dev/null +++ b/lib/views/widgets/StatefulWidget/CupertinoSegmentedControl/node1_base.dart @@ -0,0 +1,52 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/30 +/// contact me by email 1981462002@qq.com +/// 说明: +/// +// { +// "widgetId": 262, +// "name": '基本使用', +// "priority": 1, +// "subtitle": +// "【children】 : 组件Map 【Map】\n" +// "【onValueChanged】 : 最小值 【ValueChanged】\n" +// "【groupValue】 : 选中值 【T】\n" +// "【padding】 : 内边距 【EdgeInsetsGeometry】", +// } +class CupertinoSegmentedControlDemo extends StatefulWidget { + @override + _CupertinoSegmentedControlDemoState createState() => + _CupertinoSegmentedControlDemoState(); +} + +class _CupertinoSegmentedControlDemoState + extends State { + var _value = 1; + + @override + Widget build(BuildContext context) { + return Container( + child: CupertinoSegmentedControl( + groupValue: _value, + onValueChanged: _onValueChanged, + padding: EdgeInsets.only(top: 20), + children: { + 1: Padding( + padding: EdgeInsets.only(left: 20, right: 20), + child: Text("混沌战士"), + ), + 2: Text("青眼白龙"), + 3: Text("黑魔术士"), + }, + ), + ); + } + + void _onValueChanged(int value) { + setState(() { + _value=value; + }); + } +} diff --git a/lib/views/widgets/StatefulWidget/CupertinoSegmentedControl/node2_color.dart b/lib/views/widgets/StatefulWidget/CupertinoSegmentedControl/node2_color.dart new file mode 100644 index 0000000..cf71d0a --- /dev/null +++ b/lib/views/widgets/StatefulWidget/CupertinoSegmentedControl/node2_color.dart @@ -0,0 +1,56 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/30 +/// contact me by email 1981462002@qq.com +/// 说明: +/// +// { +// "widgetId": 262, +// "name": 'CupertinoSegmentedControl的颜色', +// "priority": 2, +// "subtitle": +// "【unselectedColor】 : 未选中色 【Color】\n" +// "【selectedColor】 : 选中色 【Color】\n" +// "【pressedColor】 : 按下色 【Color】\n" +// "【borderColor】 : 边线色 【Color】", +// } +class CupertinoSegmentedControlColor extends StatefulWidget { + @override + _CupertinoSegmentedControlColorState createState() => + _CupertinoSegmentedControlColorState(); +} + +class _CupertinoSegmentedControlColorState + extends State { + var _value = 1; + + @override + Widget build(BuildContext context) { + return Container( + child: CupertinoSegmentedControl( + unselectedColor: Colors.yellow, + selectedColor: Colors.green, + pressedColor: Colors.blue, + borderColor: Colors.red, + groupValue: _value, + onValueChanged: _onValueChanged, + padding: EdgeInsets.only(top: 20), + children: { + 1: Padding( + padding: EdgeInsets.only(left: 20, right: 20), + child: Text("混沌战士"), + ), + 2: Text("青眼白龙"), + 3: Text("黑魔术士"), + }, + ), + ); + } + + void _onValueChanged(int value) { + setState(() { + _value=value; + }); + } +} diff --git a/lib/views/widgets/StatefulWidget/NestedScrollView/node1_base.dart b/lib/views/widgets/StatefulWidget/NestedScrollView/node1_base.dart new file mode 100644 index 0000000..1c97db1 --- /dev/null +++ b/lib/views/widgets/StatefulWidget/NestedScrollView/node1_base.dart @@ -0,0 +1,102 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/6/16 +/// contact me by email 1981462002@qq.com +/// 说明: + +// { +// "widgetId": 251, +// "name": 'NestedScrollView基本用法', +// "priority": 1, +// "subtitle": +// "【controller】 : 滑动控制器 【ScrollController】\n" +// "【scrollDirection】 : 滑动方向 【Axis】\n" +// "【reverse】 : 是否反向 【bool】\n" +// "【physics】 : 滑顶样式 【ScrollPhysics】\n" +// "【dragStartBehavior】 : 开始拖动行为 【DragStartBehavior】\n" +// "【headerSliverBuilder】 : *头部构造器 【NestedScrollViewHeaderSliversBuilder】\n" +// "【body】 : *内容 【Widget】", +// } + +class NestedScrollViewDemo extends StatelessWidget { + final _tabs = ['风神传', '封妖志', "幻将录", "永恒传说"]; + + @override + Widget build(BuildContext context) { + return Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height - 200, + child: Scaffold( + body: DefaultTabController( + length: _tabs.length, + child: NestedScrollView( + headerSliverBuilder: + (BuildContext context, bool innerBoxIsScrolled) { + return [ + SliverOverlapAbsorber( + handle: NestedScrollView.sliverOverlapAbsorberHandleFor( + context), + sliver: SliverAppBar( + title: const Text('旷古奇书'), + pinned: true, + elevation: 6, //影深 + expandedHeight: 220.0, + forceElevated: innerBoxIsScrolled, //为true时展开有阴影 + flexibleSpace: FlexibleSpaceBar( + background: Image.asset( + "assets/images/wy_300x200_filter.jpg", + fit: BoxFit.cover, + ), + ), + bottom: TabBar( + tabs: _tabs + .map((String name) => Tab(text: name,)) + .toList(), + ), + ), + ), + ]; + }, + body: _buildTabBarView(), + ), + ), + )); + } + + Widget _buildTabBarView() { + return TabBarView( + children: _tabs.map((String name) { + return SafeArea( + top: false, + bottom: false, + child: Builder( + builder: (BuildContext context) { + return CustomScrollView( + key: PageStorageKey(name), + slivers: [ + SliverOverlapInjector( + handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), + ), + SliverPadding( + padding: const EdgeInsets.all(8.0), + sliver: SliverFixedExtentList( + itemExtent: 48.0, + delegate: SliverChildBuilderDelegate( + (BuildContext context, int index) { + return ListTile( + title: Text('《$name》 第 $index章'), + ); + }, + childCount: 50, + ), + ), + ), + ], + ); + }, + ), + ); + }).toList(), + ); + } +} diff --git a/lib/views/widgets/exp/proxy_unit.dart b/lib/views/widgets/exp/proxy_unit.dart index ee22856..4eb0ab3 100644 --- a/lib/views/widgets/exp/proxy_unit.dart +++ b/lib/views/widgets/exp/proxy_unit.dart @@ -16,4 +16,5 @@ export '../ProxyWidget/DividerTheme/node1_base.dart'; export '../ProxyWidget/IconTheme/node1_base.dart'; export '../ProxyWidget/ScrollConfiguration/node1_base.dart'; export '../ProxyWidget/Expanded/node1_base.dart'; -export '../ProxyWidget/Positioned/node1_base.dart'; \ No newline at end of file +export '../ProxyWidget/Positioned/node1_base.dart'; +export '../ProxyWidget/LayoutId/node1_base.dart'; \ No newline at end of file diff --git a/lib/views/widgets/exp/render_object_unit.dart b/lib/views/widgets/exp/render_object_unit.dart index 1738384..696e797 100644 --- a/lib/views/widgets/exp/render_object_unit.dart +++ b/lib/views/widgets/exp/render_object_unit.dart @@ -21,10 +21,12 @@ export '../MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart'; export '../MultiChildRenderObjectWidget/Column/node1_base.dart'; export '../MultiChildRenderObjectWidget/IndexedStack/node1_base.dart'; export '../MultiChildRenderObjectWidget/Row/node1_base.dart'; - +export '../MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart'; export '../SingleChildRenderObjectWidget/Align/node1_base.dart'; export '../SingleChildRenderObjectWidget/Align/node2_other.dart'; +export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart'; +export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart'; export '../SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart'; export '../SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart'; diff --git a/lib/views/widgets/exp/sliver_unit.dart b/lib/views/widgets/exp/sliver_unit.dart index e04c9d3..fc7e958 100644 --- a/lib/views/widgets/exp/sliver_unit.dart +++ b/lib/views/widgets/exp/sliver_unit.dart @@ -15,3 +15,5 @@ export '../Sliver/SliverOpacity/node1_base.dart'; export '../Sliver/SliverPadding/node1_base.dart'; export '../Sliver/SliverPersistentHeader/node1_base.dart'; export '../Sliver/SliverToBoxAdapter/node1_base.dart'; +export '../Sliver/SliverOverlapAbsorber/node1_base.dart'; +export '../Sliver/SliverOverlapInjector/node1_base.dart'; diff --git a/lib/views/widgets/exp/stateful_unit.dart b/lib/views/widgets/exp/stateful_unit.dart index cf2ac3d..b257089 100644 --- a/lib/views/widgets/exp/stateful_unit.dart +++ b/lib/views/widgets/exp/stateful_unit.dart @@ -11,7 +11,7 @@ export '../StatefulWidget/SlideTransition/node1_base.dart'; export '../StatefulWidget/MonthPicker/node1_base.dart'; export '../StatefulWidget/YearPicker/node1_base.dart'; export '../StatefulWidget/WillPopScope/node1_base.dart'; - +export '../StatefulWidget/NestedScrollView/node1_base.dart'; export '../StatefulWidget/AppBar/node1_base.dart'; export '../StatefulWidget/AppBar/node2_tab.dart'; export '../StatefulWidget/BottomAppBar/node1_base.dart'; @@ -28,6 +28,8 @@ export '../StatefulWidget/CircularProgressIndicator/node1_base.dart'; export '../StatefulWidget/CupertinoActivityIndicator/node1_base.dart'; export '../StatefulWidget/CupertinoSlider/node1_base.dart'; export '../StatefulWidget/CupertinoSwitch/node1_base.dart'; +export '../StatefulWidget/CupertinoSegmentedControl/node1_base.dart'; +export '../StatefulWidget/CupertinoSegmentedControl/node2_color.dart'; export '../StatefulWidget/Image/node1_base.dart'; export '../StatefulWidget/Image/node2_fit.dart'; diff --git a/lib/views/widgets/widgets_map.dart b/lib/views/widgets/widgets_map.dart index eeb3f45..5d7059a 100644 --- a/lib/views/widgets/widgets_map.dart +++ b/lib/views/widgets/widgets_map.dart @@ -7,8 +7,6 @@ import 'exp/proxy_unit.dart'; import 'exp/other_unit.dart'; import 'exp/sliver_unit.dart'; - - /// create by 张风捷特烈 on 2020-03-04 /// contact me by email 1981462002@qq.com /// 说明: @@ -25,6 +23,11 @@ class WidgetsMap { ContainerTransform(), ContainerConstraints() ]; + case "CupertinoSegmentedControl": + return [ + CupertinoSegmentedControlDemo(), + CupertinoSegmentedControlColor() + ]; case "Text": return [ CustomText(), @@ -168,7 +171,18 @@ class WidgetsMap { ColorToggleButtons(), ProToggleButtons(), ]; - + case "NestedScrollView": + return [ + NestedScrollViewDemo(), + ]; + case "SliverOverlapAbsorber": + return [ + SliverOverlapAbsorberDemo(), + ]; + case "SliverOverlapInjector": + return [ + SliverOverlapInjectorDemo(), + ]; case "Divider": return [ CustomDivider(), @@ -229,6 +243,14 @@ class WidgetsMap { return [ CustomRadio(), ]; + case "CustomMultiChildLayout": + return [ + CustomMultiChildLayoutDemo(), + ]; + case "LayoutId": + return [ + LayoutIdDemo(), + ]; case "CircularProgressIndicator": return [ CustomCircularProgressIndicator(), @@ -655,7 +677,8 @@ class WidgetsMap { case "LicensePage": return [ CustomLicensePage(), - ]; case "Builder": + ]; + case "Builder": return [ BuilderDemo(), ]; @@ -673,7 +696,7 @@ class WidgetsMap { return [ CustomTab(), ]; - case "PreferredSize": + case "PreferredSize": return [ CustomPreferredSize(), AdapterPreferredSize(), @@ -949,6 +972,11 @@ class WidgetsMap { return [ CustomBackdropFilter(), ]; + case "CustomSingleChildLayout": + return [ + CustomSingleChildLayoutDemo(), + OffSetWidgetDemo(), + ]; } } } diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 540eb5c..7218929 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -14,7 +14,7 @@ PODS: - FlutterMacOS DEPENDENCIES: - - FlutterMacOS (from `Flutter/ephemeral/.symlinks/flutter/darwin-x64-release`) + - FlutterMacOS (from `Flutter/ephemeral/.symlinks/flutter/darwin-x64`) - shared_preferences (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos`) - shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`) - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) @@ -27,7 +27,7 @@ SPEC REPOS: EXTERNAL SOURCES: FlutterMacOS: - :path: Flutter/ephemeral/.symlinks/flutter/darwin-x64-release + :path: Flutter/ephemeral/.symlinks/flutter/darwin-x64 shared_preferences: :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos shared_preferences_macos: diff --git a/test/widget_test.dart b/test/widget_test.dart index 3cefce4..6f9dac4 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -7,8 +7,7 @@ // //import 'package:flutter/material.dart'; //import 'package:flutter_test/flutter_test.dart'; -// -//import 'package:flutter_unit/main.dart'; + // //void main() { // testWidgets('Counter increments smoke test', (WidgetTester tester) async {