diff --git a/assets/flutter.db b/assets/flutter.db index 83ca57b..42a8730 100644 Binary files a/assets/flutter.db and b/assets/flutter.db differ 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(),