'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