Почему метод dispose не вызывается?

Я пытался использовать провайдер для управления состоянием TextField Controller, и ниже приведен code провайдера, который я использую. Я хочу узнать, почему dispose called! не выводится на консоль, когда я покидаю страницу забытого пароля. Я протестировал метод dispose виджета с отслеживанием состояния, и он работает нормально, как и ожидалось.

// Forgot password page provider
import 'package:flutter/material.dart';

class ForgotPasswordPageProvider with ChangeNotifier {
 final TextEditingController _textEditingController = TextEditingController();
 final _formKey = GlobalKey<FormState>();

 TextEditingController get textEditingController => _textEditingController;
 GlobalKey<FormState> get formKey => _formKey;

 @override
 void dispose() {
_textEditingController.dispose();
 print("dispose called!");
 super.dispose();
  }
}

// Forgot password page
import 'package:chat_app/providers/forgot_password_page_provider.dart';
import 'package:chat_app/utils/form_validator.dart';
import 'package:chat_app/widgets/custom_app_bar.dart';
import 'package:chat_app/widgets/form_input_field.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';

class ForgotPasswordPage extends StatelessWidget {
const ForgotPasswordPage({super.key});

@override
Widget build(BuildContext context) {
final provider = Provider.of<ForgotPasswordPageProvider>(context);
return Scaffold(
  appBar: CustomAppBar(
    leading: IconButton(
      onPressed: () {
        GoRouter.of(context).pop();
      },
      icon: const FaIcon(FontAwesomeIcons.xmark),
    ),
    title: "Reset password",
  ),
  body: Padding(
    padding: EdgeInsets.symmetric(
        horizontal: 24,
        vertical: MediaQuery.of(context).size.height * 0.06),
    child: Form(
      key: provider.formKey,
      child: Column(
        children: [
          Hero(
            tag: "logo",
            child: FaIcon(
              FontAwesomeIcons.comments,
              color: Theme.of(context).colorScheme.primary,
              size: 96,
            ),
          ),
          SizedBox(height: MediaQuery.of(context).size.height * 0.02),
          FormInputField(
            controller: provider.textEditingController,
            hintText: "Enter your email address",
            keyboardType: TextInputType.emailAddress,
            textInputAction: TextInputAction.done,
            validator: FormValidator.emailValidator,
            label: "E-mail",
          ),
          SizedBox(height: MediaQuery.of(context).size.height * 0.02),
          FilledButton(
            onPressed: () {
              if (provider.formKey.currentState!.validate()) {}
            },
            child: Text("Reset password"),
          ),
        ],
      ),
    ),
  ),
);
}
}
Ия
Вопрос задан7 июля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.