'I cannot update UI state with riverpod

I'm working on a quiz app as a personal project and what I want to do is make it possible for the user to name a question set. (Kind of like a folder for questions on a particular subject). I am using Riverpod. (I've worked with the provider package a couple of times) for state management but it seems I've missed a step or two because when I type in the name, I don't see it on the page. I hope I can be pointed in the right direction. Thanks

Class forRiverpod model which shows a list of type QuestionSetConstructor for taking the title. There is also a method for accepting the question title to add to the list

 class RiverpodModel extends ChangeNotifier {

  final List<QuestionSetConstructor> _questionSetList = [];

  UnmodifiableListView<QuestionSetConstructor> get questionSet {
    return UnmodifiableListView(_questionSetList);
  }

  void addTitleT(String title) {
    final addQuestionTitle = (QuestionSetConstructor(title: title));
    _questionSetList.add(addQuestionTitle);
    notifyListeners();
  }
  int get count{
    return questionSet.length;

  }
}

`

    This is for the alert dialog that will take the question title. 
   In the elevated button, I stated that I want the contents of the 
   text field to be added to the list in the Riverpod model.


void setQuestionNameMethod(context) {
  showDialog(
      context: context,
      barrierDismissible: true,
      builder: (BuildContext context) {
        return SetQuestionNameAlertDialog();
      });
}

class SetQuestionNameAlertDialog extends ConsumerStatefulWidget {
  @override
  _SetQuestionNameAlertDialogState createState() =>
      _SetQuestionNameAlertDialogState();
}

class _SetQuestionNameAlertDialogState
    extends ConsumerState<SetQuestionNameAlertDialog> {
  final TextEditingController questionNameController = TextEditingController();
  final riverPodModelProvider2 =
      ChangeNotifierProvider((ref) => RiverpodModel());
  @override
  Widget build(
    BuildContext context,
  ) {
    final questionNameRef = ref.watch(riverPodModelProvider2);
    return AlertDialog(
      title: Text("Name of Question Set",
          style: TextStyle(
              color: Colors.blue[400],
              fontSize: 20,
              fontWeight: FontWeight.w600)),
      content: TextField(
        controller: questionNameController,
      ),
      actions: [
        Center(
            child: ElevatedButton(
                onPressed: () {

                 setState(() {
                   questionNameRef.addTitleT(questionNameController.text) ;
                 });
                  print(questionNameRef.questionSet.first.title);

                  Navigator.pop(context);
                },
                child: const Text("Save"))),
      ],
    );
  }
}

`

This is the page where the question title is shown as a list. However, for some reason it is not showing.

  class QuestionSetPage extends ConsumerStatefulWidget {
  @override
  _QuestionSetPageState createState() => _QuestionSetPageState();
}

class _QuestionSetPageState extends ConsumerState<QuestionSetPage> {
  final riverPodModelProvider =
      ChangeNotifierProvider((ref) => RiverpodModel());

  @override
  Widget build(BuildContext context) {
    final questionSetRef = ref.watch(riverPodModelProvider);

    return Scaffold(
      appBar: AppBar(
        elevation: 0,
        backgroundColor: Colors.grey[50],
        centerTitle: true,
        actions: [
          IconButton(
              onPressed: () {
                setState(() {
                  setQuestionNameMethod(context);
                  // modalSheetMethod(context);
                });
              },
              icon: Icon(
                Icons.add,
                size: 25,
                color: Colors.blue[400],
              ))
        ],
      ),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Text(
              "Question Set List",
              style: TextStyle(
                  color: Colors.blue[400],
                  fontSize: 30,
                  fontWeight: FontWeight.w600),
            ),
          ),
          Expanded(
            child: ListView.builder(
                itemCount: questionSetRef.count,
                itemBuilder: (BuildContext context, int index) {
                  return Tiles(
                    title: questionSetRef.questionSet[index].title,
                  );
                }),
          )
        ],
      ),
    );
  }
}

class Tiles extends StatelessWidget {
  String title;

  Tiles({required this.title});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.fromLTRB(15, 3, 15, 3),
      child: Material(
        elevation: 2,
        child: GestureDetector(
          onTap: () {
            Navigator.push(context, MaterialPageRoute(builder: (context) {
              return QuestionSetsQuestionPage();
            }));
          },
          child: ListTile(
            title: Text(
              title,
              style: TextStyle(
                  color: Colors.blue[400],
                  fontSize: 17,
                  fontWeight: FontWeight.w400),
            ),
            tileColor: Colors.white,
            // subtitle: Text(
            //   "${questionSets[index].numberOfQuestions}  number of questions",
            // ),
            leading: const Icon(
              Icons.add_box_outlined,
              size: 30,
            ),
          ),
        ),
      ),
    );
  }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source