Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RenderSilverPadding expected #621

Open
joelwasike opened this issue Jul 28, 2024 · 12 comments
Open

RenderSilverPadding expected #621

joelwasike opened this issue Jul 28, 2024 · 12 comments
Labels
question Further information is requested

Comments

@joelwasike
Copy link

No description provided.

@joelwasike joelwasike added the question Further information is requested label Jul 28, 2024
@demchenkoalex
Copy link
Member

any details?

@gada-raj
Copy link

gada-raj commented Jul 30, 2024

image

Facing the Same issue, How to use this widget inside a Column?

@demchenkoalex
Copy link
Member

I did not plan to make this used in Column, it should take the full screen. Is this problem appears only when you use chat inside Column?

@gada-raj
Copy link

Even If I assign this to body of a Scaffold, this issue still occurs.

@demchenkoalex
Copy link
Member

hmm in the example chat is in the body of Scaffold, here https://github.com/flyerhq/flutter_chat_ui/blob/main/example/lib/main.dart#L229 and I did not see this problem. Is there any more specifics to your setup?

@gada-raj
Copy link

gada-raj commented Aug 5, 2024

This is pretty much my code and my flutter version is 3.19.6

import 'package:cooee/controller/user_profile_controller.dart';
import 'package:cooee/main.dart';
import 'package:flutter/material.dart';
import 'package:flutter_chat_types/flutter_chat_types.dart' as types;
import 'package:flutter_chat_ui/flutter_chat_ui.dart';
import 'package:flutter_contacts/contact.dart';
import 'package:get/get.dart';

class ProfileChatScreen extends StatefulWidget {
  const ProfileChatScreen(
      {super.key, required this.contact, required this.number});
  final Contact contact;
  final String number;
  @override
  State<ProfileChatScreen> createState() => _ProfileChatScreenState();
}

class _ProfileChatScreenState extends State<ProfileChatScreen> {
  final SMSController smsController = Get.put(SMSController());
  final UserController userController = Get.put(UserController());
  final List<types.Message> _messages = [];

  @override
  void initState() {
    super.initState();
    logger.info("number ${widget.number}");
    userController.userProfile.numbers!
        .map((e) => logger.info("number: ${e.number}"));
    logger.info(userController.userProfile.toString());
  }

  sendMessage(types.PartialText message) {
    logger.info("Sending SMS");
    final textMessage = types.TextMessage(
      author: types.User(id: widget.contact.id),
      createdAt: DateTime.now().millisecondsSinceEpoch,
      id: "Asdad",
      text: message.text,
      showStatus: true,
      status: types.Status.seen,
    );
    setState(() {
      _messages.insert(0, textMessage);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Chat(
          theme: DefaultChatTheme(
              deliveredIcon: const Icon(Icons.done),
              primaryColor: const Color(0xff2CF19C).withOpacity(0.25)),
          messages: _messages,
          customBottomWidget: messageInputTextField(),
          onSendPressed: (types.PartialText message) {
            //Since we are using custom bottom widget we dont need any functionality here
          },
          user: types.User(id: userController.userProfile.id!)),
    );
  }

  Widget messageInputTextField() {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: TextFormField(
        controller: smsController.messageTextEditingController.value,
        decoration: InputDecoration(
          hintText: 'Message...',
          enabledBorder: OutlineInputBorder(
            borderRadius: BorderRadius.circular(15),
            borderSide: const BorderSide(color: Colors.grey),
          ),
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(15),
            borderSide: const BorderSide(color: Colors.grey),
          ),
          suffixIcon: IconButton(
            icon: const Icon(Icons.arrow_upward),
            onPressed: () {
              var message = types.PartialText(
                  text: smsController.messageTextEditingController.value.text);
              sendMessage(message);
              smsController.messageTextEditingController.value.clear();
            },
          ),
        ),
      ),
    );
  }

@CyberPolymerization
Copy link

I face the same issue when I tried to scroll and load more messages coming from the database.

@milospop
Copy link

This is pretty much my code and my flutter version is 3.19.6

import 'package:cooee/controller/user_profile_controller.dart';
import 'package:cooee/main.dart';
import 'package:flutter/material.dart';
import 'package:flutter_chat_types/flutter_chat_types.dart' as types;
import 'package:flutter_chat_ui/flutter_chat_ui.dart';
import 'package:flutter_contacts/contact.dart';
import 'package:get/get.dart';

class ProfileChatScreen extends StatefulWidget {
  const ProfileChatScreen(
      {super.key, required this.contact, required this.number});
  final Contact contact;
  final String number;
  @override
  State<ProfileChatScreen> createState() => _ProfileChatScreenState();
}

