Refresh Swipe Delete Demo
Complete Code For Refresh Swipe Delete Demo In Flutter
Main.dart
import 'package:flutter/material.dart';
import 'dart:math';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: SwipeDelete()
)
)
);
}
}
class SwipeDelete extends StatefulWidget {
SwipeDelete() : super();
final String title = "Refresh/Swipe Delete";
@override
SwipeDeleteState createState() =>SwipeDeleteState();
}
class SwipeDeleteState extends State<SwipeDelete> {
//
List<String> companies;
GlobalKey<RefreshIndicatorState> refreshKey;
Random r;
@override
void initState() {
super.initState();
refreshKey = GlobalKey<RefreshIndicatorState>();
r = Random();
companies = List();
addCompanies();
}
addCompanies() {
companies.add("Moto G6");
companies.add("Apple");
companies.add("Samsung");
companies.add("Sony");
companies.add("Google");
companies.add("LG");
}
addRandomCompany() {
int nextCount = r.nextInt(100);
setState(() {
companies.add("Company $nextCount");
});
}
removeCompany(index) {
setState(() {
companies.removeAt(index);
});
}
undoDelete(index, company) {
setState(() {
companies.insert(index, company);
});
}
Future<Null> refreshList() async {
await Future.delayed(Duration(seconds: 10));
addRandomCompany();
return null;
}
showSnackBar(context, company, index) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('$company deleted'),
action: SnackBarAction(
label: "UNDO",
onPressed: () {
undoDelete(index, company);
},
),
));
}
Widget refreshBg() {
return Container(
alignment: Alignment.centerRight,
padding: EdgeInsets.only(right: 20.0),
color: Colors.red,
child: const Icon(
Icons.delete,
color: Colors.white,
),
);
}
Widget list() {
return ListView.builder(
padding: EdgeInsets.all(20.0),
itemCount: companies.length,
itemBuilder: (BuildContext context, int index) {
return row(context, index);
},
);
}
Widget row(context, index) {
return Dismissible(
key: Key(companies[index]), // UniqueKey().toString()
onDismissed: (direction) {
var company = companies[index];
showSnackBar(context, company, index);
removeCompany(index);
},
background: refreshBg(),
child: Card(
child: ListTile(
title: Text(companies[index]),
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
backgroundColor: Colors.cyan,
title: Text(widget.title),
),
body: RefreshIndicator(
key: refreshKey,
onRefresh: () async {
await refreshList();
},
child: list(),
),
);
}
}