From 625eb61e5c71d84b6521e9dfbdee37a01636a8bd Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Wed, 31 Mar 2021 21:12:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20CompositedTransformTarget,?= =?UTF-8?q?CompositedTransformFollower=E7=BB=84=E4=BB=B6=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/flutter.db | Bin 970752 -> 978944 bytes lib/repositories/app_storage.dart | 3 +- lib/repositories/bean/widget_po.dart | 16 ++- .../rep/impl/widget_db_repository.dart | 5 + .../node1_base.dart | 119 ++++++++++++++++++ .../CompositedTransformTarget/node1_base.dart | 112 +++++++++++++++++ lib/views/widgets/exp/render_object_unit.dart | 2 + lib/views/widgets/widgets_map.dart | 16 ++- 8 files changed, 267 insertions(+), 6 deletions(-) create mode 100644 lib/views/widgets/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart create mode 100644 lib/views/widgets/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart diff --git a/assets/flutter.db b/assets/flutter.db index 83ca57b0585ee1edd747f810e059562c1a30cf6f..42a873058c54680ad96236d4055f7ae8a8714b79 100644 GIT binary patch delta 10743 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 TlOHZVWg5YNOuY4;DW3XoXd379 delta 6629 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 diff --git a/lib/repositories/app_storage.dart b/lib/repositories/app_storage.dart index 95f33c9..ab0eb23 100644 --- a/lib/repositories/app_storage.dart +++ b/lib/repositories/app_storage.dart @@ -75,6 +75,7 @@ class AppStorage { } else { print("========= 数据库 ======已存在===="); } - return await openDatabase(dbPath, readOnly: false); + _database = await openDatabase(dbPath, readOnly: false); + return _database; } } diff --git a/lib/repositories/bean/widget_po.dart b/lib/repositories/bean/widget_po.dart index 508bbcc..6cddc55 100644 --- a/lib/repositories/bean/widget_po.dart +++ b/lib/repositories/bean/widget_po.dart @@ -33,13 +33,27 @@ class WidgetPo extends Equatable { name: map['name'], nameCN: map["nameCN"], family: map["family"], - collected: map["collected"]??0, + collected: map["collected"] ?? 0, lever: map["lever"].toDouble(), image: map["image"], linkWidget: map["linkWidget"], info: map["info"]); } + Map toJson() { + return { + "id": this.id, + "name": this.name, + "nameCN": this.nameCN, + "family": this.family, + "collected": this.collected, + "lever": this.lever, + "image": this.image, + "linkWidget": this.linkWidget, + "info": this.info + }; + } + @override String toString() { return 'WidgetPo{id: $id, name: $name, nameCN: $nameCN, collected: $collected, family: $family, lever: $lever, image: $image, info: $info}'; diff --git a/lib/repositories/rep/impl/widget_db_repository.dart b/lib/repositories/rep/impl/widget_db_repository.dart index 8aa3bf3..6e9d307 100644 --- a/lib/repositories/rep/impl/widget_db_repository.dart +++ b/lib/repositories/rep/impl/widget_db_repository.dart @@ -1,4 +1,8 @@ +import 'dart:convert'; +import 'dart:io'; + + import 'package:flutter_unit/repositories/app_storage.dart'; import 'package:flutter_unit/repositories/bean/widget_po.dart'; import 'package:flutter_unit/repositories/dao/node_dao.dart'; @@ -8,6 +12,7 @@ import 'package:flutter_unit/model/enums.dart'; import 'package:flutter_unit/model/node_model.dart'; import 'package:flutter_unit/model/widget_model.dart'; import 'package:flutter_unit/repositories/rep/widget_repository.dart'; +import 'package:path_provider/path_provider.dart'; /// create by 张风捷特烈 on 2020-03-03 diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart b/lib/views/widgets/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart new file mode 100644 index 0000000..c54530e --- /dev/null +++ b/lib/views/widgets/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart @@ -0,0 +1,119 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/3/31 +/// contact me by email 1981462002@qq.com +/// +/// 说明: 265 CompositedTransformFollower 2 合成变换跟随者,一般与 CompositedTransformTarget 组件联合使用,可以使 Overlay 伴随目标变换。 +// { +// "widgetId": 265, +// "name": "基本使用", +// "name": "CompositedTransformFollower 使用", +// "priority": 1, +// "subtitle": +// "【child】 : 子组件 【Widget】\n" +// "【link】 : 链接 【LayerLink】\n" +// "【offset】 : 偏移 【Offset】\n" +// "【targetAnchor】 : 目标锚点 【Alignment】\n" +// "【followerAnchor】 : 伴随者锚点 【Alignment】\n" +// "【showWhenUnlinked】 : 为链接是否显示 【bool】", +// } + +class CompositedTransformFollowerDemo extends StatelessWidget { + + const CompositedTransformFollowerDemo(); + + static const List colors =[Colors.red,Colors.yellow,Colors.blue,Colors.green]; + + @override + Widget build(BuildContext context) { + return Container( + transform: Matrix4.rotationZ(-15/180*pi), + height: 250, + padding: const EdgeInsets.all(50.0), + child: ListView( + scrollDirection: Axis.horizontal, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [_LogoTips(), const Text('点击图标\n显隐弹框')], + ), + ...colors.map((color) => Container(width: 80, color: color)) + ], + ), + ); + } + + +} + +class _LogoTips extends StatefulWidget { + @override + _LogoTipsState createState() => _LogoTipsState(); +} + +class _LogoTipsState extends State<_LogoTips> { + OverlayEntry _overlayEntry; + + final LayerLink _layerLink = LayerLink(); + + bool show = false; + + OverlayEntry _createOverlayEntry() { + + return OverlayEntry( + builder: (context) => Positioned( + width: 150, + child: CompositedTransformFollower( + link: this._layerLink, + showWhenUnlinked: false, + offset: Offset(0,-10), + targetAnchor: Alignment.topRight, + child: Card( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text('我是一个 Overlay,目标组件为图标,当它变换时,我会伴随变换。'), + ), + ), + ), + )); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: _toggleOverlay, + child: CompositedTransformTarget( + link: this._layerLink, + child: + FlutterLogo( + size: 80, + ), + )); + } + + void _toggleOverlay() { + if (!show) { + _showOverlay(); + } else { + _hideOverlay(); + } + show = !show; + } + + void _showOverlay() { + _overlayEntry = _createOverlayEntry(); + Overlay.of(context).insert(_overlayEntry); + } + + void _hideOverlay() { + _overlayEntry?.remove(); + } + + @override + void dispose() { + _hideOverlay(); + super.dispose(); + } +} diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart b/lib/views/widgets/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart new file mode 100644 index 0000000..7ae48ca --- /dev/null +++ b/lib/views/widgets/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart @@ -0,0 +1,112 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/3/31 +/// contact me by email 1981462002@qq.com +/// +/// 说明: 266 CompositedTransformTarget 2 合成变换目标,一般与 CompositedTransformFollower 组件联合使用,可以使 Overlay 伴随目标变换。 +// { +// "widgetId": 266, +// "name": "CompositedTransformTarget 使用", +// "priority": 1, +// "subtitle": +// "【child】 : 子组件 【Widget】\n" +// "【link】 : 链接 【LayerLink】", +// } + +class CompositedTransformTargetDemo extends StatelessWidget { + + + const CompositedTransformTargetDemo(); + + static const List colors =[Colors.red,Colors.yellow,Colors.blue,Colors.green]; + + @override + Widget build(BuildContext context) { + return Container( + transform: Matrix4.rotationZ(-15/180*pi), + height: 250, + padding: const EdgeInsets.all(50.0), + child: ListView( + scrollDirection: Axis.horizontal, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [_LogoTips(), const Text('点击图标\n显隐弹框')], + ), + ...colors.map((color) => Container(width: 80, color: color)) + ], + ), + ); + } + +} + +class _LogoTips extends StatefulWidget { + @override + _LogoTipsState createState() => _LogoTipsState(); +} + +class _LogoTipsState extends State<_LogoTips> { + OverlayEntry _overlayEntry; + + final LayerLink _layerLink = LayerLink(); + + bool show = false; + + OverlayEntry _createOverlayEntry() { + return OverlayEntry( + builder: (context) => Positioned( + width: 150, + child: CompositedTransformFollower( + link: this._layerLink, + showWhenUnlinked: false, + targetAnchor: Alignment.topRight, + child: Card( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text('我是一个 Overlay,目标组件为图标,当它变换时,我会伴随变换。'), + ), + ), + ), + )); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: _toggleOverlay, + child: CompositedTransformTarget( + link: this._layerLink, + child: + FlutterLogo( + size: 80, + ), + )); + } + + void _toggleOverlay() { + if (!show) { + _showOverlay(); + } else { + _hideOverlay(); + } + show = !show; + } + + void _showOverlay() { + _overlayEntry = _createOverlayEntry(); + Overlay.of(context).insert(_overlayEntry); + } + + void _hideOverlay() { + _overlayEntry?.remove(); + } + + @override + void dispose() { + _hideOverlay(); + super.dispose(); + } +} diff --git a/lib/views/widgets/exp/render_object_unit.dart b/lib/views/widgets/exp/render_object_unit.dart index 2ea2a1b..9ac2154 100644 --- a/lib/views/widgets/exp/render_object_unit.dart +++ b/lib/views/widgets/exp/render_object_unit.dart @@ -33,6 +33,8 @@ export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart'; export '../SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart'; export '../SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart'; +export '../SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart'; +export '../SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart'; export '../SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart'; export '../SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart'; diff --git a/lib/views/widgets/widgets_map.dart b/lib/views/widgets/widgets_map.dart index 866fd87..131e279 100644 --- a/lib/views/widgets/widgets_map.dart +++ b/lib/views/widgets/widgets_map.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; +import 'exp/other_unit.dart'; +import 'exp/proxy_unit.dart'; +import 'exp/render_object_unit.dart'; +import 'exp/sliver_unit.dart'; import 'exp/stateful_unit.dart'; import 'exp/stateless_unit.dart'; -import 'exp/render_object_unit.dart'; -import 'exp/proxy_unit.dart'; -import 'exp/other_unit.dart'; -import 'exp/sliver_unit.dart'; /// AUTO CREATED BY [张风捷特烈] , DON'T MODIFY! @@ -26,6 +26,14 @@ class WidgetsMap { CupertinoSegmentedControlDemo(), CupertinoSegmentedControlColor() ]; + case "CompositedTransformTarget": + return [ + const CompositedTransformTargetDemo(), + ]; + case "CompositedTransformFollower": + return [ + const CompositedTransformFollowerDemo(), + ]; case "Text": return [ CustomText(),