Chào mọi người, mình đang tự học Flutter, mình có case như sau:
Mình có một provider xử lý danh sách gas và một ListView. Mình xử lý vuốt qua item trên list thì sẽ Delete item đó -> hiện snackBar để undo, lúc làm nút undo trên SnackBar và xử lý bằng Riverpod thì mình không tìm được cách để setState như StatefulWidget để Parents của cái gas_list.dart rebuild lại. Mình đã research nhưng không thể thông được. Bên dưới là source code, rất mong được mọi người góp ý và hướng dẫn.
Xin cảm ơn.
Edit1: Lúc copy code format vẫn bình thường nhưng đăng lên lại bị mất format, mong mọi người thông cảm
Mod: bỏ vào thẻ code
Edit2: thank mod
Edit3: cảm ơn bạn Conghechua - gọi state thì sẽ rebuild lại cái gas_list.dart
Mình có một provider xử lý danh sách gas và một ListView. Mình xử lý vuốt qua item trên list thì sẽ Delete item đó -> hiện snackBar để undo, lúc làm nút undo trên SnackBar và xử lý bằng Riverpod thì mình không tìm được cách để setState như StatefulWidget để Parents của cái gas_list.dart rebuild lại. Mình đã research nhưng không thể thông được. Bên dưới là source code, rất mong được mọi người góp ý và hướng dẫn.
Xin cảm ơn.
JavaScript:
gas_provider.dart
class GasNotifier extends StateNotifier<List<Gas>>{
GasNotifier() : super (gasTempList);
void addGas(Gas gas){
state = [...state, gas];
}
void removeGas(Gas gas){
state = state.where((e) => e.maGas != gas.maGas).toList();
}
void insertGas(int index, Gas gas) {
state.insert(index, gas);
}
}
final gasListProvider = StateNotifierProvider<GasNotifier, List<Gas>>((ref) {
return GasNotifier();
},);
gas_list.dart
class GasList extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final gasList = ref.watch(gasListProvider);
return ListView.builder(
itemCount: gasList.length,
itemBuilder: (context, index) {
final gas = gasList[index];
return Dismissible(
key: ValueKey(gas),
onDismissed: (direction) {
final removedGas = gasList[index];
ref.read(gasListProvider.notifier).removeGas(index);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Deleted Successfully'),
action: SnackBarAction(
label: 'Undo',
onPressed: () {
ref.read(gasListProvider.notifier).insertGas(index, removedGas);
},
),
),
);
},
);
},
);
}
}
Edit1: Lúc copy code format vẫn bình thường nhưng đăng lên lại bị mất format, mong mọi người thông cảm
Mod: bỏ vào thẻ code
Edit2: thank mod
Edit3: cảm ơn bạn Conghechua - gọi state thì sẽ rebuild lại cái gas_list.dart
Sửa lần cuối: