Coder Social home page Coder Social logo

tencentcloud / chat-uikit-flutter Goto Github PK

View Code? Open in Web Editor NEW
126.0 4.0 82.0 7.33 MB

A powerful Flutter chat UI component library and business logic for Tencent Cloud Chat, creating seamless in-app chat modules for delightful user experiences.

Home Page: https://trtc.io/products/chat?utm_source=gfs&utm_medium=link&utm_campaign=%E6%B8%A0%E9%81%93&_channel_track_key=k6WgfCKn

License: BSD 3-Clause "New" or "Revised" License

Ruby 0.17% Swift 0.20% Objective-C 0.01% Dart 96.18% Kotlin 0.01% CMake 1.12% C++ 1.53% C 0.09% HTML 0.26% JavaScript 0.43%
chat flutter

chat-uikit-flutter's Introduction

<style> .button-9 { appearance: button; backface-visibility: hidden; background-color: #1d52d9; border-radius: 6px; border-width: 0; box-shadow: rgba(50, 50, 93, .1) 0 0 0 1px inset,rgba(50, 50, 93, .1) 0 2px 5px 0,rgba(0, 0, 0, .07) 0 1px 1px 0; box-sizing: border-box; color: #fff; cursor: pointer; font-family: -apple-system,system-ui,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif; font-size: 100%; height: 44px; line-height: 1.15; margin: 12px 0 0; outline: none; overflow: hidden; padding: 0 20px; position: relative; text-align: center; text-transform: none; transform: translateZ(0); transition: all .2s,box-shadow .08s ease-in; user-select: none; -webkit-user-select: none; touch-action: manipulation; } .button-9:disabled { cursor: default; } .button-9:focus { box-shadow: rgba(50, 50, 93, .1) 0 0 0 1px inset, rgba(50, 50, 93, .2) 0 6px 15px 0, rgba(0, 0, 0, .1) 0 2px 2px 0, rgba(50, 151, 211, .3) 0 0 0 4px; } </style>

Tencent Chat Logo

Tencent Cloud Chat UIKit


Globally interconnected In-App Chat, user profile and relationship chains and offline push.


More languages: 简体中文-TUIKit介绍 简体中文-快速集成


TUIKit has Chat SDK, UI components and basic business logic inside. You can choose our pure Chat SDK tencent-cloud-chat-sdk if you tend to build the UI yourself.

Official Documentation


Check Out Our Sample Apps

Experience our Chat and Voice/Video Call modules by trying out our sample apps.

These apps have been created using the same Flutter project as our SDKs and extensions.

Platform Link Remark
Android / iOS Tencent Chat Logo Scan to download app for both Android and iOS. Automatically identifies platform.
Web Tencent Chat Logo Supports both desktop and mobile browsers and automatically adjusts its layout accordingly. Same website as link below.
Web Visit Now Supports both desktop and mobile browsers and automatically adjusts its layout accordingly. Same website as previous QR code.
macOS Download Now The macOS version of our sample app. Control-click the app icon, then choose "Open" from the shortcut menu.
Windows Download Now The Windows version of our sample app, which is a UWP (Universal Windows Platform) application.
Linux Coming Soon... Will be available later this year.

Take a look at the screenshots of TUIKit here to get an idea of what to expect.

Introduction to TUIKit

Tencent Cloud Chat SDK comes with TUIKit, which is an official set of UI components that have chat business logic built-in. TUIKit includes components like conversation, chat, relationship chain, and group.

Developers can use these UI components to quickly and easily add In-APP chat modules to their mobile applications.

img

Currently, Flutter TUIKit contains the following main components:

In addition to these components, there are other useful components and widgets available to help developers meet their business needs, such as group entry application list and group member list.

For the source code of the project shown in the image above, please refer to chat-demo-flutter. This project is open source and can be directly used by developers.

Compatible Platforms

The platforms are compatible with the deployment of our Chat UIKit.

  • Android
  • iOS
  • Web (version 0.1.4 and later)
  • Windows (version 2.0.0 and later)
  • macOS (version 2.0.0 and later)

Get Started

Please refer to this document for a complete and detailed guide on getting started.

Directions

The following guide describes how to quickly build a simple chat application using Flutter TUIKit.

Refer to the appendix if you want to learn about the details and parameters of each widget.

If you want to directly add Flutter TUIKit to your existing application, refer to this document. You can add the Flutter module to your existing application, code once, and deploy to all platforms. This can significantly reduce the workload of adding chat and call modules to your existing application.

Step 0: Create two accounts for testing

Sign up and log in to the Tencent Cloud Chat console.

Create an application and enter it.

Select Auxiliary Tools > UserSig Generation and Verification on the left sidebar. Generate two pairs of "UserID" and the corresponding "UserSig," and copy the "key" information. Refer to this document.

Tips: You can create "user1" and "user2" here.

Note:

The correct way to distribute UserSig is to integrate the calculation code for UserSig into your server and provide an application-oriented API. When UserSig is needed, your application can send a request to the business server for a dynamic UserSig. For more information, see How do I calculate UserSig on the server?.

Step 1: Create a Flutter app and add permission configuration

Create a Flutter app quickly by following the Flutter documentation.

TUIKit needs the permissions of shooting/album/recording/network for basic messaging functions. You need to declare these permissions manually to use the relevant capabilities normally.

Android

Open android/app/src/main/AndroidManifest.xml and add the following lines between <manifest> and </manifest>.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>

iOS

Open ios/Podfile and add the following lines to the end of the file.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
            config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
            config.build_settings['ENABLE_BITCODE'] = 'NO'
            config.build_settings["ONLY_ACTIVE_ARCH"] = "NO"
        end
    target.build_configurations.each do |config|
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
            '$(inherited)',
            'PERMISSION_MICROPHONE=1',
            'PERMISSION_CAMERA=1',
            'PERMISSION_PHOTOS=1',
          ]
        end
  end
