This commit is contained in:
toly
2023-12-16 12:40:32 +08:00
parent ab2778a22b
commit 01fdf966c5
593 changed files with 8995 additions and 27753 deletions

View File

@@ -30,8 +30,6 @@ class Coordinate {
canvas.restore();
}
void _drawAxis(Canvas canvas, Size size) {
_gridPaint
..color = Colors.blue
@@ -162,3 +160,4 @@ class Coordinate {
canvas.restore();
}
}

View File

@@ -1,121 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class DemoShower extends StatefulWidget {
final List<Widget> demos;
const DemoShower({super.key, required this.demos});
@override
State<DemoShower> createState() => _DemoShowerState();
}
class _DemoShowerState extends State<DemoShower> {
PageController _ctrl = PageController();
int _index = 0;
@override
Widget build(BuildContext context) {
return Material(
child: Stack(
alignment: Alignment.bottomCenter,
children: [
PageView(
controller: _ctrl,
children: widget.demos,
),
Positioned(
bottom: 20,
child: Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
children: [
TolyIconButton(
onTap: (){
_index= (_index-1)%widget.demos.length;
setState(() {
});
_ctrl.animateToPage(_index,curve: Curves.easeIn,duration: Duration(milliseconds: 200));
},
iconData: Icons.navigate_before,
size: 36,
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12),
child: Text('${_index+1}/${widget.demos.length}',style: TextStyle(fontSize: 16,color: Colors.grey),),
),
TolyIconButton(
onTap: (){
_index= (_index+1)%widget.demos.length;
setState(() {
});
_ctrl.animateToPage(_index,curve: Curves.easeIn,duration: Duration(milliseconds: 200));
},
size: 36,
iconData: Icons.navigate_next,
),
],
)),
],
),
);
}
}
class TolyIconButton extends StatefulWidget {
final IconData iconData;
final VoidCallback onTap;
final double size;
const TolyIconButton({
super.key,
required this.iconData,
required this.size, required this.onTap,
});
@override
State<TolyIconButton> createState() => _TolyIconButtonState();
}
class _TolyIconButtonState extends State<TolyIconButton> {
bool _hover = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: widget.onTap,
child: MouseRegion(
onEnter: _onEnter,
onExit: _onExit,
cursor: SystemMouseCursors.click,
child: Container(
width: widget.size,
height: widget.size,
decoration: BoxDecoration(
color: _hover?Colors.grey.withOpacity(0.6):Colors.grey.withOpacity(0.5), shape: BoxShape.circle),
child: Icon(
widget.iconData,
size: 26,
color: Colors.white,
),
),
),
);
}
void _onEnter(PointerEnterEvent event) {
setState(() {
_hover = true;
});
}
void _onExit(PointerExitEvent event) {
setState(() {
_hover = false;
});
}
}

View File

@@ -1,8 +1,7 @@
import 'package:components/components.dart';
import 'package:flutter/material.dart';
import 'package:flutter/src/gestures/events.dart';
import 'package:idraw/components/demo_shower.dart';
import 's01_page.dart' as s1;
import 's02_page.dart' as s2;
import 's01.dart' as s1;
import 's02.dart' as s2;
class P01Page extends StatelessWidget {
const P01Page({super.key});
@@ -10,6 +9,7 @@ class P01Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p01',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -21,6 +21,7 @@ class P02Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p02',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -21,6 +21,7 @@ class P03Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p03',
demos: [
s1.Paper(),
s2.Paper(),
@@ -39,3 +40,19 @@ class P03Page extends StatelessWidget {
);
}
}

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -16,6 +16,7 @@ class P04Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p04',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -20,6 +20,7 @@ class P05Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p05',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -14,6 +14,7 @@ class P06Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p06',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -14,6 +14,7 @@ class P07Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p07',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -18,6 +18,8 @@ class P08Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p08',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -11,6 +11,8 @@ class P09Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p09',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -13,6 +13,8 @@ class P10Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p10',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:idraw/components/demo_shower.dart';
import 'package:components/components.dart';
import 's01.dart' as s1;
import 's02.dart' as s2;
import 's03.dart' as s3;
@@ -12,6 +12,7 @@ class P11Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const DemoShower(
srcCodeDir: 'draw/p11',
demos: [
s1.Paper(),
s2.Paper(),

View File

@@ -80,7 +80,7 @@ class CurveBox extends StatefulWidget {
final Color color;
final Curve curve;
CurveBox({Key? key, this.color = Colors.lightBlue, this.curve = Curves.linear})
const CurveBox({Key? key, this.color = Colors.lightBlue, this.curve = Curves.linear})
: super(key: key);
@override

View File

@@ -34,6 +34,12 @@ class _PaperState extends State<Paper> with SingleTickerProviderStateMixin {
// _controller.repeat(reverse: true);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Center(