# #android #flutter #dart #firebase-realtime-database
Вопрос:
В следующем коде я хочу добиться двух вещей: а) Получить номер из базы данных firebase в реальном времени, который соответствует номеру, введенному пользователем. б) Перейдите на следующую страницу, если номер совпадает.
Но действительно ли необходимо создавать тип возвращаемого значения функции ? Какое было бы лучшее решение для следующей части кода.
Container(
margin: EdgeInsets.all(15),
width: double.infinity,
child: ElevatedButton(
onPressed: () {
FirebaseAnimatedList(
query: _ref,
itemBuilder: (BuildContext context, DataSnapshot snapshot,
Animation<double> animation, int index) {
Map readPhone = snapshot.value;
readPhone['key'] = snapshot.key;
if(readPhone['number']==dialCodeDigits _controller.text) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (c) =>
OTPController(
phone: _controller.text,
codeDigits: dialCodeDigits,
),
),
);
}
import 'package:country_code_picker/country_code_picker.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:firebase_database/ui/firebase_animated_list.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'OTPController.dart';
class LoginScreen extends StatefulWidget {
const LoginScreen({Key key}) : super(key: key);
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
Query _ref;
DatabaseReference reference =
FirebaseDatabase.instance.reference().child('Subscribers');
String dialCodeDigits = " 977";
TextEditingController _controller = TextEditingController();
@override
initState() {
// TODO: implement initState
super.initState();
_ref = FirebaseDatabase.instance
.reference()
.child('Subsdcribers')
.orderByChild('number');
// .equalTo(dialCodeDigits _controller.text);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child:
Column(mainAxisAlignment: MainAxisAlignment.center, children: [
SizedBox(height: 100),
Padding(
padding: const EdgeInsets.only(left: 28.0, right: 28.0),
child: Image.asset("assets/prologo.png"),
),
Container(
margin: EdgeInsets.only(top: 10),
child: Center(
child: Text(
"Phone (OTP) Authentication",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
)),
),
SizedBox(
height: 50,
),
SizedBox(
height: 60,
width: 400,
child: CountryCodePicker(
onChanged: (country) {
setState(() {
dialCodeDigits = country.dialCode;
});
},
initialSelection: "NPL",
showCountryOnly: false,
showOnlyCountryWhenClosed: false,
favorite: [" 91", "IND", " 1", "USA"],
),
),
Container(
margin: EdgeInsets.only(top: 10, right: 10, left: 10),
child: TextField(
decoration: InputDecoration(
hintText: "Phone Number",
prefix: Padding(
padding: EdgeInsets.all(4),
child: Text(dialCodeDigits),
)),
maxLength: 12,
keyboardType: TextInputType.number,
controller: _controller,
)),
Container(
margin: EdgeInsets.all(15),
width: double.infinity,
child: ElevatedButton(
onPressed: () {
FirebaseAnimatedList(
query: _ref,
itemBuilder: (BuildContext context, DataSnapshot snapshot,
Animation<double> animation, int index) {
Map readPhone = snapshot.value;
readPhone['key'] = snapshot.key;
if(readPhone['number']==dialCodeDigits _controller.text) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (c) =>
OTPController(
phone: _controller.text,
codeDigits: dialCodeDigits,
),
),
);
}
});
},
child: Text(
'Next',
style:
TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
)))
])));
}
}
Комментарии:
1. В чем проблема с кодом, которым вы поделились? Когда вы выполняете этот код в отладчике, какая конкретная строка не выполняет то, что вы ожидаете от нее?
2. Сначала я получаю : его функция имеет возвращаемый тип «Виджет», но не заканчивается оператором return. Попробуйте добавить оператор return или изменить тип возврата на «void». и второе : когда я печатаю (readPhone[«номер») , я не получаю никакого значения.
3. если(readPhone[‘номер’]==dialCodeDigits _controller.text), это то, что я пытаюсь реализовать. readPhone[‘номер’] — это значение из реального времени и dialCodeDigits _controller.текст-это значение, введенное пользователем
4. О какой функции вы говорите, когда говорите «его функция»?
5. (Контекст BuildContext, снимок снимка DataSnapshot, анимация<двойная> анимация, индекс int)