end

Step 2: Install dependencies

Add tencent_cloud_chat_uikit under dependencies in the pubspec.yaml file, or run the following command:

flutter pub add tencent_cloud_chat_uikit

It supports Android and iOS by default. If you also want to use it on the web, refer to the following guide.

Web Support

Version 0.1.4 or later is required to support web.

If your existing Flutter project does not support web, run flutter create . in the project root directory to add web support.

Install JavaScript dependencies to web/ using npm or yarn.

cd web

npm init

npm i tim-js-sdk

npm i tim-upload-plugin

Open web/index.html and add the following two lines between <head> and </head> to import them.

<script src="./node_modules/tim-upload-plugin/index.js"></script>
<script src="./node_modules/tim-js-sdk/tim-js-friendship.js"></script>

Step 3: Initialize TUIKit

Initialize TUIKit when your app starts. You only need to perform the initialization once for the project to start.

Get the instance of TUIKit first using TIMUIKitCore.getInstance(), followed by initializing it with your sdkAppID.

/// main.dart
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';

final CoreServicesImpl _coreInstance = TIMUIKitCore.getInstance();

@override
void initState() {
  _coreInstance.init(
      sdkAppID: 0, // Replace 0 with the SDKAppID of your Tencent Cloud Chat application
      loglevel: LogLevelEnum.V2TIM_LOG_DEBUG,
      listener: V2TimSDKListener());
  super.initState();
}}

You may also want to register a callback function for onTUIKitCallbackListener here. Refer to the appendix.

Step 4: Get the signature and log in

You can now log in one of the testing accounts generated in Step 0 to start the Tencent Cloud Chat module.

Log in using _coreInstance.login.

/// main.dart
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';

final CoreServicesImpl _coreInstance = TIMUIKitCore.getInstance();
_coreInstance.login(userID: userID, userSig: userSig);

Note: Importing UserSig to your application is only for debugging purposes and cannot be used for the release version. Before publishing your app, you should generate your UserSig from your server. Refer to: https://www.tencentcloud.com/document/product/1047/34385?from=pub

Step 5. Implementing the conversation list page

You can use the conversation (channel) list page as the homepage of your Chat module, which includes all conversations with users and groups that have chat records.

![Conversation List Page](https://qcloudimg.tencent-cloud.cn/raw/a27b131d555b1158d150bd9b337c1d9d.png)

You can create a `Conversation` class, with `TIMUIKitConversation` as its body, to render the conversation list. You only need to provide the `onTapItem` callback, which allows users to navigate to the Chat page for each conversation. In the next step, we'll introduce the `Chat` class.

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

class Conversation extends StatelessWidget {
  const Conversation({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text(
          "Message",
          style: TextStyle(color: Colors.black),
        ),
      ),
      body: TIMUIKitConversation(
        onTapItem: (selectedConv) {
          Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) =>
                    Chat(
                      selectedConversation: selectedConv,
                    ),
              ));
        },
      ),
    );
  }
}

Step 6. Implementing the chat page

The chat page consists of the main message list and a message sending bar at the bottom.

![Chat Page](https://qcloudimg.tencent-cloud.cn/raw/09b8b9b54fd0caa47069544343eba461.jpg)

You can create a `Chat` class, with `TIMUIKitChat` as its body, to render the chat page. We recommend providing an `onTapAvatar` callback function to navigate to the profile page for the current contact, which we'll introduce in the next step.

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

class Chat extends StatelessWidget {
  final V2TimConversation selectedConversation;

  const Chat({Key? key, required this.selectedConversation}) : super(key: key);

  String? _getConvID() {
    return selectedConversation.type == 1
        ? selectedConversation.userID
        : selectedConversation.groupID;
  }

  @override
  Widget build(BuildContext context) {
    return TIMUIKitChat(
      conversationID: _getConvID() ?? '', 
      conversationType: selectedConversation.type ?? 1, 
      conversationShowName: selectedConversation.showName ?? "", 
      onTapAvatar: (_) {
        Navigator.push(
            context,
            MaterialPageRoute(
              builder: (context) => UserProfile(userID: userID),
            ));
      }, 
    );
  }

Step 7. Implementing the user profile page

This page shows the profile of a specific user and maintains the relationship between the current logged-in user and the other user.

![User Profile Page](https://qcloudimg.tencent-cloud.cn/raw/03e88da6f1d63f688d2a8ee446da43ff.png)

You can create a `UserProfile` class, with `TIMUIKitProfile` as its body, to render the user profile page.

The only parameter you have to provide is `userID`, while this component automatically generates the profile and relationship maintenance page based on the existence of friendship.

> **TIP**: Please use `profileWidgetBuilder` first to customize some profile widgets and determine their vertical sequence using `profileWidgetsOrder` if you want to customize this page. If this method cannot meet your business needs, you may consider using `builder` instead.

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

class UserProfile extends StatelessWidget {
  final String userID;

  const UserProfile({required this.userID, Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text(
          "Message",
          style: TextStyle(color: Colors.black),
        ),
      ),
      body: TIMUIKitProfile(
        userID: widget.userID,
      ),
    );
  }
}

Now your app can send and receive messages, display the conversation list, and manage contact friendships. You can use other components from TUIKit to quickly and easily implement the complete Chat module.

FAQs

Do I need to integrate Chat SDK after integrating TUIKit?

No. You don't need to integrate Chat SDK again. If you want to use Chat SDK related APIs, you can get them via TIMUIKitCore.getSDKInstance(). This method is recommended to ensure Chat SDK version consistency.

Why did force quit occur when I sent voice, image, file or other messages?

Check whether you have enabled the camera, mic, album, or other related permissions.

Refers to Step 1 above.

What should I do if clicking Build And Run for an Android device triggers an error, stating no available device is found?

Check that the device is not occupied by other resources. Alternatively, click Build to generate an APK package, drag it to the simulator, and run it.

What should I do if an error occurs during the first run for an iOS device?

If an error occurs after the configuration, click Product > Clean Build Folder , clean the product, and run pod install or flutter run again.

What should I do if an error occurs during debugging on a real iOS device when I am wearing an Apple Watch?

Turn on Airplane Mode on your Apple Watch, and go to Settings > Bluetooth on your iPhone to turn off Bluetooth.

Restart Xcode (if opened) and run flutter run again.

What should I do when an error occurs on an Android device after TUIKit is imported into the application automatically generated by Flutter?

  1. Open android\app\src\main\AndroidManifest.xml and complete xmlns:tools="http://schemas.android.com/tools" / android:label="@string/android_label" / tools:replace="android:label" as follows.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="Replace it with your Android package name"
    xmlns:tools="http://schemas.android.com/tools">
    <application android:label="@string/android_label" tools:replace="android:label"
        android:icon="@mipmap/ic_launcher"
    // Specify an icon path
    android:usesCleartextTraffic="true"
    android:requestLegacyExternalStorage="true">
  1. Open android\app\build.gradle and complete minSdkVersion and targetSdkVersion in defaultConfig.
defaultConfig {
  applicationId "" // Replace it with your Android package name
  minSdkVersion 21
  targetSdkVersion 30
}

Recommended Resources

For those who require real-time voice and video call capabilities alongside our Chat UIKit, we highly recommend our dedicated voice and video call UI component package, tencent_calls_uikit. This robust and feature-rich package is specifically designed to complement our existing solution and seamlessly integrate with it, providing a comprehensive, unified communication experience for your users.

Contact Us

Please do not hesitate to contact us in the following place, if you have any further questions or tend to learn more about the use cases.

Our Website: https://www.tencentcloud.com/products/im?from=pub

chat-uikit-flutter's People

Contributors

hexingcheng avatar rolewong avatar zqfan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

chat-uikit-flutter's Issues

首次展示 TIMUIKitChat 时报错

  1. 第一次推出 TIMUIKitChat 后, 页面空白并不断报错, 这时返回上级页面, 重新推出 TIMUIKitChat, 页面显示正常, 无报错
  2. 目前在 iOS 设备上稳定复现, 在 Android 手机上昨天还可以复现, 今天就无法复现了

因为在 Android 手机上同样的代码无法稳定复现, 我并不怀疑自己的集成方式有误

错误日志:

flutter: ✅ 腾讯云 IM 登录成功
TIM: 2023-08-02 10:49:13.819 E 732-172456      |-group_list_fetcher.cpp:85               HandleJoinedGroupListResponse           |error_code:11000|error_message:community group not open|offset:0|count:500
TIM: 2023-08-02 10:49:13.819 E 732-172456      |-group_list_provider.cpp:58              HandleJoinedCommunityGroupList          |error_code:11000|error_message:community group not open
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
'package:flutter/src/rendering/box.dart': Failed assertion: line 321 pos 12: 'width > 0.0': is not
true.

Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=2_bug.md

The relevant error-causing widget was:
  TIMUIKitChat TIMUIKitChat:file:///Users/wangce/Documents/repo/tbay/lib/pages/chat.dart:49:12

When the exception was thrown, this was the stack:
#2      BoxConstraints.constrainSizeAndAttemptToPreserveAspectRatio (package:flutter/src/rendering/box.dart:321:12)
#3      RenderFittedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:2777:30)
#4      RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#5      RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#6      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#7      RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3751:13)
#8      RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#9      RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#10     RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:297:14)
#11     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#12     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#13     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#14     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#15     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#17     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#18     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#19     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#20     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1449:11)
#21     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#22     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#23     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#24     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:580:43)
#25     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:607:12)
#26     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#27     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#28     RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:297:14)
#29     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#30     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#31     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:315:14)
#32     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#33     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#34     RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:238:12)
#35     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#36     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#37     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#38     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#39     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#40     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#41     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#42     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#43     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#44     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#45     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#46     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#47     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#48     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#49     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#50     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:808:43)
#51     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
#52     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#53     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#54     RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:297:14)
#55     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#56     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#57     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#58     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:808:43)
#59     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
#60     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#61     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#62     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#63     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:808:43)
#64     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
#65     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#66     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#67     RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:238:12)
#68     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#69     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#70     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#71     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:808:43)
#72     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
#73     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#74     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#75     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#76     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#77     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#79     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#80     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#81     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#82     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#83     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#84     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#85     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:868:45)
#86     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
#87     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#88     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#89     RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:238:12)
#90     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#91     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#92     RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:238:12)
#93     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#94     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#95     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:315:14)
#96     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#97     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#98     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#99     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#100    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#101    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#102    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#103    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#104    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#105    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#106    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#107    RenderSliverMultiBoxAdaptor.insertAndLayoutChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:491:13)
#108    RenderSliverList.performLayout.advance (package:flutter/src/rendering/sliver_list.dart:241:19)
#109    RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:283:12)
#110    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#111    RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:139:12)
#112    RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:361:11)
#113    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#114    RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:534:13)
#115    RenderShrinkWrappingViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1882:12)
#116    RenderShrinkWrappingViewport.performLayout (package:flutter/src/rendering/viewport.dart:1833:20)
#117    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#118    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#119    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#120    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#121    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#122    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#123    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#124    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#125    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#126    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#127    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#128    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#129    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#130    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#131    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#132    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#133    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#134    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#135    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#136    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#137    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#138    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#139    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#140    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#141    RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:554:11)
#142    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#143    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#144    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#145    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#146    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#147    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#148    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#149    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#150    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#151    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#152    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#153    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#154    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#155    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#156    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#157    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#158    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#159    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#160    RenderStack._computeSize (package:flutter/src/rendering/stack.dart:580:43)
#161    RenderStack.performLayout (package:flutter/src/rendering/stack.dart:607:12)
#162    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#163    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#164    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#165    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#166    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#167    RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:438:14)
#168    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#169    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#170    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#171    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#172    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#173    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#174    RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:868:45)
#175    RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
#176    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#177    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#178    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#179    RenderStack._computeSize (package:flutter/src/rendering/stack.dart:580:43)
#180    RenderStack.performLayout (package:flutter/src/rendering/stack.dart:607:12)
#181    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#182    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#183    MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#184    _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1056:7)
#185    MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:235:7)
#186    RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
#187    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#188    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#189    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#190    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#191    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#192    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#193    _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1449:11)
#194    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#195    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#196    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#197    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#198    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#199    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#200    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#201    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#202    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#203    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#204    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#205    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#206    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#207    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#208    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#209    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#210    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#211    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
#212    RenderStack._computeSize (package:flutter/src/rendering/stack.dart:580:43)
#213    RenderStack.performLayout (package:flutter/src/rendering/stack.dart:607:12)
#214    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#215    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#216    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#217    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#218    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#219    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#220    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#221    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#222    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#223    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#224    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#225    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#226    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#227    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#228    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#229    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#230    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#231    RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3749:14)
#232    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#233    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#234    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
#235    RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
#236    RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
#237    _RenderTheaterMixin.performLayout (package:flutter/src/widgets/overlay.dart:832:15)
#238    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2234:7)
#239    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1016:18)
#240    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:492:19)
#241    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:905:13)
#242    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:358:5)
#243    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1284:15)
#244    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1214:9)
#245    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1072:5)
#246    _invoke (dart:ui/hooks.dart:142:13)
#247    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:359:5)
#248    _drawFrame (dart:ui/hooks.dart:112:31)
(elided 2 frames from class _AssertionError)

The following RenderObject was being processed when the exception was fired: RenderFittedBox#e2f8e relayoutBoundary=up52 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
  creator: FittedBox ← KeyedSubtree-[GlobalKey#7a500] ← _EffectiveTickerMode ← TickerMode ← Offstage ←
    SizedBox ← Hero ← Listener ← _GestureSemantics ← RawGestureDetector ← GestureDetector ← ClipRRect
    ← ⋯
  parentData: <none> (can use size)
  constraints: BoxConstraints(0.0<=w<=157.4, 0.0<=h<=256.0)
  size: MISSING
  fit: contain
  alignment: Alignment.center
  textDirection: ltr
This RenderObject had the following descendants (showing up to depth 5):
    child: RenderSemanticsAnnotations#20743 relayoutBoundary=up53 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
      child: RenderImage#34502 relayoutBoundary=up54 NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: RenderBox was not laid out: RenderFittedBox#e2f8e relayoutBoundary=up52 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderOffstage#88c44 relayoutBoundary=up51 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderConstrainedBox#7b993 relayoutBoundary=up50 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#efa1f relayoutBoundary=up49 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#a686c relayoutBoundary=up48 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderClipRRect#48499 relayoutBoundary=up47 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderStack#2e15e relayoutBoundary=up46 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderConstrainedBox#b04f8 relayoutBoundary=up45 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: _RenderLayoutBuilder#3b2c9 relayoutBoundary=up44 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPadding#15106 relayoutBoundary=up43 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderDecoratedBox#c0e62 relayoutBoundary=up42 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#69391 relayoutBoundary=up41 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#3de57 relayoutBoundary=up40 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#0b54c relayoutBoundary=up39 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#8d588 relayoutBoundary=up38 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderConstrainedBox#400bf relayoutBoundary=up37 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#f0089 relayoutBoundary=up36 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#393d5 relayoutBoundary=up35 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPadding#1034c relayoutBoundary=up34 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#2edbc relayoutBoundary=up33 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#016c5 relayoutBoundary=up32 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#ee78a relayoutBoundary=up31 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderMouseRegion#f15b2 relayoutBoundary=up30 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#a1bfe relayoutBoundary=up29 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPadding#3f6f2 relayoutBoundary=up28 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPadding#f009f relayoutBoundary=up27 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: _RenderLayoutBuilder#3c4bf relayoutBoundary=up26 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderDecoratedBox#84efd relayoutBoundary=up25 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#c7918 relayoutBoundary=up24 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 546 pos 12: 'child.hasSize': is not true.
Another exception was thrown: Null check operator used on a null value
Another exception was thrown: Null check operator used on a null value
Another exception was thrown: RenderBox was not laid out: RenderShrinkWrappingViewport#853ee relayoutBoundary=up20 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#29a59 relayoutBoundary=up19 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#50372 relayoutBoundary=up18 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#512e9 relayoutBoundary=up17 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#45b60 relayoutBoundary=up16 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#8e1ec relayoutBoundary=up15 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: _RenderScrollSemantics#f56fe relayoutBoundary=up14 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#72549 relayoutBoundary=up13 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderCustomPaint#f3eae relayoutBoundary=up12 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderMouseRegion#67467 relayoutBoundary=up11 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#e2e05 relayoutBoundary=up10 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#5edac relayoutBoundary=up9 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#de1d1 relayoutBoundary=up8 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderStack#d00a9 relayoutBoundary=up6 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: 'package:flutter/src/rendering/shifted_box.dart': Failed assertion: line 348 pos 12: 'child!.hasSize': is not true.

flutter: unhandled element filter; Picture key: Svg loader
Another exception was thrown: RenderBox was not laid out: RenderConstrainedBox#b04f8 relayoutBoundary=up45 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: _RenderLayoutBuilder#3b2c9 relayoutBoundary=up44 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPadding#15106 relayoutBoundary=up43 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderDecoratedBox#c0e62 relayoutBoundary=up42 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#69391 relayoutBoundary=up41 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#3de57 relayoutBoundary=up40 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#0b54c relayoutBoundary=up39 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderFlex#8d588 relayoutBoundary=up38 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderConstrainedBox#400bf relayoutBoundary=up37 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderFlex#f0089 relayoutBoundary=up36 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderFlex#393d5 relayoutBoundary=up35 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPadding#1034c relayoutBoundary=up34 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderFlex#2edbc relayoutBoundary=up33 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#016c5 relayoutBoundary=up32 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#ee78a relayoutBoundary=up31 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderMouseRegion#f15b2 relayoutBoundary=up30 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderFlex#a1bfe relayoutBoundary=up29 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPadding#3f6f2 relayoutBoundary=up28 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPadding#f009f relayoutBoundary=up27 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: _RenderLayoutBuilder#3c4bf relayoutBoundary=up26 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderDecoratedBox#84efd relayoutBoundary=up25 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#c7918 relayoutBoundary=up24 NEEDS-PAINT
Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 546 pos 12: 'child.hasSize': is not true.
Another exception was thrown: Null check operator used on a null value
Another exception was thrown: Null check operator used on a null value
Another exception was thrown: RenderBox was not laid out: RenderShrinkWrappingViewport#853ee relayoutBoundary=up20 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#29a59 relayoutBoundary=up19 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#50372 relayoutBoundary=up18 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#512e9 relayoutBoundary=up17 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#45b60 relayoutBoundary=up16 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#8e1ec relayoutBoundary=up15 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: _RenderScrollSemantics#f56fe relayoutBoundary=up14 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#72549 relayoutBoundary=up13 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderCustomPaint#f3eae relayoutBoundary=up12 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderMouseRegion#67467 relayoutBoundary=up11 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#e2e05 relayoutBoundary=up10 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#5edac relayoutBoundary=up9 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#de1d1 relayoutBoundary=up8 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderStack#d00a9 relayoutBoundary=up6 NEEDS-PAINT
Another exception was thrown: 'package:flutter/src/rendering/shifted_box.dart': Failed assertion: line 348 pos 12: 'child!.hasSize': is not true.
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
Another exception was thrown: Exception: Invalid image data
Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 2318 pos 12: '!_debugDoingThisLayout': is not true.
Another exception was thrown: RenderBox was not laid out: _RenderLayoutBuilder#3b2c9 relayoutBoundary=up44 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPadding#15106 relayoutBoundary=up43 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderDecoratedBox#c0e62 relayoutBoundary=up42 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#69391 relayoutBoundary=up41 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#3de57 relayoutBoundary=up40 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#0b54c relayoutBoundary=up39 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#8d588 relayoutBoundary=up38 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderConstrainedBox#400bf relayoutBoundary=up37 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#f0089 relayoutBoundary=up36 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#393d5 relayoutBoundary=up35 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPadding#1034c relayoutBoundary=up34 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#2edbc relayoutBoundary=up33 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#016c5 relayoutBoundary=up32 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#ee78a relayoutBoundary=up31 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderMouseRegion#f15b2 relayoutBoundary=up30 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderFlex#a1bfe relayoutBoundary=up29 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPadding#3f6f2 relayoutBoundary=up28 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderPadding#f009f relayoutBoundary=up27 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: _RenderLayoutBuilder#3c4bf relayoutBoundary=up26 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderDecoratedBox#84efd relayoutBoundary=up25 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#c7918 relayoutBoundary=up24 NEEDS-PAINT
Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 546 pos 12: 'child.hasSize': is not true.
Another exception was thrown: Null check operator used on a null value
Another exception was thrown: Null check operator used on a null value
Another exception was thrown: RenderBox was not laid out: RenderShrinkWrappingViewport#853ee relayoutBoundary=up20 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#29a59 relayoutBoundary=up19 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#50372 relayoutBoundary=up18 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#512e9 relayoutBoundary=up17 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#45b60 relayoutBoundary=up16 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#8e1ec relayoutBoundary=up15 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: _RenderScrollSemantics#f56fe relayoutBoundary=up14 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#72549 relayoutBoundary=up13 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderCustomPaint#f3eae relayoutBoundary=up12 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderMouseRegion#67467 relayoutBoundary=up11 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#e2e05 relayoutBoundary=up10 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#5edac relayoutBoundary=up9 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderPointerListener#de1d1 relayoutBoundary=up8 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderStack#d00a9 relayoutBoundary=up6 NEEDS-PAINT
Another exception was thrown: 'package:flutter/src/rendering/shifted_box.dart': Failed assertion: line 348 pos 12: 'child!.hasSize': is not true.
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#b5357 relayoutBoundary=up7 NEEDS-PAINT
...
...
之后控制台就一直输出上面这句话

tencent_cloud_chat_uikit: ^2.1.3+1 # https://pub.dev/packages/tencent_cloud_chat_uikit

flutter doctor --verbose

[✓] Flutter (Channel stable, 3.10.6, on macOS 13.5 22G74 darwin-arm64, locale en-CN)
    • Flutter version 3.10.6 on channel stable at /Users/wangce/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision f468f3366c (3 weeks ago), 2023-07-12 15:19:05 -0700
    • Engine revision cdbeda788a
    • Dart version 3.0.6
    • DevTools version 2.23.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
    • Android SDK at /Users/wangce/Library/Android/sdk
    • Platform android-33, build-tools 33.0.1
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14E300c
    • CocoaPods version 1.12.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)

[✓] VS Code (version 1.80.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.70.0

[✓] Proxy Configuration
    • HTTP_PROXY is set
    • NO_PROXY is localhost,127.0.0.1,::1
    • NO_PROXY contains localhost
    • NO_PROXY contains 127.0.0.1
    • NO_PROXY contains ::1

[✓] Connected device (4 available)
    • SM A3360 (mobile)       • RFCTA2392CL               • android-arm64  • Android 13 (API 33)
    • iPhone 11 tbay (mobile) • 00008030-000E4D0811B9802E • ios            • iOS 16.5.1 20F75
    • macOS (desktop)         • macos                     • darwin-arm64   • macOS 13.5 22G74 darwin-arm64
    • Chrome (web)            • chrome                    • web-javascript • Google Chrome 115.0.5790.114

[✓] Network resources
    • All expected network resources are available.

• No issues found!

pub 相同第三方插件冲突

flutter pub add tencent_cloud_chat_uikit
Because every version of tencent_cloud_chat_uikit depends on package_info_plus ^1.4.0 and cns depends on package_info_plus ^3.0.3, tencent_cloud_chat_uikit is forbidden.
So, because cns depends on tencent_cloud_chat_uikit any, version solving failed.

哥们 里边引入的pub 插件 不更新的吗?
package_info_plus 都 3.0了。你里边还引入的1.0的

还有其他的

iOS TIMUIKitContact无法获取联系人列表

版本:

  tencent_cloud_chat_uikit: ^2.3.3+1

2.3.2就有这个问题

操作流程:

先执行

static final CoreServicesImpl _coreInstance = TIMUIKitCore.getInstance();

然后执行

_coreInstance.init()

然后login,成功后进入app页面。这时展示TIMUIKitConversation是正常的。
自建了联系人列表页面,进入后加载TIMUIKitContact组件,使用默认的FriendListLifeCycle

TIMUIKitContact(
        emptyBuilder: (context) => const Center(
          child: Text("No Contacts"),
        ),
        isShowOnlineStatus: true,
        lifeCycle: FriendListLifeCycle(),
        onTapItem: (selectedConv) {
          // V2TimConversation conv = V2TimConversation(
          //   conversationID: "",
          //   userID: selectedConv.userID,
          // );
          // NavigatorTool.push(context, page: ChatDetailPage(selectedConversation: conv));
          NavigatorTool.push(context, page: ChatProfilePage(userID: selectedConv.userID));
        },
      )

此时组件展示的是提供给emptyBuilderNo Contacts
问题是,当执行一个 Flutter 的hot restart(大R)之后,再次进入这个页面,就可以正常显示联系人列表了。
并且无任何相关log输出。
如果可以,请提供一个官方的email地址,我可以提供一个复现的视频。

会话相关问题

1、会话列表昵称字体大小不能设置

2、聊天对话框页面,appBar默认模式设置的背景颜色无效

3、聊天对话框页面为什么不会自动获取会话名称?如非会话列表进入就得单独写逻辑在获取,为啥不封装好要多此一举

Execution failed for task ':desktop_drop:compileDebugKotlin'. > A failure occurred while executing org.jetbrains.kotlin.compilerRunner

Launching lib/main.dart on M2103K19C in debug mode...
Running Gradle task 'assembleDebug'...
e: Incompatible classes were found in dependencies. Remove them from the classpath or use '-Xskip-metadata-version-check' to suppress errors
e: /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/META-INF/kotlin-stdlib-jdk7.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
e: /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/META-INF/kotlin-stdlib-jdk8.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
e: /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/META-INF/kotlin-stdlib.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
e: /Users/mingo/.gradle/caches/transforms-3/d345eebbbbb1452404a0f7f527d36350/transformed/jetified-kotlin-stdlib-common-1.9.10.jar!/META-INF/kotlin-stdlib-common.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (32, 9): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (34, 25): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (34, 49): Unresolved reference: listOf
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (37, 25): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (37, 49): Unresolved reference: listOf
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (40, 25): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (44, 21): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (55, 22): Unresolved reference: mutableListOf
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (56, 21): Unresolved reference: until
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (57, 47): Unresolved reference: let
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (58, 28): Unresolved reference: it
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (61, 20): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (63, 17): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (67, 9): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (68, 18): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (72, 16): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (76, 18): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (85, 17): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (86, 9): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (87, 9): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (97, 19): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class
e: /Users/mingo/.pub-cache/hosted/pub.flutter-io.cn/desktop_drop-0.4.4/android/src/main/kotlin/one/mixin/desktop/drop/DesktopDropPlugin.kt: (98, 9): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/mingo/.gradle/caches/transforms-3/9ecbc9adf070a161371f2b3d8d0ad2ed/transformed/jetified-kotlin-stdlib-1.9.10.jar!/kotlin/Unit.class

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':desktop_drop:compileDebugKotlin'.

A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
Compilation error. See log for more details

  • Try:

Run with --stacktrace option to get the stack trace.
Run with --info or --debug option to get more log output.
Run with --scan to get full insights.

BUILD FAILED in 13s

┌─ Flutter Fix ──────────────────────────────────────────────────────────────────────────────┐
│ [!] Your project requires a newer version of the Kotlin Gradle plugin. │
│ Find the latest version on https://kotlinlang.org/docs/releases.html#release-details, then │
│ update /Users/mingo/Desktop/repo/ybs/android/build.gradle: │
│ ext.kotlin_version = '' │
└────────────────────────────────────────────────────────────────────────────────────────────┘
Error: Gradle task assembleDebug failed with exit code 1

demo 跑不了

image $ flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.13.5, on macOS 13.5 22G74 darwin-arm64, locale zh-Hans-CN) [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.2) [✓] Xcode - develop for iOS and macOS (Xcode 14.3.1) [✓] Chrome - develop for the web [✓] Android Studio (version 2021.3) [✓] VS Code (version 1.82.0) [✓] Connected device (4 available) [✓] Network resources

• No issues found!

设置主题无效

_coreInstance.setTheme(
      theme:const TUITheme(
        chatMessageItemFromSelfBgColor:Colors.red  ///聊天页历史消息列表来自自己时背景颜色
   )
);

设置后不生效呢

TXIMSDK_Plus_iOS 版本冲突

[!] CocoaPods could not find compatible versions for pod "TXIMSDK_Plus_iOS":
In Podfile:
tencent_cloud_chat_sdk (from .symlinks/plugins/tencent_cloud_chat_sdk/ios) was resolved to 5.1.2, which depends on
TXIMSDK_Plus_iOS (= 7.1.3925)

None of your spec sources contain a spec satisfying the dependency: TXIMSDK_Plus_iOS (= 7.1.3925).

android bug

在android手机上播放语音消息的时, 如果在播放的时候,手动切换语音消息, 不会执行动画, 只会播放声音。

`subscription = SoundPlayer.playStateListener(listener: (PlayState data) {

  if (data.playState == 'complete') {
    
    widget.chatModel.currentSelectedMsgId = "";
    // SoundPlayer.removeSoundInterruptListener();
    
  }
});`

应该是playStateListener的状态判断有问题, 每次都会触发 complete。 (iOS手机不会这样)。

手机型号: one plus ace, android 12 (color v12.1)

1.7.0没有实质性修正,反而问题更多

1、chat-uikit升级到1.7.0之后,TIMUIKitChat居然必传V2TimConversation conversation参数,将导致多个非消息会话列表进入时必须先代码获取V2TimConversation,造成严重的代码侵入性,如果按这种设计建议uikit项目的意义不大了;

2、bottomSheet模式下打开TIMUIKitChat,点击输入文字显示异常:出现半屏幕以上的空白区域

3、bottomSheet模式下图片/语音授权的背景说明,在拒绝状况下不能关闭必须杀端

4、发送表情问题仍没有解决 发送表情问题

深色模式哪个版本可以适配呢?

我手动改库的话工作量太大,你们不少Widget的颜色直接是定为白色的,而且每次更新后需要重新手动同步更新,请问你们的深色模式多久可以进行适配呀

xcode 构建失败

运行提示:
Error (Xcode): ../../../../.pub-cache/hosted/pub.flutter-io.cn/tencent_extended_text-1.0.0/lib/src/selection/extended_text_selection.dart:149:7: Error: The non-abstract class 'ExtendedTextSelectionState' is missing implementations for these members:

项目内使用的tencent_extended_text版本为1.0.0,最新已更新到1.0.2,麻烦进行同步

tencent_cloud_chat_sdk和leancloud_storage版本冲突,还有很多其他冲突

Because syncfusion_flutter_pdfviewer >=21.1.35 depends on device_info_plus ^8.1.0 and no versions of device_info_plus match >8.1.0 <9.0.0, syncfusion_flutter_pdfviewer >=21.1.35 requires device_info_plus 8.1.0.
And because device_info_plus 8.1.0 depends on ffi ^2.0.1, syncfusion_flutter_pdfviewer >=21.1.35 requires ffi ^2.0.1.
And because every version of tencent_cloud_chat_uikit depends on file_picker ^4.6.1 which depends on ffi ^1.1.2, syncfusion_flutter_pdfviewer >=21.1.35 is incompatible with tencent_cloud_chat_uikit.
So, because fofunsurvi depends on both tencent_cloud_chat_uikit any and syncfusion_flutter_pdfviewer ^21.1.37, version solving failed.
pub get failed

UI问题

怎么去掉这个小点,这是干什么的?
image

如何能使输入栏高度一致?
image
image

如何手动更改语言

如题,如何手动更该UIKit系统语言
I18nUtils(null, "en"); 不生效,不能实时更改

send emoji error - 发送表情异常

1、默认的类QQ表情 - 无删除按钮 / 输入框区域【发送】长亮---出现2个发送按钮,点击表情 >文字 输入框> 点击表情>底部发送,面板不会关闭;在点击表情就数组越界异常

2、emoji表情 - 点击表情 > 文字 输入框> 点击表情> 底部发送,面板不会关闭;在点击表情就数组越界异常(eq. 删除按钮真TM丑)||||||||| 点击表情 > 底部发送,面板不会关闭,在点击表情就数组越界异常

3、自定义小表情 - 点击表情底部发送,面板不会关闭;在点击表情就数组越界异常

dlopen failed: library "libtxsoundtouch.so" not found 用的flutter的demo 只要输入用户名点登录就会出现如下错误

W/SoLoader(29913): load library txsoundtouch from system path
W/SoLoader(29913): load library : java.lang.UnsatisfiedLinkError: dlopen failed: library "libtxsoundtouch.so" not found
W/SoLoader(29913): load library txsoundtouch false
W/SoLoader(29913): load library txffmpeg from system path
I/imsdk (29913): TIM: |-server_config.cpp:260 HandleCommercialAbilityResponse |commercial_ability_bits:0x0000000000000000|expired_time:3600
W/SoLoader(29913): load library : java.lang.UnsatisfiedLinkError: dlopen failed: library "libtxffmpeg.so" not found
W/SoLoader(29913): load library txffmpeg false
W/SoLoader(29913): load library liteavsdk from system path
I/imsdk (29913): TIM: |-server_config.cpp:200 HandleServerConfigResponse |common_version:1471|specified_version:0|expired_interval:21600|json_config:{"report_log_level":"4","report_event_type_disable":"[]","report_quality_type_disable":"[]","report_message_delay_peak":"5","network_enable_concurrent_request_iplist":"1","network_enable_local_iplist_prior":"1","enable_android_https_host_verify":"1","android_devices_rollback_https2http":"[]","support_unread_count_for_meeting":"0","db_thread_max_task_execution_time":"1000","db_file_slimming_config":"{}","network_anycast_address":"http://162.14.3.250/v4/ConfigGetSvc/GetOpenSSOIPList","disable_ios_badge_number":"0","group_attribute_request_config":"{}","cos_upload_file_size_limit":"{}","command_frequency_limit":"[]"}
W/SoLoader(29913): load library : java.lang.UnsatisfiedLinkError: dlopen failed: library "libliteavsdk.so" not found

请换掉 flutter_plugin_record_plus,莫名大了9M

这个库在包中发现assets下多了个armeabi-v7a/ffmpeg,该文件有9.5M,压缩后还有9M;只是为了添加了录音功能,有点不值得,请麻烦换个库;或者可以开放接口让开发自己实现,其他类似功能(如链接预览)也可以这样操作

Null check operator used on a null value

The following _TypeError was thrown building TencentCloudChatThemeWidget(dirty, state: _TencentCloudChatThemeWidgetState#76bd9):
Null check operator used on a null value

The relevant error-causing widget was:
TencentCloudChatConversation TencentCloudChatConversation:file:///to/conversation.dart:21:18

When the exception was thrown, this was the stack:
#0 tL10n (package:tencent_cloud_chat_intl/tencent_cloud_chat_intl.dart:9:74)

update permission_handler and package_info_plus package dependency version

Because tencent_cloud_chat_uikit >=2.1.0 depends on package_info_plus ^4.0.1 and app depends on package_info_plus ^8.0.0, tencent_cloud_chat_uikit >=2.1.0 is forbidden.
So, because app depends on tencent_cloud_chat_uikit ^2.6.0+1, version solving failed.

You can try the following suggestion to make the pubspec resolve:

  • Consider downgrading your constraint on package_info_plus: flutter pub add package_info_plus:^4.2.0

Because tencent_cloud_chat_uikit >=2.0.0-preview.7 depends on permission_handler ^10.2.0 and app depends on permission_handler ^11.3.1, tencent_cloud_chat_uikit >=2.0.0-preview.7 is forbidden.
So, because app depends on tencent_cloud_chat_uikit ^2.6.0+1, version solving failed.

虽然能 dependency_overrides 覆盖。但是还是请用最新版本。

Add version tags

Please add version tags in code repository, it's developer decision to choose the version.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.