0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 93
1

Dart/Flutter как сделать проверку на запрос в Firebase

26.12.2022, 07:07. Показов 3548. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Как сделать проверку на уже существующего пользователя в базе данных Firebase. При нажатии кнопки Регистрация, всегда создается такой же пользователь с идентичными данными.

Код
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';

enum SingingCharacter { Male, Femaly }

class SignUp extends StatefulWidget {
  const SignUp({Key? key}) : super(key: key);


  @override
  State<SignUp> createState() => _SignUpState();
}

class _SignUpState extends State<SignUp> {
  final databaseRef = FirebaseDatabase.instance.ref("users");
  final _formKey = GlobalKey<FormState>();
  FirebaseAuth _auth = FirebaseAuth.instance;
  TextEditingController _emailTextController = new TextEditingController();
  TextEditingController _passwordTextController = new TextEditingController();
  TextEditingController _nameTextController = new TextEditingController();
  TextEditingController _confirmPasswordController =
      new TextEditingController();

  bool loading = false;
  bool emailExists = false;
  bool hidePass = true;
  SingingCharacter? _character = SingingCharacter.Male;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[
          Image.asset(
            'images/moda.jpeg',
            fit: BoxFit.cover,
            height: double.infinity,
            width: double.infinity,
            alignment: Alignment.center,
          ),
          Container(
            color: Colors.black.withOpacity(0.4),
            width: double.infinity,
            height: double.infinity,
          ),
          Padding(
            padding: const EdgeInsets.only(top: 200.0),
            child: Container(
              alignment: Alignment.center,
              child: Center(
                child: Form(
                    key: _formKey,
                    child: ListView(
                      children: <Widget>[
                        Padding(
                          padding: const EdgeInsets.only(
                              top: 8.0, left: 10.0, right: 10.0),
                          child: Material(
                            borderRadius: BorderRadius.circular(25.0),
                            color: Colors.white.withOpacity(0.7),
                            elevation: 0.0,
                            child: Padding(
                              padding: const EdgeInsets.only(left: 4.0),
                              child: TextFormField(
                                controller: _nameTextController,
                                decoration: InputDecoration(
                                  hintText: "Ф.И.О.",
                                  icon: Padding(
                                    padding: const EdgeInsets.only(left: 10.0),
                                    child: Icon(Icons.person_outline),
                                  ),
                                  border: InputBorder.none,
                                ),
                                validator: (String? value) {
                                  if (value != null && value.isEmpty) {
                                    return "Поле имя не может быть пустым";
                                  }
                                  return null;
                                },
                              ),
                            ),
                          ),
                        ),

                        Padding(
                          padding:
                              const EdgeInsets.fromLTRB(14.0, 8.0, 14.0, 8.0),
                          child: Material(
                            borderRadius: BorderRadius.circular(25.0),
                            color: Colors.white.withOpacity(0.7),
                            elevation: 0.0,
                            child: Padding(
                              padding: const EdgeInsets.only(left: 4.0),
                              child: TextFormField(
                                controller: _emailTextController,
                                decoration: InputDecoration(
                                  hintText: "E-mail",
                                  icon: Padding(
                                    padding: const EdgeInsets.only(left: 10.0),
                                    child: Icon(Icons.alternate_email),
                                  ),
                                  border: InputBorder.none,
                                ),
                                validator: (val) {
                                  if (RegExp(
                                        r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$',
                                      ).hasMatch(val!) &&
                                      !emailExists) {
                                    return null;
                                  } else {
                                    if (emailExists == true) {
                                      return "Email already exists, please sign in";
                                    } else {
                                      return "Please provide a valid email";
                                    }
                                  }
                                },
                              ),
                            ),
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Column(
                            children: <Widget>[
                              ListTile(
                                title: const Text(
                                  'Муж',
                                  style: TextStyle(color: Colors.white),
                                ),
                                leading: Radio<SingingCharacter>(
                                  value: SingingCharacter.Male,
                                  groupValue: _character,
                                  onChanged: (SingingCharacter? value) {
                                    setState(() {
                                      _character = value;
                                      if (value == SingingCharacter.Male) {
                                        _character = value;
                                      }
                                    });
                                  },
                                ),
                              ),
                              ListTile(
                                title: const Text(
                                  'Жен',
                                  style: TextStyle(color: Colors.white),
                                ),
                                leading: Radio<SingingCharacter>(
                                  value: SingingCharacter.Femaly,
                                  groupValue: _character,
                                  onChanged: (SingingCharacter? value) {
                                    setState(() {
                                      _character = value;
                                      if (value == SingingCharacter.Femaly) {
                                        _character = value;}
                                    });
                                  },
                                ),
                              ),
                            ],
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.only(
                              top: 8.0, left: 10.0, right: 10.0),
                          child: Material(
                            borderRadius: BorderRadius.circular(25.0),
                            color: Colors.white.withOpacity(0.7),
                            elevation: 0.0,
                            child: Padding(
                              padding: const EdgeInsets.only(left: 4.0),
                              child: ListTile(
                                title: TextFormField(
                                  controller: _passwordTextController,
                                  obscureText: hidePass,
                                  decoration: InputDecoration(
                                    hintText: "Пароль",
                                    icon: Padding(
                                      padding:
                                          const EdgeInsets.only(left: 10.0),
                                      child: Icon(Icons.lock_outline),
                                    ),
                                    border: InputBorder.none,
                                  ),
                                  validator: (String? value) {
                                    if (value != null && value.isEmpty) {
                                      return "Поле пароля не может быть пустым";
                                    } else if (value!.length < 6) {
                                      return "Пароль должен быть не менее 6 символов";
                                    }
                                    return null;
                                  },
                                ),
                                trailing: IconButton(
                                    onPressed: () {
                                      setState(() {
                                        hidePass = false;
                                      });
                                    },
                                    icon: Icon(Icons.remove_red_eye)),
                              ),
                            ),
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.only(
                              top: 8.0, left: 10.0, right: 10.0),
                          child: Material(
                            borderRadius: BorderRadius.circular(25.0),
                            color: Colors.white.withOpacity(0.7),
                            elevation: 0.0,
                            child: Padding(
                              padding: const EdgeInsets.only(left: 4.0),
                              child: ListTile(
                                title: TextFormField(
                                  controller: _confirmPasswordController,
                                  obscureText: hidePass,
                                  decoration: InputDecoration(
                                    hintText: "Подтвердите пароль",
                                    icon: Padding(
                                      padding:
                                          const EdgeInsets.only(left: 10.0),
                                      child: Icon(Icons.lock_outline),
                                    ),
                                    border: InputBorder.none,
                                  ),
                                  validator: (String? value) {
                                    if (value != null && value.isEmpty) {
                                      return "Поле пароля не может быть пустым";
                                    } else if (value!.length < 6) {
                                      return "Пароль должен быть не менее 6 символов";
                                    } else if (_passwordTextController.text !=
                                        value) {
                                      return "Пароли не совпадают";
                                    }
                                    return null;
                                  },
                                ),
                                trailing: IconButton(
                                    onPressed: () {
                                      setState(() {
                                        hidePass = false;
                                      });
                                    },
                                    icon: Icon(Icons.remove_red_eye)),
                              ),
                            ),
                          ),
                        ),
                        Padding(
                          padding:
                              const EdgeInsets.fromLTRB(14.0, 15.0, 14.0, 8.0),
                          child: Material(
                            borderRadius: BorderRadius.circular(20.0),
                            color: Colors.red,
                            elevation: 0.0,
                            child: MaterialButton(
                              onPressed: () async {
                            //validateForm();
                                validateForm();
                              },
                              minWidth: MediaQuery.of(context).size.width,
                              child: Text(
                                "Зарегистрироваться",
                                textAlign: TextAlign.center,
                                style: TextStyle(
                                    color: Colors.white,
                                    fontWeight: FontWeight.bold,
                                    fontSize: 20.0),
                              ),
                            ),
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: InkWell(
                            onTap: () {
                              Navigator.pop(context);
                            },
                          ),
                        ),
                      ],
                    )),
              ),
            ),
          ),
          Visibility(
            visible: loading ?? true,
            child: Center(
              child: Container(
                color: Colors.white.withOpacity(0.0),
                child: CircularProgressIndicator(
                  valueColor: AlwaysStoppedAnimation<Color>(Colors.red),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }

  void validateForm() {
        databaseRef.child(DateTime.now().millisecondsSinceEpoch.toString()).set({
        "name" : _nameTextController.text.toString(),
        "id": DateTime.now().millisecondsSinceEpoch.toString(),
        "email" : _emailTextController.text.toString(),
        "password" : _passwordTextController.text.toString(),

      });
  }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2022, 07:07
Ответы с готовыми решениями:

Dart/Flutter как сделать проверку на запрос в Firebase
Добрый день. Как сделать проверку на уже существующего пользователя в базе данных Firebase? При...

[flutter] файл user.dart
Добрый день. Обучаюсь flutter по англоязычным видео. Возник вопрос: class User{ String uid;...

Работа с dart & flutter
Какая характеристика должно быть у железо (пк-ноутбук) для разработки приложения на Дарт и Флаттер?

Flutter - Dart - компиляция кода на сервере
Всем привет, хорошего настроения и пр. 1. Как возможный заказчик и не сильно разбирающийся в...

0
26.12.2022, 07:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2022, 07:07
Помогаю со студенческими работами здесь

Парсинг данных с json на dart/flutter
import 'package:flutter/material.dart'; import 'package:get/get.dart'; import...

Необходима разработка iOS, Android мобильных приложений (flutter \ dart)
Необходима разработка iOS, Android мобильных приложений (flutter \ dart). Приложение 1: поиск и...

Ищем разработчика iOS, Android мобильных приложений на (flutter \ dart)
Ищем разработчика iOS, Android мобильных приложений на (flutter \ dart). Возможна работа по...

Как во flutter сделать навигацию меняющую только body
Всем привет. Начал изучать flutter и хочу сделать следующее: запускаю приложение, вижу главный...

Как сделать, чтобы приложение работало в фоновом режиме на flutter?
Здравствуйте, создаю приложение экрана блокировки на flutter для ios и android, хочу чтобы...

Как сделать проверку на пустую строку и проверку что в слове нет повторяющихся букв
string r; string word; int output; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru