带钩子的 Riverpod 不会重建 ListView

时间:2021-06-09 06:30:04

标签: flutter listview riverpod

我已经使用 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),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

问题在于您如何修改 StateNotifier 中的状态。

要更新状态,您必须实际替换状态对象。

将您的添加功能更改为以下内容:

void add() => state = [...state, 'Other Store'];

Here's an example 来自 Riverpod 的开发者,展示了作为 StateNotifier 状态的数组修改。

相关问题