扑动mobx未检测到可观察到的情况

问题描述 投票:0回答:1

我有一个MobX商店,其中有一个可观察的字符串

@observable
String searchText = '';

@action
Future<List<Contact>> fetchContacts(int offset, String searchText) async {
if (offset == 0) {
  _page = 1;
}
final response = await _contactsRepository.getAll(_page,'',{'name': searchText});
print('offset $offset');
_page++;
print('response data ${response.data}');
return response.data.isEmpty ? [] : response.data;

}

在我的视图中,我正在创建一个包裹在观察者内部的分页视图,并使用我在存储中创建的可观察字符串。

SafeArea(
    child: Observer(
      builder: (_) {
        print('REBUIKD');
        return PaginationView<Contact>(
          separator: Divider(color: Colors.grey),
          paginationViewType: PaginationViewType.listView,
          pageFetch: (int offset) => _contactsStore.fetchContacts(
              offset, _contactsStore.searchText),
          itemBuilder: (context, Contact contact, int index) {
            return GestureDetector(
                onTap: () => Navigator.of(context)
                    .push(MaterialPageRoute(builder: (_) {})),
                child: ContactListItem(
                  contact: contact,
                ));
          },
          onError: (dynamic error) => Center(
            child: Text('Some error occured'),
          ),
          onEmpty: Center(
            child: Text('Sorry! This is empty'),
          ),
          bottomLoader: Center(
            // optional
            child: CircularProgressIndicator(),
          ),
          initialLoader: Center(
            // optional
            child: CircularProgressIndicator(),
          ),
        );
      },
    ),
  ),

问题是,我得到的是一个 No observables detected in the build method of Observer 错误

我想观察重建的观测值是 searchText

我不明白为什么mobX不能检测到我在构建器中实际使用了观察到的东西。

flutter dart mobx
1个回答
0
投票

而不是包装一个 Listview.builder 在...中 Observer,你应该把 Observer 里面 itemBuilder:

ListView.builder(
  itemBuilder: (context, index) {
    return Observer(...);
  }
)

如果你需要指定一个 itemCount 或类似的东西,你将需要两个。

Observer(
  builder: (context) {
    return ListView.builder(
      itemCount: someStore.list.length,
      itemBuilder: (context, index) {
        return Text(someStore.list[index].name);
      },
    );
  },
)
© www.soinside.com 2019 - 2024. All rights reserved.