behnami454
behnami454

Reputation: 77

how to use a variable in another class in Flutter/dart

I have a statfull class called 'Location' which get the location with Geolocatar and Im showing the location with this :

 Text(currentPosition!=null? '$currentPosition' : '----',),

and this is :

static Position? currentPosition;

and I have another class called 'WeatherApi' which Im using Openweathermap Api to get the weather . now I want to use the currentPosition in the api url

https://api.openweathermap.org/data/2.5/weather?lat=44.34&lon=10.99&appid={API key}

how can I use the currentPosition in the url? I have tried widget.variablename but didn't work

Upvotes: 0

Views: 109

Answers (3)

feyzforall
feyzforall

Reputation: 26

You can define a global variable outside the 'Location' widget as a 'currentPosition',

class Position {
  static String? currentPosition;
}

call from 'Location' this variable and set it.

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    Position.currentPosition = 'currentPosition';
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: TextButton(
          onPressed: () {
            Navigator.of(context).push(
              MaterialPageRoute(
                builder: ((context) => LocationWidget()),
              ),
            );
          },
          child: Text('Click Me'),
        ),
      ),
    );
  }
}

Then call it again from 'WeatherApi' and use it.

class WeatherWidget extends StatefulWidget {
  const WeatherWidget({super.key});

  @override
  State<WeatherWidget> createState() => _WeatherWidgetState();
}

class _WeatherWidgetState extends State<WeatherWidget> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(Position.currentPosition ?? 'null'),
      ),
    );
  }
}

Upvotes: 0

Munsif Ali
Munsif Ali

Reputation: 6194

In Flutter, one way to pass a variable from one class to another is Using a constructor: You can pass the variable as a parameter in the constructor of the class that needs the variable. you can read the details in the official documentation

Upvotes: 0

pewds
pewds

Reputation: 21

You can pass the location details through the constructor of the WeatherApi class. Create a final variable(currentPosition) in the WeatherApi class and make it as required and when you navigate from Location screen to WeatherApi screen, in the

Navigator.push(context, //your route => WeatherApi(currentPosition: currentPosition));

and to use the variable, do widget.currentPosition in the WeatherApi class

Check out this for more info

Upvotes: 2

Related Questions