首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法调用initState和update (riverpod state_notifier)

无法调用initState和update (riverpod state_notifier)
EN

Stack Overflow用户
提问于 2020-07-10 04:38:15
回答 1查看 1.6K关注 0票数 0

问题

我用的是河荚和state_notifier。调用了initState()和StateNotifier的update()和No。可以成功地调用其他成员函数。但是,可以成功地调用其他成员函数。

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';

import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:riverpod_todo_list/todo_list_notifier.dart';
import 'package:riverpod_todo_list/todo_list_state.dart';
void main() {
  print('start~~');
  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends HookWidget {
  // ...
}

final todoListProvider = StateNotifierProvider((_) => TodoListNotifier());

class MyHomePage extends HookWidget {
  final _controller = TextEditingController();
  final todoListNotifier = useProvider(todoListProvider);
  final TodoListState _todoListState =
      useProvider(todoListProvider.state.select((value) => value));
//...
代码语言:javascript
复制
import 'package:riverpod_todo_list/todo.dart';
import 'package:riverpod_todo_list/todo_list_state.dart';
import 'package:state_notifier/state_notifier.dart';
import 'package:uuid/uuid.dart';

class TodoListNotifier extends StateNotifier<TodoListState> with LocatorMixin {
  TodoListNotifier() : super(const TodoListState());

  Uuid _uuid = Uuid();

  // could not run.
  @override
  void initState() {
    super.initState();
    print('init state~~~'); 
  }

  // could not run.
  @override
  void update(Locator watch) {
    super.update(watch);
    print('update');
  }

  // could run.
  void add(String title) {
    Todo todo = Todo(id: _uuid.v4(), title: title);
    List<Todo> todoList = []..addAll(state.todoList);
    todoList.add(todo);

    state = state.copyWith(todoList: todoList);
  }

  // could run.
  void toggleStatus(int index) {
    List<Todo> todoList = []..addAll(state.todoList);
    todoList[index] = state.todoList[index]
        .copyWith(completed: !state.todoList[index].completed);
    state = state.copyWith(todoList: todoList);

    print('changed toggle~~');
  }
}

重新启动的日志不放置initState()和update()日志。

代码语言:javascript
复制
Performing hot restart...                                               
Restarted application in 464ms.
flutter: start~~
EN

回答 1

Stack Overflow用户

发布于 2020-12-04 07:27:05

这个问题已经在吉顿号上得到了回答。

Riverpod不支持LocatorMixin。

pod/一期/75#发行-671255330

并建议在文件中注明。

在我看来,LocatorMixin不需要与Riverpod一起使用,因为ProvidierReference的存在。

代码语言:javascript
复制
final userRepositoryProvider = Provider((ref) => UserRepository());

final userControllerProvider = StateNotifierProvider((ref) {
  return UserController(
    // Read userRepositoryProvider and create a UserController from the result
    repository: ref.watch(userRepositoryProvider),
  );
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62827432

复制
相关文章

相似问题

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