Git Product home page Git Product logo

acterglobal / a3 Goto Github PK

View Code? Open in Web Editor NEW
66.0 66.0 17.0 146.3 MB

Community Communication and casual social organising platform (App)

Home Page: http://acter.global/

License: Other

Kotlin 0.05% Swift 0.78% Objective-C 0.02% Dart 72.17% CMake 0.77% C++ 1.05% C 0.24% HTML 0.12% Ruby 0.17% Rust 22.44% RenderScript 2.07% Shell 0.12% Dockerfile 0.01%
flutter matrix-org organizing social-network

a3's People

Contributors

4dnlkrgr avatar acter-sari avatar amokfa avatar bitfriend avatar bmcpt avatar dependabot[bot] avatar emilvincentz avatar gnunicorn avatar gtalha07 avatar hatimwayne avatar inderjeet-developer7 avatar kokodavid avatar kumarpalsinh25 avatar sachintha-s 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

Watchers

 avatar  avatar  avatar

a3's Issues

Chat Localization

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.

Text-Input box too large

see at the bottom: the input box is three times as large as the actual text. This needs to be trimmed down and made a bit cleaner.

Screenshot_1651678725

Password manager/Vault section

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.

Moodboard

image image image image image image

use MaterialTheme

since #21 we have replaced the MaterialTheme with specific colors. We should switch back to the MaterialTheme.

Login Button inaccessible on smaller screens

Scrolling appears disabled on the sidebar, so the login button is unreachable on smaller screens:

Screenshot_20220424-202019

There is two parts to fixing this:

  1. The sidebar menu should be scrollable (it could always be longer than the screen)
  2. When we are a guest, the top shouldn't have the dedicated user-section but instead login & sign up buttons should be present on the top of the sidebar menu.

Cross-Device-Signing

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.

Acitivty Stream

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.

Moodboard:

image image image
image
image

New incoming message in room out of scope leads to traceback

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

State Management of Application

We need to apply state management technique to handle overall state of the application. And for that we'll use BloC pattern for screens.

Invalid argument(s): Failed to lookup symbol '__Room_latest_message': undefined symbol: __Room_latest_message

Coming from ChatListItem in ChatOverview.dart

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();
          }
        },
      ),

Exceptions coming

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):

Can't be able to fetch messages/latest messages in chat

Occuring in latest commit in chat-functionality branch. It loads latest messages for the first time, but when the following function invokes from

client.dart

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

ChatScreen.dart

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;
    });
  }

Steps to reproduce:

  1. Navigate to ChatScreen while being logged in

Fix iOS build problem

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 some emulators.

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.
Screenshot 2022-04-24 165438

This is the full terminal message.
terminal message.txt

Enforce dart format

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:

  • an editorconf for rust, toml and dart files in the root of the project
  • a github workflow for dart format (--output show --set-exit-if-changed)
  • a github workflow for dart fix (or a similar linter)

Fetching News

the backend needs to use labels to fetch latest news on startup.

Rust build fails since latest PR

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.

Cross-Signing

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

Design flow needed

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.

Android CI: out of space

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.

Add e2e testing infrastructure

We want e2e testing of the most important flows of the app. For that we need a CI that does:

  • spawn a local matrix-server (dendrite? synapse?)
  • have it pre-fill content
  • add e2e flutter testing infrastructure
  • add tests to:
    • ensure guest access works
    • guests can scroll through the news
    • guests are alerted to login once they want to interact
    • if they log in, their reaction is recorded
    • users can register

Theming and colors of Application

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

Chat Pagination

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:

  1. Scrolling doesn't work at all in portrait mode.
  2. While changing device orientation to landscape, scrolling does work as we can see loading indicator but doesn't load messages.

Will do more tests later to get more info about this bug.

Steps to reproduce

  1. Log in the app.
  2. Navigate to chat list and then conversation again.
  3. Go back to chat list.
  4. Navigate to conversation room again.
  5. Can reload the app as well for effect.

Chat navigation crashes

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)

startup should show us news

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.

Logo and Icons as SVG

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.

Chat-icon faulty zoom level

While the Chat icon is correct in the list view (see OpenTechSchool)
Screenshot_1651678482

It is not the right zoom level in the chat windows (see top right):

Screenshot_1651678475

hamburger icon has too low resolution

On high res screens, the hamburger icon appears pixelated (while the other icons are sharp as wanted):

Uploading Screenshot_20220424-202003.png…

We must replace the current asset with a high res - ideally SVG - version.

Tracking for integration testing

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:

  • basic docker compose
  • CI job with android emulator
  • generate example data ( via complement?] -- we currently have mock data
  • integration tests run on CI on android emulator

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:

Bountysource

add native Desktop support

Flutter and rust should allows us to easily also support desktop implementations of the app. This is a tracking ticket for it.

  • add support to build iOS App
    • rust side
    • flutter side
  • add support to build Windows App
    • rust side
    • flutter side
  • add support to build Linux App
    • rust side
    • flutter side
  • add CI to build
    • Linux
    • Windows
    • MacOsX
  • add Deployment to generate binaries for:
    • Linux
    • Windows
    • MacOsX

News-Sektion: Incorrect use of ParentDataWidget.

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.
════════════════════════════════════════════════════════════════════════════════

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.