该功能需要 flutter_slidable 支持,我用的是 flutter_slidable: ^0.6.0 ,以下为代码:
class AddressManage extends StatefulWidget {
const AddressManage({super.key, this.fromSetting = 0});
final int fromSetting;
@override
State createState() => _AddressManageState();
}
class _AddressManageState extends State {
final String title = '地址管理';
final AddressManageViewModel addressManage = AddressManageViewModel();
final SlidableController _slidController = SlidableController();
@override
void initState() {
super.initState();
addressManage.initAddressManage().then((value) => setState(() {}));
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
if (addressManage.isLoad) {
return AppLoadPage(title);
}
return Scaffold(
backgroundColor: AppColors.page,
appBar: AppBarBasic(title),
body: addressManage.list.isEmpty
? const EmptyPage(
type: 1,
text: '还未添加地址',
bgColor: AppColors.page,
)
: ListView.builder(
padding: EdgeInsets.only(top: 21.rpx),
itemCount: addressManage.list.length,
itemBuilder: (BuildContext context, int index) {
AddressItem item = addressManage.list[index];
return Slidable(
controller: _slidController,
actionExtentRatio: 0.20,
key: Key(item.id.toString()),
actionPane: const SlidableStrechActionPane(),
secondaryActions: [
AddressEditBtn(
onTap: () => addressManage.gotoEditAddress(
context,
item.id ?? 0,
call: () => addressManage
.updateAddressListObj()
.then((value) => setState(() {})),
),
),
AddressEditBtn(
type: 1,
onTap: () {
singleButtonDialog(
context,
title: '确认删除吗?',
type: 0,
cancel: () => Navigator.pop(context),
confirm: () {
Navigator.pop(context);
addressManage
.deleteAddress('${item.id}')
.then((value) => setState(() {}));
},
);
},
),
],
child: AddressItemBox(
item: item,
addressManage: addressManage,
fromSetting: widget.fromSetting,
callback: () => setState(() {}),
),
);
},
),
bottomNavigationBar: AddressBottomBtn(
onPressed: () => addressManage.gotoAddressAdd(
context,
call: () => addressManage
.updateAddressListObj()
.then((value) => setState(() {})),
),
),
);
}
}