Providerを使ったMVVMモデルの勉強をしているのですが、メソッドを実行するにはどうしたら良いでしょうか。

説明用のコードを作成しました。flutter 3.x 、provider 6.0.3 で動作確認をしています
1ファイルに詰め込みましたので、コピペで動きます。
https://pastebin.com/iLLWegxz


ボタン1を押すと画面上部の「VMから受信した値 x」の数字部分がインクリメントします。
ボタン2と3は押すとリストが上下にスクロールします。
https://i.imgur.com/5t03yFI.png

ボタン1を押した時はViewmodelの中身を書き換えてnotifyListeners()し、表示する側はConsumerで囲って中身を表示する
というもので、ここは問題ありません。

ボタン2と3は押した後S2A.scrollRequest メソッドを呼んでほしいのですが、それをMVVM的に正しくやる方法を教えて頂けますでしょうか。
現状はViewModelの中にvoid Function() anyFunction;の関数を定義して
使う側でanyFunction=(){xxx;} と関数をセットしているのですが、色々な記事を見てもこんな事している例が無く間違っている気がしてなりません。

https://i.imgur.com/vGZFuYy.png
https://i.imgur.com/4YghOu3.png

アプリのグローバル変数の領域にGlobalKeyを設置すれば、Globalkey経由でcontextを取得出来るのですが、
グローバル変数に値を設置するのはアンチパターンだと思いますし、MVVMの勉強なので今回は避けたいです。