acterglobal / a3 Goto Github PK
View Code? Open in Web Editor NEWCommunity Communication and casual social organising platform (App)
Home Page: http://acter.global/
License: Other
Community Communication and casual social organising platform (App)
Home Page: http://acter.global/
License: Other
Earlier we have implemented localization in very early stages of application. Since then, alot of content has been changed and needs rework not only for the chat but other screens as well. For now labeling this issue only for chat.
These issues are coming from the latest commits and can be reproducable by running "cargo make build android". Log file is attached
logs.txt
A common (and surprisingly complicated) shared space is to exchange passwords. As such, we want a password manager area in Effektio.
We need a list of items, you can filter by team, and search by name. Each entry has an icon, a title & (hidden, but show-on-click) password-field, tags and category. The details of each item would also show an editable larger note area, has comments, likes & react-emoji (also on comments) and the activity feed of that item (latest first).
For now, we keep the items themselves simple - adding further fields and features at a later stage.
Note We might want to consider a way to secure that area.
@hkbullar please share the current screens you have designed for the login
with rust->WASM and JS in dart for web[1]?
since #21 we have replaced the MaterialTheme with specific colors. We should switch back to the MaterialTheme.
Scrolling appears disabled on the sidebar, so the login button is unreachable on smaller screens:
There is two parts to fixing this:
Matrix (and the Rust SDK) has the capability to verify a new device that logged in under the same account via cross-device-verification, which then allows to share the encryption keys across multiple devices. This is necessary to allow users to see old conversations from a newly logged in device.
The Community area should not only show messages, but have an activity stream across all media types. You should be able to filter by team and (un)select specific section-updates (e.g. exclude Tasks) - ordered by chronological order, newest first, and show unread/read. Also think through comments and how that might means the content has to be re-arranged.
https://matrix-org.github.io/matrix-hookshot/latest/setup.html to use for our github
https://github.com/vector-im/chatterbox - an in-website chat-box linked to the support channel of the specific project room.
Just had a new message coming in while being in the room list, I got:
Exception has occurred.
FlutterError (setState() called after dispose(): _ChatScreenState#67a7b(lifecycle state: defunct, not mounted)
This error happens if you call setState() on a State object for a widget that no longer appears in the widget tree (e.g., whose parent widget no longer includes the widget in its build). This error can occur when code calls setState() from a timer or an animation callback.
The preferred solution is to cancel the timer or stop listening to the animation in the dispose() callback. Another solution is to check the "mounted" property of this object before calling setState() to ensure the object is still in the tree.
This error might indicate a memory leak if setState() is being called because another object is retaining a reference to this State object after it has been removed from the tree. To avoid memory leaks, consider breaking the reference to this object during dispose().)
at
void _updateState() async {
await _stream!.next();
var newEvent = await widget.room.latestMessage();
final user = types.User(
id: newEvent.sender(),
);
if (newEvent.sender() != _user.id) {
final textMessage = types.TextMessage(
id: newEvent.eventId(),
author: user,
text: newEvent.body(),
);
setState(() {
_messages.insert(0, textMessage);
});
}
}
in chatscreenstate
We want to start with a simple ToDo-List/Task-Manager in the App. Feature brain-dump and moodboard: https://miro.com/app/board/uXjVOHP0484=/?invite_link_id=954661261852
We need to apply state management technique to handle overall state of the application. And for that we'll use BloC pattern for screens.
subtitle: FutureBuilder<RoomMessage>(
future: room.latestMessage(),
builder: (BuildContext context, snapshot) {
if (snapshot.hasData) {
return Container(
margin: const EdgeInsets.only(top: 10),
child: Text(
'${snapshot.requireData.sender}',
style: GoogleFonts.montserrat(
fontSize: 12,
color: Colors.white,
),
),
);
} else {
return Container();
}
},
),
Restarted application in 2,359ms.
I/flutter (28507): Restored [Instance of 'Client']: true
V/AudioManager(28507): playSoundEffect effectType: 0
V/AudioManager(28507): querySoundEffectsEnabled...
════════ Exception caught by widgets library ═══════════════════════════════════
The following ArgumentError was thrown building ChatListItem(dirty):
Invalid argument(s): Failed to lookup symbol '__Room_latest_message': undefined symbol: __Room_latest_message
The relevant error-causing widget was
ChatListItem
When the exception was thrown, this was the stack
#0 DynamicLibrary.lookup (dart:ffi-patch/ffi_dynamic_library_patch.dart:34:70)
#1 Api._roomLatestMessagePtr
#2 Api._roomLatestMessagePtr (package:effektio_flutter_sdk/effektio_flutter_sdk_ffi.dart)
#3 Api._roomLatestMessage
#4 Api._roomLatestMessage (package:effektio_flutter_sdk/effektio_flutter_sdk_ffi.dart)
#5 Room.latestMessage
#6 ChatListItem.build
#7 StatelessElement.build
#8 ComponentElement.performRebuild
#9 Element.rebuild
#10 ComponentElement._firstBuild
#11 ComponentElement.mount
#12 Element.inflateWidget
#13 MultiChildRenderObjectElement.inflateWidget
#14 MultiChildRenderObjectElement.mount
... Normal element mounting (33 frames)
#47 Element.inflateWidget
#48 Element.updateChild
#49 SliverMultiBoxAdaptorElement.updateChild
#50 SliverMultiBoxAdaptorElement.createChild.<anonymous closure>
#51 BuildOwner.buildScope
#52 SliverMultiBoxAdaptorElement.createChild
#53 RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure>
#54 RenderObject.invokeLayoutCallback.<anonymous closure>
#55 PipelineOwner._enableMutationsToDirtySubtrees
#56 RenderObject.invokeLayoutCallback
#57 RenderSliverMultiBoxAdaptor._createOrObtainChild
#58 RenderSliverMultiBoxAdaptor.addInitialChild
#59 RenderSliverList.performLayout
#60 RenderObject.layout
#61 RenderSliverEdgeInsetsPadding.performLayout
#62 RenderSliverPadding.performLayout
#63 RenderObject.layout
#64 RenderViewportBase.layoutChildSequence
#65 RenderShrinkWrappingViewport._attemptLayout
#66 RenderShrinkWrappingViewport.performLayout
#67 RenderObject.layout
#68 RenderProxyBoxMixin.performLayout
#69 RenderObject.layout
#70 RenderProxyBoxMixin.performLayout
#71 RenderObject.layout
#72 RenderProxyBoxMixin.performLayout
#73 RenderObject.layout
#74 RenderProxyBoxMixin.performLayout
#75 RenderObject.layout
#76 RenderProxyBoxMixin.performLayout
#77 RenderObject.layout
#78 RenderProxyBoxMixin.performLayout
#79 RenderObject.layout
#80 RenderProxyBoxMixin.performLayout
#81 RenderObject.layout
#82 RenderProxyBoxMixin.performLayout
#83 RenderCustomPaint.performLayout
#84 RenderObject.layout
#85 RenderProxyBoxMixin.performLayout
#86 RenderObject.layout
#87 ChildLayoutHelper.layoutChild
#88 RenderFlex._computeSizes
#89 RenderFlex.performLayout
#90 RenderObject.layout
#91 MultiChildLayoutDelegate.layoutChild
#92 _ScaffoldLayout.performLayout
#93 MultiChildLayoutDelegate._callPerformLayout
#94 RenderCustomMultiChildLayoutBox.performLayout
#95 RenderObject.layout
#96 RenderProxyBoxMixin.performLayout
#97 RenderObject.layout
#98 RenderProxyBoxMixin.performLayout
#99 _RenderCustomClip.performLayout
#100 RenderObject.layout
#101 MultiChildLayoutDelegate.layoutChild
#102 _ScaffoldLayout.performLayout
#103 MultiChildLayoutDelegate._callPerformLayout
#104 RenderCustomMultiChildLayoutBox.performLayout
#105 RenderObject._layoutWithoutResize
#106 PipelineOwner.flushLayout
#107 RendererBinding.drawFrame
#108 WidgetsBinding.drawFrame
#109 RendererBinding._handlePersistentFrameCallback
#110 SchedulerBinding._invokeFrameCallback
#111 SchedulerBinding.handleDrawFrame
#112 SchedulerBinding._handleDrawFrame
#116 _invoke (dart:ui/hooks.dart:151:10)
#117 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:308:5)
#118 _drawFrame (dart:ui/hooks.dart:115:31)
(elided 3 frames from dart:async)
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
Invalid argument(s): Failed to lookup symbol '__Room_latest_message': undefined symbol: __Room_latest_message
The relevant error-causing widget was
ChatListItem
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
Invalid argument(s): Failed to lookup symbol '__Room_latest_message': undefined symbol: __Room_latest_message
The relevant error-causing widget was
ChatListItem
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
Invalid argument(s): Failed to lookup symbol '__Room_latest_message': undefined symbol: __Room_latest_message
The relevant error-causing widget was
ChatListItem
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
Invalid argument(s): Failed to lookup symbol '__Room_latest_message': undefined symbol: __Room_latest_message
The relevant error-causing widget was
ChatListItem
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
Invalid argument(s): Failed to lookup symbol '__Room_latest_message': undefined symbol: __Room_latest_message
The relevant error-causing widget was
ChatListItem
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
A RenderFlex overflowed by 599417 pixels on the bottom.
The relevant error-causing widget was
Column
════════════════════════════════════════════════════════════════════════════════
E/flutter (28507): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: No avatar
E/flutter (28507):
I/chatty (28507): uid=10173(com.example.effektio) 1.ui identical 1 line
E/flutter (28507): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: No avatar
E/flutter (28507):
E/flutter (28507): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: No avatar
E/flutter (28507):
Occuring in latest commit in chat-functionality branch. It loads latest messages for the first time, but when the following function invokes from
Future<List<types.Message>> getMessages(
TimelineStream stream,
int count,
) async {
List<types.Message> _messages = [];
var messages = await stream.paginateBackwards(count);
for (RoomMessage message in messages) {
types.TextMessage m = types.TextMessage(
id: message.eventId(),
author: types.User(id: message.sender()),
text: message.body(),
);
_messages.add(m);
}
return _messages;
}
It returns with following logs:
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
W/org.effektio(23686): matrix_sdk_sled::state_store: Drop unexpected timeline batch for !wsXzAJBBBZsjqqocJG:effektio.org
Calling is being done here during initState()
void _getMessages() async {
setState(() {
isLoading = true;
});
var stream = await getTimeline(widget.room);
List<types.Message> messages = await getMessages(stream, 10);
setState(() {
_messages = messages;
isLoading = false;
});
}
building and linking the iOS lib seems to work, however, when running it after trying to login it freezes and we can see an error message on the console saying that it can't link to the allocate
function.
Build fail on emulators like Pixel 3a API 28 x86, Pixel 3a API 30 x86, but works on the emulator with Pixel 4 API 32 x86_64
It displayed the following message and finally lost connection to the device.
This is the full terminal message.
terminal message.txt
For the early launch we want token-based registration with effektio: next to the default information, you need to provide a unique access token in order to create a new account.
Let's make sure we have localization set up using https://docs.flutter.dev/development/accessibility-and-localization/internationalization .
Custom reusable widget for avatar displaying needs to be implemented.
we are already enforcing cargo fmt and clippy on the native side, for all (non-generated) dart/flutter we should enforce text formatting standards and lints as well. Specifically that means:
editorconf
for rust, toml and dart files in the root of the project--output show --set-exit-if-changed
)On the rust side, we need some additional APIs for sending image or file messages in conversation.
there is still plenty of old cruft in the SDK-plugin. Namely the ffigen
in there, the binding.h
-copy in the iOS and probably the different non-dart-subfolders are not necessary if we implemented https://docs.flutter.dev/development/packages-and-plugins/developing-packages#dart-only-platform-implementations properly.
the backend needs to use labels to fetch latest news on startup.
doing cargo make android
, comes back with:
Compiling olm-sys v1.3.1
error: failed to run custom build command for `olm-sys v1.3.1`
Caused by:
process didn't exit successfully: `/home/ben/Dev/effektio/effektio/target/debug/build/olm-sys-610c7a50f85f42f4/build-script-build` (exit status: 101)
--- stderr
thread 'main' panicked at 'please set the ANDROID_NDK environment variable to your Android NDK instalation', /home/ben/.cargo/registry/src/github.com-1ecc6299db9ec823/olm-sys-1.3.1/build.rs:74:13
stack backtrace:
0: 0x5654248201ac - std::backtrace_rs::backtrace::libunwind::trace::hd70f18a67bf1064d
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
1: 0x5654248201ac - std::backtrace_rs::backtrace::trace_unsynchronized::hed700f39aaa9560e
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x5654248201ac - std::sys_common::backtrace::_print_fmt::h05ffc8c800d3fd6e
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/sys_common/backtrace.rs:66:5
3: 0x5654248201ac - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc3335dc9ac9ea141
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/sys_common/backtrace.rs:45:22
4: 0x5654248434dc - core::fmt::write::h8ba7e47d56fb9287
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/core/src/fmt/mod.rs:1190:17
5: 0x56542481b7e8 - std::io::Write::write_fmt::hcc4602e4a7d8cb4e
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/io/mod.rs:1657:15
6: 0x565424822467 - std::sys_common::backtrace::_print::hfefb27db9027fc13
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/sys_common/backtrace.rs:48:5
7: 0x565424822467 - std::sys_common::backtrace::print::h3b5c5f5af201c47a
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/sys_common/backtrace.rs:35:9
8: 0x565424822467 - std::panicking::default_hook::{{closure}}::h9364b8e096329e42
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:295:22
9: 0x56542482211f - std::panicking::default_hook::hbb3fd2f25c08d7b9
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:314:9
10: 0x565424822bbb - std::panicking::rust_panic_with_hook::hb8806bff47a676e3
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:698:17
11: 0x5654247e90b8 - std::panicking::begin_panic::{{closure}}::h07522c056d581f2e
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:617:9
12: 0x5654247edcd9 - std::sys_common::backtrace::__rust_end_short_backtrace::ha0a40e4c96e98cfa
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/sys_common/backtrace.rs:138:18
13: 0x5654247e904c - std::panicking::begin_panic::h6de11e247ba1a76f
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:616:12
14: 0x56542478ae75 - build_script_build::native_build::heea2a181a43f53eb
at /home/ben/.cargo/registry/src/github.com-1ecc6299db9ec823/olm-sys-1.3.1/build.rs:74:13
15: 0x56542478aa44 - build_script_build::main::h2f539368e30d2420
at /home/ben/.cargo/registry/src/github.com-1ecc6299db9ec823/olm-sys-1.3.1/build.rs:47:9
16: 0x565424790e7b - core::ops::function::FnOnce::call_once::hff972161059d8b9f
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/core/src/ops/function.rs:227:5
17: 0x56542478d95e - std::sys_common::backtrace::__rust_begin_short_backtrace::hfe6f0b542aa24f4d
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/sys_common/backtrace.rs:122:18
18: 0x56542478d641 - std::rt::lang_start::{{closure}}::h2b1e1751fbbac1c3
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/rt.rs:145:18
19: 0x56542481f861 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h40514f9cff43fc7b
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/core/src/ops/function.rs:259:13
20: 0x56542481f861 - std::panicking::try::do_call::h13c18fb0bf21b1ad
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:492:40
21: 0x56542481f861 - std::panicking::try::hc29ace249b5056de
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:456:19
22: 0x56542481f861 - std::panic::catch_unwind::h5fecb9a3411a9c08
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panic.rs:137:14
23: 0x56542481f861 - std::rt::lang_start_internal::{{closure}}::hde8de41944754fda
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/rt.rs:128:48
24: 0x56542481f861 - std::panicking::try::do_call::h0fdf638f6d2f3c6e
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:492:40
25: 0x56542481f861 - std::panicking::try::h9c125cf762128efa
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panicking.rs:456:19
26: 0x56542481f861 - std::panic::catch_unwind::hacc18cc560a63b80
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/panic.rs:137:14
27: 0x56542481f861 - std::rt::lang_start_internal::h649a40dabd53a16b
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/rt.rs:128:20
28: 0x56542478d610 - std::rt::lang_start::h89418f3ee4ee3695
at /rustc/68369a041cea809a87e5bd80701da90e0e0a4799/library/std/src/rt.rs:144:17
29: 0x56542478c10c - main
30: 0x7f0585f76310 - __libc_start_call_main
31: 0x7f0585f763c1 - __libc_start_main@GLIBC_2.2.5
32: 0x565424786c45 - _start
33: 0x0 - <unknown>
warning: build failed, waiting for other jobs to finish...
error: build failed
[2022-03-10T15:13:43Z INFO cargo_ndk::cli] If the build failed due to a missing target, you can run this command:
[2022-03-10T15:13:43Z INFO cargo_ndk::cli]
[2022-03-10T15:13:43Z INFO cargo_ndk::cli] rustup target install x86_64-linux-android
[cargo-make][1] ERROR - Error while executing command, exit code: 101
[cargo-make][1] WARN - Build Failed.
[cargo-make] ERROR - Error while running duckscript: Source: Unknown Line: 4 - Error while executing command, exit code: 1
[cargo-make] WARN - Build Failed.
We are running an end-2-end encrypted system. In order to allow for multiple devices to login and join the same room, matrix provides a process called "cross signing", by which you authenticate the new device using an old login and after that share the secret keys between them. We want that in effektio to allow e2ee multi-device access to the same account.
Example in rust: https://github.com/matrix-org/matrix-rust-sdk/blob/main/crates/matrix-sdk/examples/cross_signing_bootstrap.rs
There is two main ways this can work: showing and sharing a qrcode or by exchanging a set of emoji and have both sides confirm they see the same emoji - for now, we probably want to use the latter.
The system is a bit complex, I recommend trying it out in element by just opening a new session (e.g. opening a new private-browsing window) and signing in with the current credentials while still having the first login open. it will show a pop on the top left and you can follow the process there. It isn't the best designed process, the UX lacks a lot to be desired, but you get an idea how the general flow goes and what we need to design for.
Since #21, we are using Google Fonts. But the set up is incomplete:
For the last few commits on main
(and thus also on recent PRs), the Android CI job fails with a "no space left on device" for the flutter build apk
-job. We need to fix that.
We want e2e testing of the most important flows of the app. For that we need a CI that does:
As we know the source code of application is steadily growing, we don't want to explicitly define colors and styles in every widget. Rather have a single dart file where we can place custom ThemeData for the application and do appropriate changes there. Also this will be needed in setting the dark/light tone of application.
Relevant docs
ThemeData Class
Theming a Flutter App
Relates to PR #60
Currently the chat pagination is behaving unexpectedly i.e. works fine during first login and then creates issues. These issues are:
Will do more tests later to get more info about this bug.
Steps to reproduce
navigating back and forth from the chat screen into the list view and back causes the app to crash under weird circumstances.
Traceback:
✓ Built build/app/outputs/flutter-apk/app-debug.apk.
Connecting to VM Service at ws://127.0.0.1:33471/UwOq2w_ChW4=/ws
I/flutter ( 6675): Restored [Instance of 'Client']: true
D/EGL_emulation( 6675): app_time_stats: avg=57.02ms min=13.37ms max=720.67ms count=27
D/EGL_emulation( 6675): app_time_stats: avg=1570.17ms min=11.44ms max=6241.33ms count=4
D/EGL_emulation( 6675): app_time_stats: avg=309.05ms min=9.15ms max=2834.30ms count=10
D/EGL_emulation( 6675): app_time_stats: avg=226.23ms min=8.86ms max=2708.56ms count=14
D/EGL_emulation( 6675): app_time_stats: avg=295.85ms min=6.13ms max=3233.88ms count=12
D/EGL_emulation( 6675): app_time_stats: avg=99.07ms min=8.81ms max=1155.05ms count=14
D/EGL_emulation( 6675): app_time_stats: avg=600.24ms min=6.49ms max=8716.17ms count=15
D/EGL_emulation( 6675): app_time_stats: avg=787.09ms min=8.51ms max=11567.84ms count=15
D/EGL_emulation( 6675): app_time_stats: avg=30.68ms min=8.15ms max=262.13ms count=31
D/EGL_emulation( 6675): app_time_stats: avg=447.87ms min=7.39ms max=5231.16ms count=12
D/EGL_emulation( 6675): app_time_stats: avg=2189.75ms min=2189.75ms max=2189.75ms count=1
D/EGL_emulation( 6675): app_time_stats: avg=84.92ms min=8.46ms max=1160.21ms count=17
D/EGL_emulation( 6675): app_time_stats: avg=30.79ms min=7.84ms max=297.16ms count=31
D/EGL_emulation( 6675): app_time_stats: avg=86.63ms min=7.90ms max=524.43ms count=13
D/EGL_emulation( 6675): app_time_stats: avg=31.93ms min=7.20ms max=232.66ms count=27
D/EGL_emulation( 6675): app_time_stats: avg=25.72ms min=7.23ms max=95.74ms count=34
D/EGL_emulation( 6675): app_time_stats: avg=23.55ms min=7.18ms max=62.83ms count=36
D/EGL_emulation( 6675): app_time_stats: avg=17.81ms min=7.78ms max=50.46ms count=40
D/EGL_emulation( 6675): app_time_stats: avg=136.76ms min=7.85ms max=3915.54ms count=33
D/EGL_emulation( 6675): app_time_stats: avg=12022.60ms min=9.83ms max=168036.64ms count=14
E/FlutterJNI( 6675): Failed to decode image
E/FlutterJNI( 6675): android.graphics.ImageDecoder$DecodeException: Failed to create image decoder with message 'unimplemented'Input contained an error.
E/FlutterJNI( 6675): at android.graphics.ImageDecoder.nCreate(Native Method)
E/FlutterJNI( 6675): at android.graphics.ImageDecoder.access$200(ImageDecoder.java:172)
E/FlutterJNI( 6675): at android.graphics.ImageDecoder$ByteBufferSource.createImageDecoder(ImageDecoder.java:242)
E/FlutterJNI( 6675): at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1870)
E/FlutterJNI( 6675): at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1863)
E/FlutterJNI( 6675): at io.flutter.embedding.engine.FlutterJNI.decodeImage(FlutterJNI.java:514)
════════ Exception caught by image resource service ════════════════════════════
The following _Exception was thrown resolving an image codec:
Exception: Invalid image data
When the exception was thrown, this was the stack
#0 _futurize (dart:ui/painting.dart:5564:5)
#1 ImageDescriptor.encoded (dart:ui/painting.dart:5432:12)
#2 instantiateImageCodec (dart:ui/painting.dart:2052:60)
<asynchronous suspension>
════════════════════════════════════════════════════════════════════════════════
D/EGL_emulation( 6675): app_time_stats: avg=1786.28ms min=9.56ms max=10368.99ms count=6
D/EGL_emulation( 6675): app_time_stats: avg=1847.86ms min=9.66ms max=16464.18ms count=9
D/EGL_emulation( 6675): app_time_stats: avg=55.17ms min=8.94ms max=799.60ms count=19
D/EGL_emulation( 6675): app_time_stats: avg=14.11ms min=8.79ms max=31.65ms count=31
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F....ID 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/EGL_emulation( 6675): app_time_stats: avg=130793.93ms min=132.34ms max=261455.52ms count=2
I/AssistStructure( 6675): Flattened final assist data: 444 bytes, containing 1 windows, 3 views
D/EGL_emulation( 6675): app_time_stats: avg=19.63ms min=6.97ms max=117.89ms count=27
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=1271.70ms min=1271.70ms max=1271.70ms count=1
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=33.22ms min=11.12ms max=205.56ms count=23
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=32.19ms min=5.29ms max=102.06ms count=19
D/EGL_emulation( 6675): app_time_stats: avg=338.25ms min=107.35ms max=683.70ms count=3
D/EGL_emulation( 6675): app_time_stats: avg=82.78ms min=8.13ms max=1104.63ms count=18
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
I/AssistStructure( 6675): Flattened final assist data: 444 bytes, containing 1 windows, 3 views
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=2292.92ms min=2292.92ms max=2292.92ms count=1
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=46.39ms min=7.20ms max=162.73ms count=19
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=90.32ms min=7.89ms max=461.56ms count=10
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=280.04ms min=104.38ms max=487.39ms count=5
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=180.34ms min=80.42ms max=451.62ms count=6
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=123.89ms min=60.01ms max=251.44ms count=9
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/InputMethodManager( 6675): showSoftInput() view=io.flutter.embedding.android.FlutterView{e48461e VFE...... .F...... 0,0-1080,2236 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
D/InsetsController( 6675): show(ime(), fromIme=true)
D/EGL_emulation( 6675): app_time_stats: avg=4894.82ms min=55.89ms max=38171.27ms count=8
D/EGL_emulation( 6675): app_time_stats: avg=1706.28ms min=1706.28ms max=1706.28ms count=1
D/EGL_emulation( 6675): app_time_stats: avg=4638.03ms min=6.23ms max=46286.45ms count=10
F/libc ( 6675): Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7a1084fee000 in tid 6698 (1.ui), pid 6675 (rg.effektio.app)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'google/sdk_gphone64_x86_64/emulator64_x86_64_arm64:12/S2B2.211203.006/8015633:user/release-keys'
Revision: '0'
ABI: 'x86_64'
Timestamp: 2022-05-04 17:39:22.501526937+0200
Process uptime: 0s
Cmdline: org.effektio.app
pid: 6675, tid: 6698, name: 1.ui >>> org.effektio.app <<<
uid: 10149
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7a1084fee000
rax 00007a0c08b65040 rbx 00007a0c08b774c0 rcx 00007a0c09d271c9 rdx 00000000000124b2
r8 00007a0c08b66500 r9 00000000000004c0 r10 0000000001000007 r11 0000000000000000
r12 00007a0ef14514f8 r13 00000000000124b2 r14 00007a0ef1451508 r15 00007a0ef1451518
rdi 00007a0c08b65040 rsi 000000047c487af0
rbp 00007a1084fecb30 rsp 00007a0d74ffe9a0 rip 00007a107c2afc2f
backtrace:
#00 pc 0000000000051c2f /apex/com.android.runtime/lib64/bionic/libc.so (memmove+367) (BuildId: 0bac1e57b41382f7871677ca544454ea)
#01 pc 0000000008b6503f <anonymous:7a0c00000000>
#02 pc 0000000001a1ff6e /data/app/~~BaWatCWhlC3cj3EeXDaTVA==/org.effektio.app-1FevdO1ypPSPvoPTGxntjQ==/lib/x86_64/libflutter.so (BuildId: 6758eed73f460bc00860bc5a5e0645d7194f55d9)
#03 pc 00000000000ebaa7 [anon:stack_and_tls:6698]
#04 pc 0000000001a9e700 /data/app/~~BaWatCWhlC3cj3EeXDaTVA==/org.effektio.app-1FevdO1ypPSPvoPTGxntjQ==/lib/x86_64/libflutter.so (BuildId: 6758eed73f460bc00860bc5a5e0645d7194f55d9)
#05 pc 0000000000010080 <anonymous:7a0c00000000>
Lost connection to device.
Exited (sigterm)
Time package should be used instead using custom calculation of recieving timestamp.
since #21 we are greeted by the login screen, but before, we had the facilities to have the user logged in via a guest account. We should get that back into the app.
allow easy double tap to like a news item.
we currently have a few icons in the app - those as well as the logo need to be made available as SVGs for reusing in other areas.
For testing our components, ideally the entire UI, we want an integration testing system on our CI/CD for the flutter Android App.
The steps are:
Are you able to do this? And want to earn some money while contributing here on Github? We have a bounty open for this issue:
Flutter and rust should allows us to easily also support desktop implementations of the app. This is a tracking ticket for it.
Starting the app, but also flipping through the news I see errors in the console:
════════ Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.
The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type StackParentData.
Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a Stack widget.
The ownership chain for the RenderObject that received the incompatible parent data was:
ConstrainedBox ← Container ← Expanded ← Stack ← RepaintBoundary ← IndexedSemantics ← NotificationListener<KeepAliveNotification> ← KeepAlive ← AutomaticKeepAlive ← KeyedSubtree ← ⋯
When the exception was thrown, this was the stack
#0 RenderObjectElement._updateParentData.<anonymous closure>
package:flutter/…/widgets/framework.dart:5922
#1 RenderObjectElement._updateParentData
package:flutter/…/widgets/framework.dart:5939
#2 RenderObjectElement.attachRenderObject
package:flutter/…/widgets/framework.dart:5961
#3 RenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5635
#4 SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:6283
... Normal element mounting (13 frames)
#17 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3790
#18 MultiChildRenderObjectElement.inflateWidget
package:flutter/…/widgets/framework.dart:6422
#19 MultiChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:6433
... Normal element mounting (33 frames)
#52 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3790
#53 Element.updateChild
package:flutter/…/widgets/framework.dart:3540
[ .... ]
#190 RenderObject.layout
package:flutter/…/rendering/object.dart:1887
#191 RenderProxyBoxMixin.performLayout
package:flutter/…/rendering/proxy_box.dart:116
#192 RenderObject.layout
package:flutter/…/rendering/object.dart:1887
#193 RenderView.performLayout
package:flutter/…/rendering/view.dart:165
#194 RenderObject._layoutWithoutResize
package:flutter/…/rendering/object.dart:1731
#195 PipelineOwner.flushLayout
package:flutter/…/rendering/object.dart:887
#196 RendererBinding.drawFrame
package:flutter/…/rendering/binding.dart:497
#197 WidgetsBinding.drawFrame
package:flutter/…/widgets/binding.dart:883
#198 RendererBinding._handlePersistentFrameCallback
package:flutter/…/rendering/binding.dart:363
#199 SchedulerBinding._invokeFrameCallback
package:flutter/…/scheduler/binding.dart:1144
#200 SchedulerBinding.handleDrawFrame
package:flutter/…/scheduler/binding.dart:1081
#201 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
package:flutter/…/scheduler/binding.dart:862
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
I[/xample.effekti]()(27059): NativeAlloc concurrent copying GC freed 5682(622KB) AllocSpace objects, 5(100KB) LOS objects, 49% free, 2419KB[/4838KB](), paused 2.584ms,64us total 148.210ms
I[/flutter]() (27059): Restored [Instance of 'Client']: true
I[/OpenGLRenderer]()(27059): Davey! duration=832ms; Flags=1, FrameTimelineVsyncId=27440, IntendedVsync=338533266383229, Vsync=338533266383229, InputEventId=0, HandleInputStart=338533275670950, AnimationStart=338533275696738, PerformTraversalsStart=338533276223940, DrawStart=338533299307182, FrameDeadline=338533283049895, FrameInterval=338533275635996, FrameStartTime=16666666, SyncQueued=338533322302222, SyncStart=338533340527237, IssueDrawCommandsStart=338533346793654, SwapBuffers=338533439903287, FrameCompleted=338534117291624, DequeueBufferDuration=376946021, QueueBufferDuration=4071717, GpuCompleted=338533738227851, SwapBuffersCompleted=338534117291624, DisplayPresentTime=-7794731593047232955,
D[/EGL_emulation]()(27059): app_time_stats: avg=738.51ms min=282.68ms max=1265.59ms count=3
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
D[/EGL_emulation]()(27059): app_time_stats: avg=21908.68ms min=168.41ms max=65384.11ms count=3
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
D[/EGL_emulation]()(27059): app_time_stats: avg=26.91ms min=11.44ms max=70.47ms count=32
D[/EGL_emulation]()(27059): app_time_stats: avg=31.29ms min=12.31ms max=53.77ms count=30
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
D[/EGL_emulation]()(27059): app_time_stats: avg=25.99ms min=11.23ms max=83.82ms count=33
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
I[/xample.effekti]()(27059): NativeAlloc concurrent copying GC freed 5682(622KB) AllocSpace objects, 5(100KB) LOS objects, 49% free, 2419KB[/4838KB](), paused 2.584ms,64us total 148.210ms
I[/flutter]() (27059): Restored [Instance of 'Client']: true
I[/OpenGLRenderer]()(27059): Davey! duration=832ms; Flags=1, FrameTimelineVsyncId=27440, IntendedVsync=338533266383229, Vsync=338533266383229, InputEventId=0, HandleInputStart=338533275670950, AnimationStart=338533275696738, PerformTraversalsStart=338533276223940, DrawStart=338533299307182, FrameDeadline=338533283049895, FrameInterval=338533275635996, FrameStartTime=16666666, SyncQueued=338533322302222, SyncStart=338533340527237, IssueDrawCommandsStart=338533346793654, SwapBuffers=338533439903287, FrameCompleted=338534117291624, DequeueBufferDuration=376946021, QueueBufferDuration=4071717, GpuCompleted=338533738227851, SwapBuffersCompleted=338534117291624, DisplayPresentTime=-7794731593047232955,
D[/EGL_emulation]()(27059): app_time_stats: avg=738.51ms min=282.68ms max=1265.59ms count=3
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
D[/EGL_emulation]()(27059): app_time_stats: avg=21908.68ms min=168.41ms max=65384.11ms count=3
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
D[/EGL_emulation]()(27059): app_time_stats: avg=26.91ms min=11.44ms max=70.47ms count=32
D[/EGL_emulation]()(27059): app_time_stats: avg=31.29ms min=12.31ms max=53.77ms count=30
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
D[/EGL_emulation]()(27059): app_time_stats: avg=25.99ms min=11.23ms max=83.82ms count=33
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.