Raner
Raner

Reputation: 3

How do I change the variable from across page if the target page has no context?

'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

Provider, Navigator didn't work since the page var x is in has no Widget, therefore no explicit entrance for any context. 'import' didn't work, since it only initializes var x. Any ideas?

Upvotes: 0

Views: 1083

Answers (1)

Ulaş Kasım
Ulaş Kasım

Reputation: 870

I am using state management Getx for this situations. Import like this

dependencies:
  get: ^3.8.0

Define controller like this

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

If you will use this controller anywhere you should initiate when program starts. I recommend you do it in your main.dart

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

Then you always can access this controller like this

DatabaseController dbController = Get.find();

You just need to call like this

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

Upvotes: 1

Related Questions