簡體   English   中英

Flutter Provider - 小部件未訂閱更新

[英]Flutter Provider - Widget not subscribing to updates

我希望我的小部件監聽提供的FormViewModel更新,一個ChangNotifier 在小部件中,使用以下方法訪問和訂閱通知程序:

FormViewModel model = Provider.of<FormViewModel>(context);

FormViewModel是使用以下方法創建的:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final appTitle = 'Nothing New';
    return MultiProvider(
      providers: [
        Provider<FormViewModel>(
          create: (_) => FormViewModel(Loading(), FirebaseService(), ImageUploadService()),
        )
      ],
      child: MaterialApp(
        title: "XX",
        home: Scaffold(
          appBar: AppBar(
            title: Text(appTitle),
          ),
          body: MyCustomForm(),
        ),
      ),
    );
  }
}

FormViewModel擴展了BaseViewModel 我已經驗證狀態設置正確,但下面的打印語句中沒有偵聽器:

class BaseViewModel<T> with ChangeNotifier {

  T _state;
  T get state => _state;

  BaseViewModel(T viewState) {
    setState(viewState);
  }

  void setState(T viewState) {
    print("state change: $viewState");
    _state = viewState;
    print('has listeners: $hasListeners');
    notifyListeners();
    handleSideEffects(state);
  }

  @protected
  void handleSideEffects(T _state) {
    print("handle side effects for: $_state");
  }

  @protected
  void handleError(Object e) {
    print(e);
  }
}

您使用了錯誤的提供商。

如果您的對象是ChangeNotifier並且希望提供程序在發生更改時重建依賴項,則您應該使用ChangeNotifierProvider

ChangeNotifierProvider<FormViewModel>(
  create: (_) => FormViewModel(Loading(), FirebaseService(), ImageUploadService()),
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM