From 4fcac5c25e7d06e6048c84a2aa0c38345f3b7b71 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Sat, 19 Dec 2020 21:00:50 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20AutomaticKeepAlive=E3=80=81KeepAli?= =?UTF-8?q?ve=E3=80=81ScrollView=E3=80=81BoxScrollView=E3=80=81SliverWithK?= =?UTF-8?q?eepAliveWidget=E3=80=81CupertinoUserInterfaceLevel=E3=80=81Inhe?= =?UTF-8?q?ritedTheme=E3=80=81ListWheelViewport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/flutter.db | Bin 913408 -> 946176 bytes .../Other/ListWheelViewport/node1_base.dart | 58 +++++++++ .../ListWheelViewport/node2_perspective.dart | 61 +++++++++ .../ListWheelViewport/node3_magnifier.dart | 68 ++++++++++ .../ListWheelViewport/node4_opacity.dart | 64 ++++++++++ .../node1_base.dart | 42 +++++++ .../InheritedTheme/node1_base.dart | 60 +++++++++ .../ProxyWidget/KeepAlive/node1_base.dart | 119 ++++++++++++++++++ .../Sliver/CustomScrollView/node1_base.dart | 2 +- .../SliverWithKeepAliveWidget/node1_base.dart | 35 ++++++ .../AutomaticKeepAlive/node1_base.dart | 118 +++++++++++++++++ .../BoxScrollView/node1_base.dart | 86 +++++++++++++ .../ScrollView/node1_base.dart | 115 +++++++++++++++++ lib/views/widgets/exp/other_unit.dart | 6 +- lib/views/widgets/exp/proxy_unit.dart | 3 + lib/views/widgets/exp/sliver_unit.dart | 1 + lib/views/widgets/exp/stateful_unit.dart | 1 + lib/views/widgets/exp/stateless_unit.dart | 2 + lib/views/widgets/widgets_map.dart | 38 +++++- 19 files changed, 876 insertions(+), 3 deletions(-) create mode 100644 lib/views/widgets/Other/ListWheelViewport/node1_base.dart create mode 100644 lib/views/widgets/Other/ListWheelViewport/node2_perspective.dart create mode 100644 lib/views/widgets/Other/ListWheelViewport/node3_magnifier.dart create mode 100644 lib/views/widgets/Other/ListWheelViewport/node4_opacity.dart create mode 100644 lib/views/widgets/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart create mode 100644 lib/views/widgets/ProxyWidget/InheritedTheme/node1_base.dart create mode 100644 lib/views/widgets/ProxyWidget/KeepAlive/node1_base.dart create mode 100644 lib/views/widgets/Sliver/SliverWithKeepAliveWidget/node1_base.dart create mode 100644 lib/views/widgets/StatefulWidget/AutomaticKeepAlive/node1_base.dart create mode 100644 lib/views/widgets/StatelessWidget/BoxScrollView/node1_base.dart create mode 100644 lib/views/widgets/StatelessWidget/ScrollView/node1_base.dart diff --git a/assets/flutter.db b/assets/flutter.db index 36c48aa2e49a072f33f67421e16be71fdd6783b8..f9700574be35ea41eeeb59f5d7ea21506fb8906e 100644 GIT binary patch delta 20564 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 data = [ + Colors.blue[50], Colors.blue[100], Colors.blue[200], + Colors.blue[300], Colors.blue[400], Colors.blue[500], + Colors.blue[600], Colors.blue[700], Colors.blue[800], + Colors.blue[900], Colors.blue[800], Colors.blue[700], + Colors.blue[600], Colors.blue[500], Colors.blue[400], + Colors.blue[300], Colors.blue[200], Colors.blue[100], + ]; + + @override + Widget build(BuildContext context) { + return Container( + height: 250, + width: 320, + child: Scrollable( + axisDirection: AxisDirection.down, + physics: BouncingScrollPhysics(), + dragStartBehavior: DragStartBehavior.start, + viewportBuilder: (ctx, position) => ListWheelViewport( + itemExtent: 100, + offset: position, + childDelegate: ListWheelChildLoopingListDelegate( + children: data.map((e) => _buildItem(e)).toList()), + )), + ); + } + + Widget _buildItem(Color color) => Container( + alignment: Alignment.center, + color: color, + child: Text(colorString(color), + style: TextStyle(color: Colors.white, shadows: [ + Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) + ])), + ); + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; +} diff --git a/lib/views/widgets/Other/ListWheelViewport/node2_perspective.dart b/lib/views/widgets/Other/ListWheelViewport/node2_perspective.dart new file mode 100644 index 0000000..120ee55 --- /dev/null +++ b/lib/views/widgets/Other/ListWheelViewport/node2_perspective.dart @@ -0,0 +1,61 @@ +import 'dart:math'; + +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: +// { +// "widgetId": 291, +// "name": 'ListWheelViewport 透视效果', +// "priority": 2, +// "subtitle": +// "【perspective】 : 透视参数 【double】\n" +// "【squeeze】 : 挤压值 【double】\n" +// "【diameterRatio】 : 直径分率 【double】", +// } + +class ListWheelViewportDemo2 extends StatelessWidget { + final List data = [ + Colors.blue[50], Colors.blue[100], Colors.blue[200], + Colors.blue[300], Colors.blue[400], Colors.blue[500], + Colors.blue[600], Colors.blue[700], Colors.blue[800], + Colors.blue[900], Colors.blue[800], Colors.blue[700], + Colors.blue[600], Colors.blue[500], Colors.blue[400], + Colors.blue[300], Colors.blue[200], Colors.blue[100], + ]; + + @override + Widget build(BuildContext context) { + return Container( + height: 250, + width: 320, + child: Scrollable( + axisDirection: AxisDirection.down, + physics: BouncingScrollPhysics(), + dragStartBehavior: DragStartBehavior.start, + viewportBuilder: (ctx, position) => ListWheelViewport( + perspective: 0.008, + squeeze: 1, + diameterRatio: 2, + itemExtent: 50, + offset: position, + childDelegate: ListWheelChildLoopingListDelegate( + children: data.map((e) => _buildItem(e)).toList()), + )), + ); + } + + Widget _buildItem(Color color) => Container( + alignment: Alignment.center, + color: color, + child: Text(colorString(color), + style: TextStyle(color: Colors.white, shadows: [ + Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) + ])), + ); + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; +} diff --git a/lib/views/widgets/Other/ListWheelViewport/node3_magnifier.dart b/lib/views/widgets/Other/ListWheelViewport/node3_magnifier.dart new file mode 100644 index 0000000..1a3d377 --- /dev/null +++ b/lib/views/widgets/Other/ListWheelViewport/node3_magnifier.dart @@ -0,0 +1,68 @@ +import 'dart:math'; + +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: +/// +// { +// "widgetId": 291, +// "name": 'ListWheelViewport 放大', +// "priority": 3, +// "subtitle": +// "【useMagnifier】 : 是否放大 【bool】\n" +// "【magnification】 : 放大比例 【double】\n" +// "【clipBehavior】 : 剪裁行为 【Clip】\n" +// "【renderChildrenOutsideViewport】 : 出视野是否渲染 【bool】", +// } + +class ListWheelViewportDemo3 extends StatelessWidget { + final List data = [ + Colors.blue[50], Colors.blue[100], Colors.blue[200], + Colors.blue[300], Colors.blue[400], Colors.blue[500], + Colors.blue[600], Colors.blue[700], Colors.blue[800], + Colors.blue[900], Colors.blue[800], Colors.blue[700], + Colors.blue[600], Colors.blue[500], Colors.blue[400], + Colors.blue[300], Colors.blue[200], Colors.blue[100], + ]; + + @override + Widget build(BuildContext context) { + return Container( + height: 250, + width: 320, + // color: Colors.red, + child: Scrollable( + axisDirection: AxisDirection.down, + physics: BouncingScrollPhysics(), + dragStartBehavior: DragStartBehavior.start, + viewportBuilder: (ctx, position) => ListWheelViewport( + perspective: 0.008, + squeeze: 1, + diameterRatio: 2, + itemExtent: 50, + useMagnifier: true, + magnification: 2, + renderChildrenOutsideViewport: true, + clipBehavior: Clip.none, + offset: position, + childDelegate: ListWheelChildLoopingListDelegate( + children: data.map((e) => _buildItem(e)).toList()), + )), + ); + } + + Widget _buildItem(Color color) => Container( + alignment: Alignment.center, + color: color, + child: Text(colorString(color), + style: TextStyle(color: Colors.white, shadows: [ + Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) + ])), + ); + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; +} diff --git a/lib/views/widgets/Other/ListWheelViewport/node4_opacity.dart b/lib/views/widgets/Other/ListWheelViewport/node4_opacity.dart new file mode 100644 index 0000000..620e7b2 --- /dev/null +++ b/lib/views/widgets/Other/ListWheelViewport/node4_opacity.dart @@ -0,0 +1,64 @@ +import 'dart:math'; + +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: +/// +// { +// "widgetId": 291, +// "name": '偏移和透明度', +// "priority": 4, +// "subtitle": +// "【offAxisFraction】 : 轴中心偏移比 【double】\n" +// "【overAndUnderCenterOpacity】 : 放大器之外的透明度 【double】", +// } + +class ListWheelViewportDemo4 extends StatelessWidget { + final List data = [ + Colors.blue[50], Colors.blue[100], Colors.blue[200], + Colors.blue[300], Colors.blue[400], Colors.blue[500], + Colors.blue[600], Colors.blue[700], Colors.blue[800], + Colors.blue[900], Colors.blue[800], Colors.blue[700], + Colors.blue[600], Colors.blue[500], Colors.blue[400], + Colors.blue[300], Colors.blue[200], Colors.blue[100], + ]; + + @override + Widget build(BuildContext context) { + return Container( + height: 250, + width: 320, + // color: Colors.red, + child: Scrollable( + axisDirection: AxisDirection.down, + physics: BouncingScrollPhysics(), + dragStartBehavior: DragStartBehavior.start, + viewportBuilder: (ctx, position) => ListWheelViewport( + perspective: 0.008, + squeeze: 1, + diameterRatio: 2, + offAxisFraction: 0.2, + overAndUnderCenterOpacity: 0.4, + itemExtent: 50, + offset: position, + childDelegate: ListWheelChildLoopingListDelegate( + children: data.map((e) => _buildItem(e)).toList()), + )), + ); + } + + Widget _buildItem(Color color) => Container( + alignment: Alignment.center, + color: color, + child: Text(colorString(color), + style: TextStyle(color: Colors.white, shadows: [ + Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) + ])), + ); + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; +} diff --git a/lib/views/widgets/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart b/lib/views/widgets/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart new file mode 100644 index 0000000..c34a93f --- /dev/null +++ b/lib/views/widgets/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart @@ -0,0 +1,42 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020-03-29 +/// contact me by email 1981462002@qq.com +/// 说明: 337 CupertinoUserInterfaceLevel 用户接口等级 +/// ios 中的概念,内容可视级别 UIUserInterfaceLevel ,分为 base 和 elevated。作为一个 InheritedWidget ,主要就是共享该数据。 + +// { +// "widgetId": 337, +// "name": 'CupertinoUserInterfaceLevel 介绍', +// "priority": 1, +// "subtitle": +// "CupertinoUserInterfaceLevel.of(context) 可以获取 CupertinoUserInterfaceLevelData 数据。也可以使用该组件设置该数据与子树共享。关于数据原图详见: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel", +// } + +class CupertinoUserInterfaceLevelDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + + return CupertinoUserInterfaceLevel( + data: CupertinoUserInterfaceLevelData.elevated, + child: LevelShower() + ); + } + +} + +class LevelShower extends StatelessWidget { + @override + Widget build(BuildContext context) { + CupertinoUserInterfaceLevelData data = CupertinoUserInterfaceLevel.of(context); + return Container( + height: 150, + alignment: Alignment.center, + color: Theme.of(context).primaryColor.withOpacity(0.1), + child: Text(data.toString()), + ); + } +} + + diff --git a/lib/views/widgets/ProxyWidget/InheritedTheme/node1_base.dart b/lib/views/widgets/ProxyWidget/InheritedTheme/node1_base.dart new file mode 100644 index 0000000..6ff4199 --- /dev/null +++ b/lib/views/widgets/ProxyWidget/InheritedTheme/node1_base.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 345 InheritedTheme 传承主题 +/// 它是抽象类,有非常多的 XXXTheme 相关子类,用于定义颜色、文字样式等属性,在子树中共享这些属性。 +/// link 324,326,328,329 +/// +// { +// "widgetId": 345, +// "name": 'InheritedTheme 介绍', +// "priority": 1, +// "subtitle": +// "InheritedTheme.capture 可以抓取上层主题,获取 CapturedThemes 对象,通过该对象 wrap 方法可以跨路由使用抓到的主题。", +// } + +class InheritedThemeDemo extends StatelessWidget { + + @override + Widget build(BuildContext context) { + return DefaultTextStyle( + style: TextStyle(fontSize: 24, color: Colors.blue), + child: TestBody(), + ); + } +} + +class TestBody extends StatelessWidget { + @override + Widget build(BuildContext context) { + + return GestureDetector( + onTap: () => _toNextPage(context), + child: Container( + height: 60, + margin: EdgeInsets.only(left: 40,right: 40), + alignment: Alignment.center, + color: Theme.of(context).primaryColor.withOpacity(0.1), + child: Text('点我进入下页'))); + } + + void _toNextPage(BuildContext context) { + // final NavigatorState navigator = Navigator.of(context); + // final CapturedThemes themes = + // InheritedTheme.capture(from: context, to: navigator.context); + // + // + // Navigator.of(context).push( + // MaterialPageRoute( + // builder: (BuildContext _) { + // return themes.wrap(Container( + // alignment: Alignment.center, + // color: Colors.white, + // child: Text('Flutter Unit'), + // )); + // }, + // ), + // ); + } +} diff --git a/lib/views/widgets/ProxyWidget/KeepAlive/node1_base.dart b/lib/views/widgets/ProxyWidget/KeepAlive/node1_base.dart new file mode 100644 index 0000000..135d896 --- /dev/null +++ b/lib/views/widgets/ProxyWidget/KeepAlive/node1_base.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 316 KeepAlive 保活 在懒加载的列表中,孩子的状态是否需要保活。是 AutomaticKeepAlive 的底层实现,一般不单独使用。 +/// link 239 +/// +// { +// "widgetId": 316, +// "name": 'KeepAlive 介绍', +// "priority": 1, +// "subtitle": +// "【child】 : *子组件 【Widget】\n" +// "【keepAlive】 : *是否保活 【bool】\n" +// "在 flutter 框架层中,只用于 AutomaticKeepAlive 中,源码中也说很少单独使用它。该示例展示出 ListView 条目的状态保活。", +// } + +class KeepAliveDemo extends StatelessWidget { + + final List data = [ + Colors.purple[50], + Colors.purple[100], + Colors.purple[200], + Colors.purple[300], + Colors.purple[400], + Colors.purple[500], + Colors.purple[600], + Colors.purple[700], + Colors.purple[800], + Colors.purple[900], + Colors.red[50], + Colors.red[100], + Colors.red[200], + Colors.red[300], + Colors.red[400], + Colors.red[500], + Colors.red[600], + Colors.red[700], + Colors.red[800], + Colors.red[900], + ]; + + @override + Widget build(BuildContext context) { + return Container( + height: 300, + child: ListView.builder( + itemCount: data.length, + itemBuilder: (_, index) => ColorBox( + color: data[index], + index: index, + ), + ), + ); + } +} + +class ColorBox extends StatefulWidget { + final Color color; + final int index; + + ColorBox({Key key, this.color, this.index}) : super(key: key); + + @override + _ColorBoxState createState() => _ColorBoxState(); +} + +class _ColorBoxState extends State with AutomaticKeepAliveClientMixin { + bool _checked = false; + + @override + void initState() { + super.initState(); + _checked = false; + print('-----_ColorBoxState#initState---${widget.index}-------'); + } + + @override + void dispose() { + print('-----_ColorBoxState#dispose---${widget.index}-------'); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + super.build(context); + + return Container( + alignment: Alignment.center, + height: 50, + color: widget.color, + child: Row( + children: [ + SizedBox(width: 60,), + Checkbox( + value: _checked, + onChanged: (v) { + setState(() { + _checked = v; + }); + }, + ), + Text( + "index ${widget.index}: ${colorString(widget.color)}", + style: TextStyle(color: Colors.white, shadows: [ + Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) + ]), + ), + ], + ), + ); + } + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/views/widgets/Sliver/CustomScrollView/node1_base.dart b/lib/views/widgets/Sliver/CustomScrollView/node1_base.dart index e4a1af3..2ff09ea 100644 --- a/lib/views/widgets/Sliver/CustomScrollView/node1_base.dart +++ b/lib/views/widgets/Sliver/CustomScrollView/node1_base.dart @@ -14,7 +14,7 @@ import 'package:flutter/material.dart'; // "【controller】 : 控制器 【ScrollController】", // } class CustomScrollViewDemo extends StatelessWidget { - final data = [ + final List data = [ Colors.purple[50], Colors.purple[100], Colors.purple[200], diff --git a/lib/views/widgets/Sliver/SliverWithKeepAliveWidget/node1_base.dart b/lib/views/widgets/Sliver/SliverWithKeepAliveWidget/node1_base.dart new file mode 100644 index 0000000..cd3d8a7 --- /dev/null +++ b/lib/views/widgets/Sliver/SliverWithKeepAliveWidget/node1_base.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 348 SliverWithKeepAliveWidget Sliver保活容器 +/// 它是抽象类,不能单独使用。只有其子类才可以容纳 KeepAlive 的孩子。 +/// link 316,239,188,185,314,186 +/// +// { +// "widgetId": 348, +// "name": 'SliverWithKeepAliveWidget 介绍', +// "priority": 1, +// "subtitle": +// "【key】 : 键 【Key】", +// } + + +class SliverWithKeepAliveWidgetDemo extends StatelessWidget { + final String info = + '只有 SliverWithKeepAliveWidget 之下才可以包含 KeepAlive 组件, 由于其为抽象类,不能直接使用。其子类 SliverMultiBoxAdaptorWidget 也说抽象类,' + '用于容纳多个孩子,帮助它的子类使用 SliverChildDelegate 构建懒加载 children。' + '最终实现类为 SliverGrid、SliverList、SliverPrototypeExtentList、SliverFixedExtentList,表示他们都可以支持 item 的状态保持。' + '除此之外还有 _SliverFillViewportRenderObjectWidget 的私有实现类,这是 PageView 的底层实现,这也是为什么 PageView 也支持保活的原因。'; + + @override + Widget build(BuildContext context) { + + return Container( + color: Theme.of(context).primaryColor.withOpacity(0.1), + padding: EdgeInsets.all(10), + margin: EdgeInsets.all(10), + child: Text(info), + ); + } +} \ No newline at end of file diff --git a/lib/views/widgets/StatefulWidget/AutomaticKeepAlive/node1_base.dart b/lib/views/widgets/StatefulWidget/AutomaticKeepAlive/node1_base.dart new file mode 100644 index 0000000..fe187be --- /dev/null +++ b/lib/views/widgets/StatefulWidget/AutomaticKeepAlive/node1_base.dart @@ -0,0 +1,118 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 239 AutomaticKeepAlive 自动保活 在懒加载的列表中,允许子树请求保持状态,单独使用无效果,需要配合 KeepAliveNotification 使用。 +/// link 59,162,163,165,185,188 +/// +// { +// "widgetId": 239, +// "name": 'AutomaticKeepAlive 介绍', +// "priority": 1, +// "subtitle": +// "【child】 : 子组件 【Widget】\n" +// "在 ListView、SliverList、GridView、SliverGrid、PageView、TabBarView 等列表、切页组件源码中都有使用到 AutomaticKeepAlive 组件。在保活某个 State 时,可以使用 AutomaticKeepAliveClientMixin 进行操作,它是对 KeepAliveNotification 使用的一个简易封装。该示例展示出 ListView 条目的状态保活。", +// } + +class AutomaticKeepAliveDemo extends StatelessWidget { + + final List data = [ + Colors.purple[50], + Colors.purple[100], + Colors.purple[200], + Colors.purple[300], + Colors.purple[400], + Colors.purple[500], + Colors.purple[600], + Colors.purple[700], + Colors.purple[800], + Colors.purple[900], + Colors.red[50], + Colors.red[100], + Colors.red[200], + Colors.red[300], + Colors.red[400], + Colors.red[500], + Colors.red[600], + Colors.red[700], + Colors.red[800], + Colors.red[900], + ]; + + @override + Widget build(BuildContext context) { + return Container( + height: 300, + child: ListView.builder( + itemCount: data.length, + itemBuilder: (_, index) => ColorBox( + color: data[index], + index: index, + ), + ), + ); + } +} + +class ColorBox extends StatefulWidget { + final Color color; + final int index; + + ColorBox({Key key, this.color, this.index}) : super(key: key); + + @override + _ColorBoxState createState() => _ColorBoxState(); +} + +class _ColorBoxState extends State with AutomaticKeepAliveClientMixin { + bool _checked = false; + + @override + void initState() { + super.initState(); + _checked = false; + print('-----_ColorBoxState#initState---${widget.index}-------'); + } + + @override + void dispose() { + print('-----_ColorBoxState#dispose---${widget.index}-------'); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + super.build(context); + + return Container( + alignment: Alignment.center, + height: 50, + color: widget.color, + child: Row( + children: [ + SizedBox(width: 60,), + Checkbox( + value: _checked, + onChanged: (v) { + setState(() { + _checked = v; + }); + }, + ), + Text( + "index ${widget.index}: ${colorString(widget.color)}", + style: TextStyle(color: Colors.white, shadows: [ + Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) + ]), + ), + ], + ), + ); + } + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/views/widgets/StatelessWidget/BoxScrollView/node1_base.dart b/lib/views/widgets/StatelessWidget/BoxScrollView/node1_base.dart new file mode 100644 index 0000000..1170546 --- /dev/null +++ b/lib/views/widgets/StatelessWidget/BoxScrollView/node1_base.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 350 BoxScrollView 盒滑动视图 +/// BoxScrollView 类是一个继承自 ScrollView 的抽象类,所以无法直接使用,它的子类有 ListView、GridView。一般不自己实现子类使用它。 +/// link 183,162,163 +/// +// { +// "widgetId": 350, +// "name": 'BoxScrollView 介绍', +// "priority": 1, +// "subtitle": +// "【reverse】 : 是否反向 【bool】\n" +// "【scrollDirection】 : 滑动方向 【Axis】\n" +// "【cacheExtent】 : 缓存长 【double】\n" +// "【dragStartBehavior】 : 拖动行为 【DragStartBehavior】\n" +// "【clipBehavior】 : 裁剪行为 【ClipBehavior】\n" +// "【controller】 : 控制器 【ScrollController】", +// } + +class BoxScrollViewDemo extends StatelessWidget { + + final String info = + 'BoxScrollView 是 ScrollView 的子类,实现了它的抽象方法,且暴露出另一个抽象方法 buildChildLayout,返回 Sliver 家族 Widget,' + '其子类有 ListView 和 GridView,分别使用 Sliver 家族相关List、Gird列表组件实现的。'; + + @override + Widget build(BuildContext context) { + return Container( + height: 300, + child: Column( + children: [ + Container( + color: Colors.blue.withOpacity(0.1), + padding: EdgeInsets.all(10), + margin: EdgeInsets.all(10), + child: Text(info), + ), + Expanded(child: MyBoxScrollView()), + ], + ), + ); + } +} + +class MyBoxScrollView extends BoxScrollView { + + final List data = [ + Colors.purple[50], + Colors.purple[100], + Colors.purple[200], + Colors.purple[300], + Colors.purple[400], + Colors.purple[500], + Colors.purple[600], + Colors.purple[700], + Colors.purple[800], + Colors.purple[900], + ]; + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; + + @override + Widget buildChildLayout(BuildContext context)=> SliverFixedExtentList( + itemExtent: 60, + delegate: SliverChildBuilderDelegate( + (_, int index) => Container( + alignment: Alignment.center, + width: 100, + height: 50, + color: data[index], + child: Text( + colorString(data[index]), + style: TextStyle(color: Colors.white, shadows: [ + Shadow( + color: Colors.black, + offset: Offset(.5, .5), + blurRadius: 2) + ]), + ), + ), + childCount: data.length), + ); +} diff --git a/lib/views/widgets/StatelessWidget/ScrollView/node1_base.dart b/lib/views/widgets/StatelessWidget/ScrollView/node1_base.dart new file mode 100644 index 0000000..09e8ed6 --- /dev/null +++ b/lib/views/widgets/StatelessWidget/ScrollView/node1_base.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 349 ScrollView 滑动视图 +/// 该组件用于滑动的支持,该类是一个抽象类,所以无法直接使用,它有很多实现类,如 CustomScrollView、BoxScrollView、ListView、GridView。 +/// link 183,162,163,253,340 +/// +// { +// "widgetId": 349, +// "name": 'ScrollView 介绍', +// "priority": 1, +// "subtitle": +// "【reverse】 : 是否反向 【bool】\n" +// "【scrollDirection】 : 滑动方向 【Axis】\n" +// "【cacheExtent】 : 缓存长 【double】\n" +// "【dragStartBehavior】 : 拖动行为 【DragStartBehavior】\n" +// "【clipBehavior】 : 裁剪行为 【ClipBehavior】\n" +// "【controller】 : 控制器 【ScrollController】", +// } + +class ScrollViewDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + height: 300, + child: MyScrollView(), + ); + } +} + +class MyScrollView extends ScrollView { + final String info = + 'ScrollView 其内部依靠 Viewport + Scrollable 实现滑动。它只有一个 buildSlivers 的抽象方法,返回 Sliver 家族 Widget 列表,' + '其子类最简单的是 CustomScrollView,将 slivers 交由用户传递,自身打个酱油。' + 'ListView 和 GridView 在底层源码中也是使用 Sliver 家族相关组件实现的。'; + + final List data = [ + Colors.purple[50], + Colors.purple[100], + Colors.purple[200], + Colors.purple[300], + Colors.purple[400], + Colors.purple[500], + Colors.purple[600], + Colors.purple[700], + Colors.purple[800], + Colors.purple[900], + ]; + + @override + List buildSlivers(BuildContext context) { + return [ + _buildSliverAppBar(), + SliverToBoxAdapter( + child: Container( + color: Colors.blue.withOpacity(0.1), + padding: EdgeInsets.all(10), + margin: EdgeInsets.all(10), + child: Text(info), + ), + ), + _buildSliverFixedExtentList() + ]; + } + + _buildSliverAppBar() { + return SliverAppBar( + expandedHeight: 190.0, + leading: Container( + margin: EdgeInsets.all(10), + child: Image.asset('assets/images/icon_head.webp')), + flexibleSpace: FlexibleSpaceBar( + //伸展处布局 + titlePadding: EdgeInsets.only(left: 55, bottom: 15), //标题边距 + collapseMode: CollapseMode.parallax, //视差效果 + title: Text( + '张风捷特烈', + style: TextStyle(color: Colors.black, //标题 + shadows: [ + Shadow(color: Colors.blue, offset: Offset(1, 1), blurRadius: 2) + ]), + ), + background: Image.asset( + "assets/images/caver.webp", + fit: BoxFit.cover, + ), + ), + ); + } + + Widget _buildSliverFixedExtentList() => SliverFixedExtentList( + itemExtent: 60, + delegate: SliverChildBuilderDelegate( + (_, int index) => Container( + alignment: Alignment.center, + width: 100, + height: 50, + color: data[index], + child: Text( + colorString(data[index]), + style: TextStyle(color: Colors.white, shadows: [ + Shadow( + color: Colors.black, + offset: Offset(.5, .5), + blurRadius: 2) + ]), + ), + ), + childCount: data.length), + ); + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; +} diff --git a/lib/views/widgets/exp/other_unit.dart b/lib/views/widgets/exp/other_unit.dart index 276e2c5..8309e77 100644 --- a/lib/views/widgets/exp/other_unit.dart +++ b/lib/views/widgets/exp/other_unit.dart @@ -9,4 +9,8 @@ export '../Other/ErrorWidget/node1_base.dart'; export '../Other/Table/node1_base.dart'; export '../Other/RawImage/node1_base.dart'; export '../Other/PerformanceOverlay/node1_base.dart'; -export '../Other/RenderObjectToWidgetAdapter/node1_base.dart'; \ No newline at end of file +export '../Other/RenderObjectToWidgetAdapter/node1_base.dart'; +export '../Other/ListWheelViewport/node1_base.dart'; +export '../Other/ListWheelViewport/node2_perspective.dart'; +export '../Other/ListWheelViewport/node3_magnifier.dart'; +export '../Other/ListWheelViewport/node4_opacity.dart'; \ No newline at end of file diff --git a/lib/views/widgets/exp/proxy_unit.dart b/lib/views/widgets/exp/proxy_unit.dart index e4f0bfd..966f268 100644 --- a/lib/views/widgets/exp/proxy_unit.dart +++ b/lib/views/widgets/exp/proxy_unit.dart @@ -27,3 +27,6 @@ export '../ProxyWidget/ButtonBarTheme/node1_base.dart'; export '../ProxyWidget/TooltipTheme/node1_base.dart'; export '../ProxyWidget/Directionality/node1_base.dart'; export '../ProxyWidget/TableCell/node1_base.dart'; +export '../ProxyWidget/KeepAlive/node1_base.dart'; +export '../ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart'; +export '../ProxyWidget/InheritedTheme/node1_base.dart'; diff --git a/lib/views/widgets/exp/sliver_unit.dart b/lib/views/widgets/exp/sliver_unit.dart index c4128c2..290cb25 100644 --- a/lib/views/widgets/exp/sliver_unit.dart +++ b/lib/views/widgets/exp/sliver_unit.dart @@ -24,3 +24,4 @@ export '../Sliver/SliverFillRemaining/node1_base.dart'; export '../Sliver/SliverIgnorePointer/node1_base.dart'; export '../Sliver/SliverAnimatedList/node1_base.dart'; export '../Sliver/SliverLayoutBuilder/node1_base.dart'; +export '../Sliver/SliverWithKeepAliveWidget/node1_base.dart'; diff --git a/lib/views/widgets/exp/stateful_unit.dart b/lib/views/widgets/exp/stateful_unit.dart index cf66146..dab2858 100644 --- a/lib/views/widgets/exp/stateful_unit.dart +++ b/lib/views/widgets/exp/stateful_unit.dart @@ -77,6 +77,7 @@ export '../StatefulWidget/CupertinoScrollbar/node1_base.dart'; export '../StatefulWidget/RawGestureDetector/node1_base.dart'; export '../StatefulWidget/Dismissible/node1_base.dart'; +export '../StatefulWidget/AutomaticKeepAlive/node1_base.dart'; export '../StatefulWidget/AnimatedBuilder/node1_base.dart'; export '../StatefulWidget/TweenAnimationBuilder/node1_base.dart'; export '../StatefulWidget/RawKeyboardListener/node1_base.dart'; diff --git a/lib/views/widgets/exp/stateless_unit.dart b/lib/views/widgets/exp/stateless_unit.dart index 9d18fe8..48b195c 100644 --- a/lib/views/widgets/exp/stateless_unit.dart +++ b/lib/views/widgets/exp/stateless_unit.dart @@ -49,6 +49,8 @@ export '../StatelessWidget/CupertinoPopupSurface/node1_base.dart'; export '../StatelessWidget/Divider/node1_base.dart'; export '../StatelessWidget/Divider/node2_height.dart'; +export '../StatelessWidget/ScrollView/node1_base.dart'; +export '../StatelessWidget/BoxScrollView/node1_base.dart'; export '../StatelessWidget/FloatingActionButton/node1_base.dart'; export '../StatelessWidget/FloatingActionButton/node2_mini.dart'; export '../StatelessWidget/FloatingActionButton/node3_shape.dart'; diff --git a/lib/views/widgets/widgets_map.dart b/lib/views/widgets/widgets_map.dart index a65cc99..c59549f 100644 --- a/lib/views/widgets/widgets_map.dart +++ b/lib/views/widgets/widgets_map.dart @@ -64,6 +64,41 @@ class WidgetsMap { return [ CustomBanner(), ]; + case "AutomaticKeepAlive": + return [ + AutomaticKeepAliveDemo(), + ]; + case "KeepAlive": + return [ + KeepAliveDemo(), + ]; + case "ListWheelViewport": + return [ + ListWheelViewportDemo(), + ListWheelViewportDemo2(), + ListWheelViewportDemo3(), + ListWheelViewportDemo4(), + ]; + case "InheritedTheme": + return [ + InheritedThemeDemo(), + ]; + case "ScrollView": + return [ + ScrollViewDemo(), + ]; + case "SliverWithKeepAliveWidget": + return [ + SliverWithKeepAliveWidgetDemo(), + ]; + case "BoxScrollView": + return [ + BoxScrollViewDemo(), + ]; + case "CupertinoUserInterfaceLevel": + return [ + CupertinoUserInterfaceLevelDemo(), + ]; case "CupertinoSliverNavigationBar": return [ CupertinoSliverNavigationBarDemo(), @@ -91,7 +126,8 @@ class WidgetsMap { case "CupertinoPopupSurface": return [ CupertinoPopupSurfaceDemo(), - ]; case "RenderObjectToWidgetAdapter": + ]; + case "RenderObjectToWidgetAdapter": return [ RenderObjectToWidgetAdapterDemo(), ];