如果目标页面没有上下文,如何从整个页面更改变量?

问题描述

'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所在的页面没有小部件,因此Navigator无法正常工作,因此对于任何上下文都没有明确的入口。 “导入”无效,因为它仅初始化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();
      }
  }