import 'package:akuCommunity/utils/logger/logger_card.dart'; import 'package:akuCommunity/utils/logger/logger_data.dart'; import 'package:akuCommunity/extensions/page_router.dart'; import 'package:flutter/material.dart'; import 'package:velocity_x/velocity_x.dart'; class LoggerFAB extends StatefulWidget { static openLogger(BuildContext context) { Overlay.of(context).insert(OverlayEntry( builder: (context) { return LoggerFAB(); }, )); } LoggerFAB({Key key}) : super(key: key); @override _LoggerFABState createState() => _LoggerFABState(); } class _LoggerFABState extends State { double _x = 100; double _y = 100; double get screenWidth => MediaQuery.of(context).size.width; double get screenHeight => MediaQuery.of(context).size.height; bool _moving = false; @override Widget build(BuildContext context) { return Stack( children: [ AnimatedPositioned( duration: _moving ? Duration.zero : Duration(milliseconds: 300), left: _x - 25, top: _y - 25, child: GestureDetector( onPanStart: (detail) { _moving = true; }, onPanUpdate: (details) { setState(() { _x = details.globalPosition.dx; _y = details.globalPosition.dy; }); }, onPanEnd: (detail) { if (_x < 100) _x = 50; if (_y < 100) _y = 75; if (_x > screenWidth - 50) _x = screenWidth - 50; if (_y > screenHeight - 50) _y = screenHeight - 50; _moving = false; setState(() {}); }, onTap: () { LoggerView().to(); }, child: Container( decoration: BoxDecoration( color: Colors.yellowAccent, borderRadius: BorderRadius.circular(25), ), height: 50, width: 50, child: Icon(Icons.code), ), ), ) ], ); } } class LoggerView extends StatefulWidget { LoggerView({Key key}) : super(key: key); init() {} @override _LoggerViewState createState() => _LoggerViewState(); } class _LoggerViewState extends State { @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: 'Logger'.text.make(), actions: [ IconButton(icon: Icon(Icons.list), onPressed: () {}), ], ), body: ListView.builder( itemBuilder: (context, index) => LoggerCard(data: LoggerData.data[index]), itemCount: LoggerData.data.length, ), ); } }