フラッター-26-ドラッグ可能なコントロール

強力なドラッグアンドドロップのコントロールを提供し、あなたは柔軟なカスタマイズすることができます

ドラッグ可能なウィジェット

ドラッグ可能なコントロールは、親がドラッグ可能に使用され、その子はあなたが、達成することができ、コンテナの子要素をドラッグすることができ、画像にできることであるドラッグする責任があります。非常に柔軟性を持ちます。

パラメータ:

データ:渡されるパラメータはDragTarget年に、このパラメータを受け取ります、です。もちろん、ドラッグでドラッグをプッシュすることはDragTarget時間を制御します。
子供:あなたはプッシュプル要素を配置することが画像やテキストことができ、容器であってもよいです。
フィードバック:のような一般的に使用される設定時にプッシュプルは、私たちは色の透明度を50%にそれを入れた場合のプッシュプル要素。もちろん、あなたもその大きさを変更することができます。
onDraggableCanceled:対応するイベントを緩めたとき、多くの場合、プッシュプルは、SETSTATEを変更することによって実行される際に到達した位置を変更するために使用。

DragTargetウィジェット

DragTargetコントロールはDragTargetにドラッグ可能で、彼は価値ドラッグ可能渡さ以上受信したときに、ドラッグイベントを受け取り、その後、発電機による部品の状態を変更するために使用されます。

OnAcceptの:プッシュされた場合は、値が渡さを取得するために、多くの場合、ここでは、トリガーでコントロールをドラッグ。
ビルダー:ビルダー、変更された値の内側の子供。

エントリーコード:
インポート'パッケージ:フラッター/ material.dart';
インポート'draggable_demo.dart';

無効メイン()=> runApp(新しいMyAppを());

クラスMyAppにはStatelessWidget {拡張
@Overrideの
ウィジェットのビルド(BuildContextコンテキストが){
MaterialAppを返す(
タイトル: 'フラッターデモ'、
テーマ:ThemeData(
primarySwatch:Colors.blue
)、
ホーム:DraggableDemo()
);
}
}

draggable_demo.dartファイル:

インポート 'パッケージ:フラッター/ material.dart';

インポート 'draggable_widget.dart';

クラスDraggableDemoは{StatefulWidgetを拡張
@Override
_DraggableDemoState createState()=> _DraggableDemoState();
}

クラス_DraggableDemoStateはステート<DraggableDemo> {延び
カラー_draggableColor = Colors.greyと、

@Override
ウィジェットビルド(BuildContextコンテキスト){
足場(戻り
体:スタック(
子供<ウィジェット> [
DraggableWidget(
オフセット:オフセット(80.0、80.0)、
widgetColor:Colors.tealAccentを、
)、
DraggableWidgetは(
オフセット:オフセット(180.0、80.0を)、
widgetColor:Colors.redAccent、
)、
センター(
子:DragTarget(OnAcceptの:(カラー色){
_draggableColor =色;
}、ビルダー(文脈、candidateData、rejectedData){
コンテナ(戻り
200.0、:幅
、200.0:高さ
色:_draggableColor、
);
})

]
));
}
}

draggable_widget.dartファイル:

インポート 'パッケージ:フラッター/ material.dart';

クラスDraggableWidgetはStatefulWidgetを拡張{
最終的なオフセットオフセット。
最終的な色widgetColor。
CONST DraggableWidget({キーキー、this.offset、this.widgetColor}):スーパー(キー:キー)
_DraggableWidgetState createState()=> _DraggableWidgetState();
}

クラス_DraggableWidgetStateはステート<DraggableWidget> {延び
(0.0,0.0)オフセット=オフセットオフセット。
@Override
ボイドinitState(){
super.initState()。
= widget.offsetオフセット。
}

@Override
ウィジェットビルド(BuildContextコンテキスト){
リターン位置付け(
左:offset.dx、
トップ:offset.dy、
子:ドラッグ可能(
データ:widget.widgetColor、
子:コンテナ(
幅:100、
高さ:100、
色:ウィジェット。 widgetColor、
)、
フィードバック:コンテナ(
幅:100.0、
高さ:100.0、
色:widget.widgetColor.withOpacity(0.5)、
)、
onDraggableCanceled:(速度速度は、オフセットoffset){
SETSTATE((){
this.offset =オフセット。
});
}

)。
}
}

おすすめ

転載: blog.csdn.net/weixin_34396103/article/details/90774800