大佬教程收集整理的这篇文章主要介绍了dart – 如何使用颤动在按钮网格中滑动/拖动2个或更多按钮,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经检查了一些相同的问题,我被重定向到使用手势检测器,但这还不够.我需要某些属性或更好的示例代码,以便我能够完成它.
可拖动应用程序的一个示例是http://a5.mzstatic.com/us/r30/Purple60/v4/6f/00/35/6f0035d3-1bab-fcbb-cb13-8ab46cf3c44d/screen696x696.jpeg
class Foo extends SingleChildRenderObjectWidget { final int index; Foo({Widget child,this.index,Key key}) : super(child: child,key: key); @override RenderObject createRenderObject(BuildContext context) { return _Foo()..index = index; } @override void updateRenderObject(BuildContext context,_Foo renderObject) { renderObject..index = index; } } class _Foo extends RenderProxyBox { int index; }
然后使用Listener提取指针下找到的所有_Foo.
这是使用此原则的完整应用程序:
import 'package:Flutter/gestures.dart'; import 'package:Flutter/material.dart'; import 'package:Flutter/rendering.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo',theme: ThemeData(priMarySwatch: Colors.bluE),home: MyHomePage(title: 'Flutter Demo Home Page'),); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key,this.titlE}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.titlE),),body: Grid(),); } } class Grid extends StatefulWidget { @override GridState createState() { return new GridState(); } } class GridState extends State<Grid> { final Set<int> SELEctedIndexes = Set<int>(); final key = GlobalKey(); final Set<_Foo> _trackTaped = Set<_Foo>(); _detectTapedItem(PointerEvent event) { final RenderBox Box = key.currentContext.findRenderObject(); final result = HitTestResult(); Offset local = Box.globalToLocal(event.position); if (Box.hitTest(result,position: local)) { for (final hit in result.path) { /// temporary variable so that the [is] allows access of [index] final target = hit.target; if (target is _Foo && !_trackTaped.contains(target)) { _trackTaped.add(target); _SELEcTindex(target.indeX); } } } } _SELEcTindex(int indeX) { setState(() { SELEctedIndexes.add(indeX); }); } @override Widget build(BuildContext context) { return Listener( onPointerDown: _detectTapedItem,onPointerMove: _detectTapedItem,onPointerUp: _clearSELEction,child: GridView.builder( key: key,itemCount: 6,physics: NeverScrollableScrollPhysics(),gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3,childAspectRatio: 1.0,crossAxisSpacing: 5.0,mainAxisSpacing: 5.0,itemBuilder: (context,indeX) { return Foo( index: index,child: Container( color: SELEctedIndexes.contains(indeX) ? Colors.red : Colors.blue,); },); } void _clearSELEction(PointerUpEvent event) { _trackTaped.clear(); setState(() { SELEctedIndexes.clear(); }); } } class Foo extends SingleChildRenderObjectWidget { final int index; Foo({Widget child,key: key); @override _Foo createRenderObject(BuildContext context) { return _Foo()..index = index; } @override void updateRenderObject(BuildContext context,_Foo renderObject) { renderObject..index = index; } } class _Foo extends RenderProxyBox { int index; }
以上是大佬教程为你收集整理的dart – 如何使用颤动在按钮网格中滑动/拖动2个或更多按钮全部内容,希望文章能够帮你解决dart – 如何使用颤动在按钮网格中滑动/拖动2个或更多按钮所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。