我已经使用 hooks_riverpod 实现了一个简单的 ListView。有一个按钮可以向 ListView 添加新项目 (Other Store
),但是当我单击它时,ListView 不会改变。我知道该项目已添加到列表中,因为我通过打印检查了 storeList
的值。任何想法为什么 ListView.separated
在列表更改时不重建?
套餐:
flutter_hooks: 0.17.0
hooks_riverpod:0.14.0
state_notifier: 0.7.0
class StoreListController extends StateNotifier<List<String>> {
StoreListController() : super(['First Store']);
void add() => state.add('Other Store');
}
final storeListProvider =
StateNotifierProvider<StoreListController, List<String>>(
(_) => StoreListController(),
);
class HomePage extends HookWidget {
@override
Widget build(BuildContext context) {
final storeList = useProvider(storeListProvider);
return Scaffold(
appBar: AppBar(
title: Text('ListView Sample'),
),
body: ListView.separated(
itemBuilder: (context, index) => ListTile(
title: Text(storeList[index]),
),
itemCount: storeList.length,
separatorBuilder: (context, index) => const Divider(),
),
floatingActionButton: FloatingActionButton(
onPressed: () => context.read(storeListProvider.notifier).add(),
child: Icon(Icons.add),
),
);
}
}
答案 0 :(得分:0)
问题在于您如何修改 StateNotifier 中的状态。
要更新状态,您必须实际替换状态对象。
将您的添加功能更改为以下内容:
void add() => state = [...state, 'Other Store'];
Here's an example 来自 Riverpod 的开发者,展示了作为 StateNotifier 状态的数组修改。