'Screen does not update even though build function is running flutter

So I have created a chat app which draws from a pusher client. Whenever there is a new message, the build function does rebuild, and I believe the widget list does change, but there is no update on the screen. How do I fix this ?

Widget build(BuildContext context) {
    // print(messageWidgetList.length);
    return Scaffold(
      backgroundColor: AppColors.lightGrey,
      appBar: AppBar(
        backgroundColor: Colors.transparent,
        title: Text(
          messageTo,
          style: TextStyle(
            color: AppColors.white,
            fontSize: 22,
          ),
        ),
      ),
      body: Stack(
        children: [
          Padding(
            padding:
                const EdgeInsets.only(top: 12, left: 12, right: 12, bottom: 70),
            child: ValueListenableBuilder<List<Widget>>(
              valueListenable: messageWidgetList,
              builder: (context, value, widget) {
                print("Updated");
                print(value.length);
                // print(widget);
                return ListView.builder(
                  // controller: scrollController,
                  physics: AlwaysScrollableScrollPhysics(),
                  reverse: true,
                  addAutomaticKeepAlives: true,
                  itemCount: value.length,
                  itemBuilder: (ctx, index) {
                    // print(index);
                    return value[index];
                  },
                );
              },
            ),
          ),
          Align(
            alignment: Alignment.bottomCenter,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.end,
              children: [
                if (xFilesImages.isNotEmpty)
                  SingleChildScrollView(
                    scrollDirection: Axis.horizontal,
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: xFilesImages.map<Widget>((element) {
                        return Padding(
                          padding: const EdgeInsets.symmetric(horizontal: 10.0),
                          child: SizedBox(
                            height: 100,
                            width: 80,
                            child: Image.file(
                              File(element.path),
                              frameBuilder:
                                  (ctx, child, frame, wasSynchronouslyLoaded) {
                                return SizedBox(
                                  width: MediaQuery.of(ctx).size.width,
                                  height: MediaQuery.of(ctx).size.height,
                                  child: Stack(
                                    children: [
                                      Align(
                                        alignment: Alignment.topRight,
                                        child: Container(
                                          height: 25,
                                          width: 25,
                                          decoration: BoxDecoration(
                                            shape: BoxShape.circle,
                                            color: AppColors.lightestGrey,
                                          ),
                                          child: FittedBox(
                                            child: GestureDetector(
                                                onTap: () {
                                                  xFilesImages.remove(element);
                                                  setState(() {});
                                                },
                                                child:
                                                    const Icon(Icons.cancel)),
                                          ),
                                        ),
                                      ),
                                      child
                                    ],
                                  ),
                                );
                              },
                            ),
                          ),
                        );
                      }).toList(),
                    ),
                  ),
                const SizedBox(height: 5),
                Container(
                  height: 60,
                  width: MediaQuery.of(context).size.width,
                  child: Padding(
                    padding:
                        const EdgeInsets.only(left: 10, bottom: 10, right: 10),
                    child: Container(
                      // height: 30,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(10),
                        color: AppColors.darkGrey,
                      ),
                      child: TextFormField(
                        // expands: true,
                        style: TextStyle(color: AppColors.white),
                        focusNode: messageFocusNode,
                        controller: messageController,
                        decoration: InputDecoration(
                            contentPadding: const EdgeInsets.only(
                                right: 8, left: 8, top: 14),
                            prefixIcon: InkWell(
                              onTap: () async {
                                if (!(await Permission.camera.isGranted)) {
                                  await Permission.camera.request();
                                  await Permission.photos.request();
                                }
                                ImagePicker _picker = ImagePicker();
                                xFilesImages =
                                    await _picker.pickMultiImage() ?? [];
                                print("Got xFiles");
                                print(xFilesImages.length);
                                for (XFile xFile in xFilesImages) {
                                  print(xFile.name);
                                  print(xFile.path);
                                }
                                setState(() {});
                              },
                              child: Icon(
                                Icons.attachment,
                                size: 34,
                                color: AppColors.lightestGrey,
                              ),
                            ),
                            suffixIcon: GestureDetector(
                              onTap: () async {
                                //TODO: When you wake up, you have implemented picking images. Work on displaying picked images and then sending them
                                // loading = true;
                                // messageController.text = '';
                                if (messageController.text.isNotEmpty ||
                                    xFilesImages.isNotEmpty) {
                                  messageFocusNode.unfocus();
                                  // messageWidgetList.add(sentMessage(
                                  //     {"message": messageController.text}));
                                  setState(() {});
                                  print("Sent button clicked");
                                  ApiProvider.sendMessage(
                                      widget.userModel.bearerToken,
                                      widget.senderPhone.phoneNumbers.first,
                                      messageTo,
                                      messageController.text,
                                      xFilesImages);
                                  // loading = false;

                                  messageController.text = '';
                                  xFilesImages = [];
                                  setState(() {});
                                }
                              },
                              child: const Icon(
                                Icons.send,
                                size: 30,
                                color: const Color(0xFF004b77),
                              ),
                            ),
                            fillColor: AppColors.lightGrey,
                            hintText: "Enter message...",
                            hintStyle:
                                TextStyle(color: AppColors.lightestGrey)),
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ),
          if (loading)
            Container(
              height: double.infinity,
              width: double.infinity,
              color: AppColors.lightGrey.withOpacity(0.3),
              child: Center(
                  child: SpinKitChasingDots(
                color: AppColors.blue,
              )),
            )
        ],
      ),
    );
  }


Sources

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

Source: Stack Overflow

Solution Source