Как я могу отправить сообщение, если текстовое поле такое же, как и раньше?

#flutter #dart

Вопрос:

Когда имя уже есть
Без каких-либо изменений в текстовом поле при нажатии на него отображается

Я пытался обновить имя в firebase, оно работало нормально, но каждый раз, когда я нажимаю «Изменить» без каких-либо изменений, оно загружается в firebase. Я не хочу, чтобы это случилось. Пожалуйста, помогите мне

Вот мой код:

 `import 'package:flutter/material.dart';

class EditProfile extends StatefulWidget {

  @override
  _EditProfileState createState() => _EditProfileState();
}

class _EditProfileState extends State<EditProfile> {
  final TextEditingController nameController = TextEditingController();
  final _keyChange = GlobalKey<FormState>();
  bool btnTextChange = false;

  TextEditingController _editingController = TextEditingController(text:"Johny Boy");
  String initialText = "Johny Boy";

  Widget _editTitleContainer() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          margin: EdgeInsets.only(left: 20,top: 20,bottom: 20),
          child: Text(
            "Name",
          ),
        ),
        Container(
            decoration: new BoxDecoration(
              borderRadius: BorderRadius.all(Radius.circular(10.0)),
              color: Colors.white,
            ),
            width: MediaQuery.of(context).size.width,
            margin: EdgeInsets.symmetric(horizontal: 20),
            padding: EdgeInsets.symmetric(horizontal: 20, vertical: 20),
            child:
            Form(
                key: _keyChange,
                child: TextField(
                  enableInteractiveSelection: true,
                  onSubmitted: (newValue){
                    setState(() {
                      initialText = newValue;
                    });
                  },
                  onChanged: (String? value) {
                    value!.isEmpty ? changeButtonColor(false) : changeButtonColor(true);
                  },
                  controller: _editingController,
                  decoration: InputDecoration(
                    border: InputBorder.none,
                  ),)
            )
        ),
      ],
    );
  }
  @override
  void dispose() {
    _editingController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("sample"),
      ),
      body: SafeArea(
        child: Container(
          child: Column(
            children: [
              _editTitleContainer(),
              Container(
                alignment: Alignment.center,
                margin:EdgeInsets.only(top: 20),
                child: ElevatedButton(
                  style: ElevatedButton.styleFrom(
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(15.0),
                    ),
                    padding: EdgeInsets.symmetric(horizontal: 20, vertical:  20),
                  ),
                  onPressed: () {
                    if (_keyChange.currentState!.validate()) {
                      _keyChange.currentState!.save();
                      successMessage();
                    }
                  },
                  child: Text(
                    "EDIT",
                    style: TextStyle(
                      color: Color(0xFF527DAA),
                      letterSpacing: 1.5,
                      fontSize: 15,
                      fontWeight: FontWeight.bold,
                      fontFamily: 'OpenSans',
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void successMessage() {
    String name = _editingController.text.trim();
    if (name.isNotEmpty) {
      setState(() {
        showDialog(
          context: context,
          builder: (ctx) {
            return AlertDialog(
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(16)),
              title: Text("Name Changed Success"),
              actions: [
                TextButton(
                  child: Text("Ok"),
                  onPressed: () {
                    Navigator.of(ctx).pop();
                  },
                ),
              ],
            );
          },
        );
      });

    }else {
      setState(() {
        showDialog(
          context: context,
          builder: (ctx) {
            return AlertDialog(
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(16)),
              title: Text("Error!"),
              content: Text("Enter Your Name"),
              actions: [
                TextButton(
                  child: Text("Close"),
                  onPressed: () {
                    Navigator.of(ctx).pop();
                  },
                ),
              ],
            );
          },
        );
      });
    }
  }
}`.
 

Ответ №1:

Вам нужно только сравнить исходный текст и текст _editingController . Если они не совпадают, то вы можете обновить и показать successMessage . Это будет выглядеть так:

 ElevatedButton(
  style: ElevatedButton.styleFrom(
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(15.0),
    ),
    padding: EdgeInsets.symmetric(horizontal: 20, vertical: 20),
  ),
  onPressed: () {
    if (_keyChange.currentState!.validate()) {
      // HERE!
      if (initialText != _editingController.text) {
        _keyChange.currentState!.save();
        successMessage();
      }
    }
  },