首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >flutter_riverpod如何侦听列表

flutter_riverpod如何侦听列表
EN

Stack Overflow用户
提问于 2021-10-28 15:37:42
回答 1查看 120关注 0票数 0

我想使用flutter_riverpod来查看数据列表。但是,当我更改列表中的数据内容时,小部件不会刷新。

flutter_riverpod:^1.0.0-dev.7

代码的一部分如下:

代码语言:javascript
运行
复制
final personProvider = ChangeNotifierProvider((ref) => PersonProvider());

class PersonProvider extends ChangeNotifier {
  List<Person> personList;

  PersonProvider() {
    personList = [
      Person(name: "jack", age: 20),
      Person(name: "rose", age: 18),
    ];
  }
  
  void changeData() {
    // change person
    //personList[0].name = "new jack";
    // add person
    personList.add(Person(name: "lili", age: 25));
    notifyListeners();
  }
}

页面的构建方法如下:

代码语言:javascript
运行
复制
@override
  Widget build(BuildContext context) {
    // watch List
    List<Person> list = ref.watch(personProvider.select((value) => value.personList));
    return Scaffold(
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.change_circle),
          onPressed: () {
            // modify the data of list 
            ref.read(personProvider).changeData();
          },
        ),
        appBar: AppBar(),
        body: Column(
          children: list
              .map((person) => ListTile(
                    title: Text(person.name),
                    subtitle: Text("${person.age}"),
                  ))
              .toList(),
        ));
  }

Code link

如何使用flutter_riverpod查看列表中的数据变化,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-10-28 19:13:43

稍微修改一下您的代码;使用Riverpod时,我可以在一周内的任何一天使用ChangeNotifier上的StateNotifier。在我看来,它允许更结构化的逻辑。您的代码将如下所示。

代码语言:javascript
运行
复制
class PersonNotifier extends StateNotifier<List<Person>> {
  PersonNotifier()
      : super([
          Person(name: "jack", age: 20),
          Person(name: "rose", age: 18),
        ]);

  void changeData(Person person) {
    state = [...state, person];
  }
}

final StateNotifierProvider<PersonNotifier, List<Person>> personProvider =
    StateNotifierProvider((ref) => PersonNotifier());

然后你可以像这样在你的代码中监听你的状态。

代码语言:javascript
运行
复制
List<Person> list = ref.watch(personProvider);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69757045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档