forked from lxm_flutter/FlutterUnit
增加 CompositedTransformTarget,CompositedTransformFollower组件,
This commit is contained in:
Binary file not shown.
@@ -75,6 +75,7 @@ class AppStorage {
|
||||
} else {
|
||||
print("========= 数据库 ======已存在====");
|
||||
}
|
||||
return await openDatabase(dbPath, readOnly: false);
|
||||
_database = await openDatabase(dbPath, readOnly: false);
|
||||
return _database;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, dynamic> 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}';
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<Color> 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: <Widget>[
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -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<Color> 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: <Widget>[
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -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';
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user