class _ProfileChatScreenState extends State<ProfileChatScreen> {
  final SMSController smsController = Get.put(SMSController());
  final UserController userController = Get.put(UserController());
  final List<types.Message> _messages = [];

  @override
  void initState() {
    super.initState();
    logger.info("number ${widget.number}");
    userController.userProfile.numbers!
        .map((e) => logger.info("number: ${e.number}"));
    logger.info(userController.userProfile.toString());
  }

  sendMessage(types.PartialText message) {
    logger.info("Sending SMS");
    final textMessage = types.TextMessage(
      author: types.User(id: widget.contact.id),
      createdAt: DateTime.now().millisecondsSinceEpoch,
      id: "Asdad",
      text: message.text,
      showStatus: true,
      status: types.Status.seen,
    );
    setState(() {
      _messages.insert(0, textMessage);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Chat(
          theme: DefaultChatTheme(
              deliveredIcon: const Icon(Icons.done),
              primaryColor: const Color(0xff2CF19C).withOpacity(0.25)),
          messages: _messages,
          customBottomWidget: messageInputTextField(),
          onSendPressed: (types.PartialText message) {
            //Since we are using custom bottom widget we dont need any functionality here
          },
          user: types.User(id: userController.userProfile.id!)),
    );
  }

  Widget messageInputTextField() {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: TextFormField(
        controller: smsController.messageTextEditingController.value,
        decoration: InputDecoration(
          hintText: 'Message...',
          enabledBorder: OutlineInputBorder(
            borderRadius: BorderRadius.circular(15),
            borderSide: const BorderSide(color: Colors.grey),
          ),
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(15),
            borderSide: const BorderSide(color: Colors.grey),
          ),
          suffixIcon: IconButton(
            icon: const Icon(Icons.arrow_upward),
            onPressed: () {
              var message = types.PartialText(
                  text: smsController.messageTextEditingController.value.text);
              sendMessage(message);
              smsController.messageTextEditingController.value.clear();
            },
          ),
        ),
      ),
    );
  }

Hey @gada-raj, I have experienced the same issue. What I found is that issue occurred because I used fixed string as id within sendMessage() method instead of Uuid().

So basically, instead of

id: "Asdad",

you should be using

id: const Uuid().v4(),

like it is suggested in the example. That's how I managed to resolve the issue.

@demchenkoalex
Copy link
Member

demchenkoalex commented Sep 2, 2024

note to self - if this is an id issue again, I must add assert in the code to fail with bad id usage to avoid random crashes like this

@IbrahimYildirim
Copy link

I am also receiving this error. Here is a detailed log

flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞════════════════════════
flutter: The following assertion was thrown building
flutter: RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#98081](state:
flutter: RawGestureDetectorState#91630(gestures: [vertical drag],
flutter: behavior: opaque)):
flutter: A RenderSliverPadding expected a child of type RenderSliver but
flutter: received a child of type RenderErrorBox.
flutter: RenderObjects expect specific types of children because they
flutter: coordinate with their children during layout and paint. For
flutter: example, a RenderSliver cannot be the child of a RenderBox
flutter: because a RenderSliver does not understand the RenderBox layout
flutter: protocol.
flutter:
flutter: The RenderSliverPadding that expected a RenderSliver child was
flutter: created by:
flutter:   SliverPadding ← Viewport ← IgnorePointer-[GlobalKey#0c362] ←
flutter:   Semantics ← Listener ← _GestureSemantics ←
flutter:   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#98081]
flutter:   ← Listener ← _ScrollableScope ←
flutter:   _ScrollSemantics-[GlobalKey#a4c8b] ←
flutter:   NotificationListener<ScrollMetricsNotification> ← Scrollable ←
flutter:   ⋯
flutter:
flutter: The RenderErrorBox that did not match the expected child type was
flutter: created by:
flutter:   ErrorWidget-[#818ac] ←
flutter:   SliverAnimatedList-[LabeledGlobalKey<SliverAnimatedListState>#2e3b4]
flutter:   ← SliverPadding ← Viewport ← IgnorePointer-[GlobalKey#0c362] ←
flutter:   Semantics ← Listener ← _GestureSemantics ←
flutter:   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#98081]
flutter:   ← Listener ← _ScrollableScope ←
flutter:   _ScrollSemantics-[GlobalKey#a4c8b] ← ⋯
flutter:
flutter: The relevant error-causing widget was:
flutter:   Chat
flutter:   Chat:file:///Users/ibo/AndroidStudioProjects/minibook/lib/ui/views/chat_view/chat_view_screen.dart:221:12
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0      RenderObjectWithChildMixin.debugValidateChild.<anonymous closure> (package:flutter/src/rendering/object.dart:4015:9)
flutter: #1      RenderObjectWithChildMixin.debugValidateChild (package:flutter/src/rendering/object.dart:4042:6)
flutter: #2      SingleChildRenderObjectElement.insertRenderObjectChild (package:flutter/src/widgets/framework.dart:6772:25)
flutter: #3      RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:6591:35)
flutter: #4      RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6458:5)
flutter: #5      Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335:16)
flutter: #6      Element.updateChild (package:flutter/src/widgets/framework.dart:3846:18)
flutter: #7      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5519:16)
flutter: #8      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
flutter: #9      Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
flutter: #10     StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
flutter: #11     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #12     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
flutter: #13     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #14     Element.updateChildren (package:flutter/src/widgets/framework.dart:3973:32)
flutter: #15     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6918:17)
flutter: #16     _ViewportElement.update (package:flutter/src/widgets/viewport.dart:235:11)
flutter: #17     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #18     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
flutter: #19     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #20     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
flutter: #21     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #22     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
flutter: #23     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #24     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
flutter: #25     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #26     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
flutter: #27     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
flutter: #28     Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
flutter: #29     StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
flutter: #30     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #31     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
flutter: #32     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #33     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
flutter: #34     Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
flutter: #35     ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
flutter: #36     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #37     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6765:14)
flutter: #38     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #39     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
flutter: #40     Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
flutter: #41     ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
flutter: #42     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
flutter: #44     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
flutter: #45     Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
flutter: #46     StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
flutter: #47     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #48     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
flutter: #49     Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
flutter: #50     StatelessElement.update (package:flutter/src/widgets/framework.dart:5556:5)
flutter: #51     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #52     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
flutter: #53     Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
flutter: #54     ProxyElement.update (package:flutter/src/widgets/framework.dart:5809:5)
flutter: #55     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #56     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
flutter: #57     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
flutter: #58     Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
flutter: #59     StatefulElement.update (package:flutter/src/widgets/framework.dart:5666:5)
flutter: #60     Element.updateChild (package:flutter/src/widgets/framework.dart:3824:15)
flutter: #61     _LayoutBuilderElement._layout.layoutCallback (package:flutter/src/widgets/layout_builder.dart:155:18)
flutter: #62     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2844:19)
flutter: #63     _LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:173:12)
flutter: #64     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:2686:59)
flutter: #65     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:1097:15)
flutter: #66     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:2686:14)
flutter: #67     RenderConstrainedLayoutBuilder.rebuildIfNecessary (package:flutter/src/widgets/layout_builder.dart:248:7)
flutter: #68     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:331:5)
flutter: #69     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #70     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #71     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:21)
flutter: #72     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #73     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:21)
flutter: #75     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #76     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #77     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
flutter: #78     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:869:45)
flutter: #79     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:904:32)
flutter: #80     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #81     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #82     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:21)
flutter: #83     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #84     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #85     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
flutter: #86     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:582:43)
flutter: #87     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:609:12)
flutter: #88     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #89     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #90     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
flutter: #91     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:582:43)
flutter: #92     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:609:12)
flutter: #93     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #94     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #95     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:21)
flutter: #96     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #97     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #98     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:21)
flutter: #99     RenderObject.layout (package:flutter/src/rendering/object.dart:2575:7)
flutter: #100    RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
flutter: #101    MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:173:12)
flutter: #102    _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1063:7)
flutter: #103    MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:237:7)
flutter: #104    RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:404:14)
flutter: #105    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2414:7)
flutter: #106    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1051:18)
flutter: #107    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1064:15)
flutter: #108    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:582:23)
flutter: #109    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:991:13)
flutter: #110    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:448:5)
flutter: #111    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1386:15)
flutter: #112    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1311:9)
flutter: #113    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1169:5)
flutter: #114    _invoke (dart:ui/hooks.dart:312:13)
flutter: #115    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:399:5)
flutter: #116    _drawFrame (dart:ui/hooks.dart:283:31)
flutter:
flutter: ═════════════════════════════════════════════════════════════════

@IbrahimYildirim
Copy link

So it turns out the Uuid package i was using was making a UID string with the value Instance of UuidV4() instead of an actual unique id.. The package was updated from

UuidV4().toString();

To

Uuid().v4();

@demchenkoalex
Copy link
Member

yes, I will make sure to add some kind of warning if multiple messages have the same id

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

6 participants