import 'package:flutter/material.dart';
import 'package:flutter_list_drag_and_drop/drag_and_drop_list.dart';
void main() => runApp(new ExperimentApp());
class ExperimentApp extends StatelessWidget {
ExperimentApp({Key key});
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Experimenting!',
theme: new ThemeData(
primaryColor: Colors.white,
accentColor: Colors.deepOrange,
),
home: new ListExperiment(
title: 'Experiment Home Page',
key: key,
),
);
}
}
class ListExperiment extends StatefulWidget {
ListExperiment({Key key, this.title}) : super(key: key);
final String title;
@override
ListExperimentState createState() => new ListExperimentState();
}
class ListExperimentState extends State<ListExperiment> {
final List<String> _items = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']; // TODO: change to a Set
final TextStyle _rankStyle = const TextStyle(fontSize: 20.0, color: Colors.deepOrange);
bool listWasChanged = false;
@override
Widget build(BuildContext context) {
Scaffold scaffold = new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
actions: <Widget>[
new IconButton(icon: const Icon(Icons.add), onPressed: _addItem),
],
),
body: new DragAndDropList<String>(
_items,
itemBuilder: (BuildContext context, item) => _buildRow(item),
onDragFinish: (before, after) {
String data = _items[before];
_items.removeAt(before);
_items.insert(after, data);
},
canBeDraggedTo: (one, two) => true,
dragElevation: 8.0,
listWasChanged: listWasChanged,
),
);
listWasChanged = false;
return scaffold;
}
Widget _buildRow(String item) => new Dismissible(
// Each Dismissible must contain a unique Key.
key: new Key(item),
onDismissed: (direction) {
setState(() {
_items.remove(item);
listWasChanged = true;
});
},
// Show a red background as the item is swiped away
background: new Container(color: Colors.red),
child: new SizedBox(
child: new Card(
child: new ListTile(
leading: new Text(
(_items.indexOf(item) + 1).toString(),
style: _rankStyle,
),
title: new Text(item),
),
),
),
);
void _addItem() {
print("Going to make a new item...");
setState(() {
_showAddDialog(context);
//_items.add('Item X');
listWasChanged = true;
});
}
void _showAddDialog(BuildContext context) {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) => new AlertDialog(
title: new Center(child: new Text('Alert')),
content: new Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children : <Widget>[
new Expanded(
child: new Text(
'Message here',
textAlign: TextAlign.center,
),
)
],
),
actions: <Widget>[
new FlatButton(
child: new Text('Cancel'),
onPressed: () {
Navigator.of(context).pop();
}),
new FlatButton(
child: new Text('Ok'),
onPressed: () {
print('TODO: stuff');
Navigator.of(context).pop();
})
],
),
);
}
}