問題タブ [riverpod]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flutter - Flutter (Riverpod) で StateNotifierProvider が状態を保持しない
基本的に私がやろうとしていることは次のとおりです。モバイル アプリが起動すると、ローカル データベースにユーザー エントリが存在するかどうかがチェックされます。チェック中、今のところ空の黄色の画面が表示されます。これは、読み込み中/チェックがまだ完了していないことを示しています。完了すると、ユーザー データに基づいて画面が表示されます。そのために、Riverpod パッケージを使用して StateNotifierProvider を作成しました。
初期状態は null ですが、画面列挙型 (SignInScreen、EmailVerificationScreen など) の値に変更することもできます。
今、アプリを起動すると、明らかに状態が null なので、黄色の画面を表示しています。検索が完了すると、状態は null からユーザー データに基づく値に変わります。したがって、状態がnullかどうかを確認するifステートメントを前に作成して、黄色のロード画面の後に表示される初期画面がすでにあるかどうかを確認して設定しました。
しかし、ユーザーを挿入してユーザー ストリームが再び実行されると、if ステートメント内で再度実行され、状態が再び null であることがわかります。さまざまな場所で状態を何度も確認した後、常に null と表示されます。
だから私の質問は次のとおりです:なぜそれは常にnullであり、渡した画面を永続化しないのですか?
注: 黄色の画面の後、本来の OnboardingScreen が表示されるので、StateNotifier への画面の受け渡しが機能することがわかります。しかし、なぜすぐにnullに戻るのかという疑問に関しては、それは私には役に立ちません。
flutter - flutter riverpod ConsumerWidget が再構築されていない
私が書いた小さなアプリにリバーポッドを実装しました。
flutter_riverpod: ^0.12.1
私の問題は、プロバイダーを更新すると、「watch」を呼び出したにもかかわらず、ウィジェットが再構築されないことです。
プロバイダーは基本的に、表示する必要がある現在のページを追跡します。
PageButtons ウィジェットは一連の RaisedButtons を描画します。ユーザーが隆起したボタンの 1 つをクリックすると、現在のページ番号が表示されます。現在のページに対応する RaisedButton の色を変更できるように、PageButton ウィジェットを再構築する必要があります。
上記のビルド メソッドで、watch を呼び出していることがわかります。
次に、Raised ボタンの onPressed で currentPage を更新します。
私のログには次のように表示されます。
ログは、onPressed メソッドが呼び出され、currentPageProvider を更新していることを示しています。
ただし、PageButtons のビルダーは呼び出されていません。
私は何を間違っていますか?