Hello I have a problem when I want to use the List variable that stores the IDs of a database in Firebase. I would like to use it in the "Row" widget where I create a DropDownButton, it only allows me to do it if the instance is out of scope. How can i use this variable inside Row?
Main.dart
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
Firebase.initializeApp();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Material App',
// home: const CardScreen(),
initialRoute: AppRoutes.initialRoute,
routes: AppRoutes.routes,
onGenerateRoute: AppRoutes.onGenerateRoute);
}
}
Form1_screen.dart
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class FormularioScreen extends StatefulWidget {
const FormularioScreen({Key? key}) : super(key: key);
@override
State<FormularioScreen> createState() => _FormularioScreenState();
}
class _FormularioScreenState extends State<FormularioScreen> {
_FormularioScreenState();
// ignore: prefer_typing_uninitialized_variables
var selecCurrency;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text(
'PET-SOS PERRO',
style: TextStyle(color: Colors.black54),
),
iconTheme: const IconThemeData(
color: Colors.black, //change your color here
),
backgroundColor: Colors.white,
),
body: Column(
children: [
StreamBuilder(
stream: FirebaseFirestore.instance.collection('Razas').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return const Text('Loading');
} else {
List<DropdownMenuItem> currencyItems = [];
for (int i = 0; i < snapshot.data.docs.length; i++) {
DocumentSnapshot snap = snapshot.data.docs[i];
currencyItems.add(
DropdownMenuItem(
child: Text(
snap.id,
),
value: snap.id,
),
);
}
}
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
DropdownButton<dynamic>(
items: currencyItems,
onChanged: (currencyValue) {
var snackBar = SnackBar(
content: Text('Se seleccionó $currencyValue'));
// ignore: deprecated_member_use
Scaffold.of(context).showSnackBar(snackBar);
setState(() {
selecCurrency = currencyValue;
});
},
value: selecCurrency,
hint: const Text('Seleccione una raza.')),
],
);
},
),
StreamBuilder(
stream: FirebaseFirestore.instance.collection('Peso').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return const Text('Loading');
} else {
List<DropdownMenuItem> currencyItems = [];
for (int i = 0; i < snapshot.data.docs.length; i++) {
DocumentSnapshot snap = snapshot.data.docs[i];
currencyItems.add(
DropdownMenuItem(
child: Text(
snap.id,
),
value: snap.id,
),
);
}
}
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
DropdownButton<dynamic>(
items: currencyItems,
onChanged: (currencyValue) {
var snackBar = SnackBar(
content: Text('Se seleccionó $currencyValue'));
// ignore: deprecated_member_use
Scaffold.of(context).showSnackBar(snackBar);
setState(() {
selecCurrency = currencyValue;
});
},
value: selecCurrency,
hint: const Text('Seleccione un peso.')),
],
);
},
),
StreamBuilder(
stream: FirebaseFirestore.instance.collection('Edad').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return const Text('Loading');
} else {
List<DropdownMenuItem> currencyItems = [];
for (int i = 0; i < snapshot.data.docs.length; i++) {
DocumentSnapshot snap = snapshot.data.docs[i];
currencyItems.add(
DropdownMenuItem(
child: Text(
snap.id,
),
value: snap.id,
),
);
}
}
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
DropdownButton<dynamic>(
items: currencyItems,
onChanged: (currencyValue) {
var snackBar = SnackBar(
content: Text('Se seleccionó $currencyValue'));
// ignore: deprecated_member_use
Scaffold.of(context).showSnackBar(snackBar);
setState(() {
selecCurrency = currencyValue;
});
},
value: selecCurrency,
hint: const Text('Seleccione una edad.')),
],
);
},
),
],
),
);
}
}
Basically the variable isn't define because it's outsite of the ambit.
move the list definition before the scaffold
class _FormularioScreenState extends State<FormularioScreen> {
_FormularioScreenState();
// ignore: prefer_typing_uninitialized_variables
var selecCurrency;
@override
Widget build(BuildContext context) {
List<DropdownMenuItem> currencyItems = []; // <= ADD
return Scaffold(
appBar: AppBar(
title: const Text(
'PET-SOS PERRO',
style: TextStyle(color: Colors.black54),
),
iconTheme: const IconThemeData(
color: Colors.black, //change your color here
),
backgroundColor: Colors.white,
),
body: Column(
children: [
StreamBuilder(
stream:
FirebaseFirestore.instance.collection('Razas').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return const Text('Loading');
} else {
List<DropdownMenuItem> currencyItems = []; // <= REMOVE
for (int i = 0; i < snapshot.data.docs.length; i++) {
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.