flutter - ターゲットページにコンテキストがない場合、ページ全体から変数を変更するにはどうすればよいですか?

okwaves2024-01-25  8

'databaseFunctions.dart'

String path = 'path'     // a variable needed to be modified across page
Future queryALL() async {
    Database db = await openDatabase(path);
    return await db.query('all'); }

'main.dart'

// inside a stateful widget 
DropdownButton(
  value: currentValue,
  onChanged: (String newValue) {
        setState(() {
          currentValue = newValue;
          >> path = newValue << ;}}  // How can I accomplish this?

'few other pages'
// call queryALL() to build dataTable

プロバイダー、ナビゲーターは、var x が含まれるページにウィジェットがないため、機能しませんでした。したがって、コンテキストへの明示的な入り口がありません。 「import」は var x を初期化するだけなので機能しませんでした。 何かアイデアはありますか?



------------------------

この状況では、状態管理 Getx を使用しています。このようにインポートします

dependencies:
  get: ^3.8.0

コントローラを次のように定義します

class DatabaseController extends GetxController{
    RxString path = 'path'.obs;
    Future queryALL() async {
        Database db = await openDatabase(path);
        return await db.query('all'); 
    }
}

このコントローラをどこでも使用する場合は、プログラムの開始時に開始する必要があります。 main.dart で行うことをお勧めします

DatabaseController dbController = Get.put(DatabaseController());

その後、次のようにいつでもこのコントローラにアクセスできます

DatabaseController dbController = Get.find();

次のように呼び出すだけです

DropdownButton(
  value: currentValue,
  onChanged: (String newValue) {
      setState(() {
          currentValue = newValue;
          dbController.path.value = newValue;
          dbController.queryAll();
      }
  }

3

openDatabase(path) が必要とする String 型に RxString を適用するにはどうすればよいですか?

– ラナー

2020 年 9 月 3 日 16:47

申し訳ありませんが、RxString の .obs を忘れてしまいました。正しいものを編集しました。 Rx がオブジェクトをオブザーバブルに変換しています。

– ウラşカスム

セ2020 年 3 月 17 時 24 分

RxString から String を読み取るために必要なのは、dBController.path.value だけです。また、アクセスを容易にするために、Controller クラスから queryALL() をリリースしました。

– ラナー

2020 年 9 月 4 日 10:16

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。