Code Monkey home page Code Monkey logo

memo's Introduction

English | Portuguese

Memo

Memo Icon

Release

Monorepo for Memo.

Memo is an open-source, programming-oriented spaced repetition software (SRS) written in Flutter.

As of now, this project is designed to only output builds for Android and iOS. Even though, given the current stability of Flutter SDK for desktop (Windows, Linux and macOS) and web, there is a high probability that this project will eventually support builds for all platforms.


This README is meant to guide how this project is structured and should serve as a guide to help the project scale with the current and future requirements. Think of it as a flexible set of rules that guides the project's decisions. While they can (and probably will) change over time, discussions must be raised to trigger such changes: this means that we will think/question ourselves before taking an action that breaks any rational decision taken here. It is also effective to guide PR discussions.

Setup

If you have no idea how to install Flutter and run it locally, check this Get started.

If you have Flutter setup locally, on the project's root folder, install pubspec dependencies by running flutter pub get.

Firebase dependencies

Memo has Firebase dependencies that needs to be setup before running locally. More information on this in ARCHITECTURE#firebase.

Architecture

How this application works from inside and how it interacts with external dependencies - written in details in ARCHITECTURE.md.

Background

If you're interested in checking out an overview about how we dealt with this project's software process (inside our team), check out .process/ (sorry, for now only in ptBR).

Contributing & Good Practices

See CONTRIBUTING for details about how to contribute to the project.

License

Memo is published under BSD 3-Clause.

Sponsors

This project was built with the help of the sponsors below:

memo's People

Contributors

danieldecasttro avatar ggirotto avatar ishankdev avatar jonata97 avatar kovacbb avatar lucasbiancogs avatar lucasmontano avatar matuella avatar murilosandiego avatar olympusbot avatar raphaeloliveiramoura avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  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

memo's Issues

[Server support] - Prepare repository code restructure

Moves all files to a monorepo structure, which should be something like:

root
|_ flutter
  - architecture, respective readme, root for flutter project files.
|_ firebase
  - architecture, respective readme, root for firebase project files.
- Readmes, contributing, github, vscode, etc.

Sub-issue that relates to the Server support - #136.

Unaligned emoji unicode characters in the collection's execution terminal

Each difficulty (belonging to _TerminalActions widget) has its unicode character unaligned, possibly due to the actual height of that particular Text widget that is representing its unicode emoji.

Steps to Reproduce

  1. Open the app;
  2. Navigate to any collection and start executing it;
  3. Check out the actions and its unicode icons alignment.

Expected Result

Aligned unicode characters within each terminal action.

I think it gets even worse in the Android application.

SSs

Screen Shot 2021-07-06 at 11 53 18

Taken in iOS 14.2, iPhone SE 2nd generation (simulator).

Version: v0.1.0-rc2

Usage of Flutter Modular to deal with dependency injection, routing and auto-dispose

Usage of Flutter Modular in the project

In the Brazilian comunnity, Flutter Modular is one of the most used packages. This package show us an approach to modularize our code in a manner that code reutilization is the main focus. Also, the package has it's own abstraction of the original Navigator class, that don't need the actual context to work properly (this is very appropriated when we want to switch between pages using the app controller).

You can see the official docs here.

The usage is very simple: we have the main.dart file executing the runApp function, as expected. But, instead of passing a Stateless/Stateful MaterialApp widget, we just pass a AppModule widget.

image

In this project, I have two different flavors: production and development. Each flavor has it's own main.dart file, and that's why I'm passing a specific ServerConfiguration in the constructor of AppModule. This is not usual, but works great.

Then, the AppModule will look like this:

image

First, we have the binds. This is where we can register our dependencies, and also decide if we want a singleton or not, as well if the bind will be lazy or not.

image

The i() function is very helpful to get the dependencies in the class constructor, since we don't need to specify the exact instance of the class, or even the type. This process is automatic.

image

Then, we'll have the ChildModules. These modules are usually sections of the app. For example, we can have an authentication module, home module, cart module, etc... We'll define all the ChildModules in the routers of AppModule.

image

Finally, our app entry point will be the bootstrap widget from the AppModule. In this case, AppWidget.

image

Our ChildModule will look like this:

image

The bindings are similar to those defined in AppModule. The difference here is the scope: all the bindings defined in AppModule will remain until the app is closed. The bindings defined in any child module will only be used inside that module, and will be disposed when the module is closed (usually when the user is not accessing a page within that module). This give us a better overall performance by optimizing the used memory.

In order to access a binding, we use the Modular.get<T>() function.

image

Since we don't need a context to navigate between pages, is safe to use the controller for this:

image

We can pass strings into the route:

image

image

And we also can pass objects:

image

This was a brief explanation of the package and it's benefits. More details can be found in the internet, and also in the Brazilian community, as the package is very used.

[Server support] - Update client dependencies

To support the server, we must install all required dependencies, update required initializers and make sure that client's offline cache is setup correctly, as we want to allow offline usage of this application whenever possible - i.e. using the app for the first time while offline is an acceptable use-case, given that no cache is present, thus discovering collections shouldn't be available until the very first moment that a network connection is stablished.


Sub-issue that relates to the Server support - #136.

Problemas de desempenho no tablet A7 Samsung

Olá evidenciei um problema ao abrir o aplicativo, o mesmo demonstra perda de performance, somente na guia principal e logo após permanecer um tempo é fechado caso o usuário não realiza alguma ação.

Modelo do Tablet: Samsung Galaxy Tab A7 SM-T505N
Versão do aplicativo: 0.1.0 | 16 de julho 2021
Observações adicionais: Quando eu tento entrar em outra aba ele demora um pouco mas logo entra e o desempenho fica normal.

English Location is wrongly available in the App Store

Descreva o Bug/Describe the bug:

A user reported that we are showing English and Portuguese as available languages in the AppStore. That's currently not true and we should change it.

Passos para Reproduzir/Steps to Reproduce:

Access memo's page in the AppStore and scroll down.

Resultado Esperado/Expected Result:

Seeing just Portuguese

Resultado Obtido/Actual Result:

Portuguese and English

Screenshots:

image

Versão do app/App Version:

0.1.0

White screen when opening/loading the app

Descreva o Bug/Describe the bug:

There is a white page before displaying the SplashPage. If the white page takes too long (usually during the first application's initialization), the SplashPage doesn't even appear.

Possibly only iOS physical device, have to check if Android physical devices also have the same problem.

Have to check if the same occurs on emulators.

Passos para Reproduzir/Steps to Reproduce:

  1. Open the app.

Resultado Esperado/Expected Result:

Always displaying the SplashPage until the application is fully loaded.

Resultado Obtido/Actual Result:

White page appears before the SplashPage.

Versão do app/App Version:

0.1.0, iOS 14.6 iPhone 6s

Add non-identifiable usage metrics

We should be able to learn about the usage of this application through metrics that doesn't associate the identity of the users, meaning things like device usage, version rollout, average time on pages, session duration, bounce rate, etcetera.

Emojis showing up in the question screen

Descreva o Bug/Describe the bug:

It seems like sometimes the emojis would show up in the question screen, when it should only apear in the answer screen.

Passos para Reproduzir/Steps to Reproduce:

  1. Open the app.
  2. Go to some deck
  3. Tap "Estudar Agora"
  4. Tap "Ver Resposta"

It doesn't happen always. In fact, it only happend once to me.

Resultado Esperado/Expected Result:

I should see the answer to the question and the emojis.

Resultado Obtido/Actual Result:

I see another question and the emojis.

Screenshots:

image

Versão do app/App Version:

0.1.0

Adicionar suporte a outras linguagens

Apos checar uma review na Google Play com o comentário "Isn't the app in English?", eu vim estipular e discutir sobre essa funcionalidade.

Caso de Uso/Use Case:

Atualmente o aplicativo esta todo em Português, adicionar novas linguagens consequentemente, tornaria a aplicação mais acessível para outros públicos.

Proposta/Proposal:

Para tornar o aplicativo acessível seria necessário traduzir o aplicativo em um todo, memos e interface. Acredito que a comunidade pode ser de grande ajuda nesse processo, com pessoas contribuindo e ajudando nas traduções.

[Server support] - Job to run a database backup

Create a scheduled function to run (and store) a backup of all Firestore database, allowing rollbacks if critical issues arise.

This can be done by using the Firebase Functions capabilities, alongside the Admin SDK permissions, storing it properly in a private Firebase Storage folder.

Although, not quite sure how long the timeframe of this cron job should be.


Sub-issue that relates to the Server support - #136.

Layout break in `CollectionDetailsPage` when having executed Memos

Steps to reproduce:

  • Execute at least 1 Memo fro ma given collection;
  • Open the collection details page.

Stacktrace:

flutter:   size: Size(324.0, 47.6)
flutter:   direction: vertical
flutter:   mainAxisAlignment: start
flutter:   mainAxisSize: min
flutter:   crossAxisAlignment: stretch
flutter:   verticalDirection: down
flutter: ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
flutter: The following assertion was thrown during layout:
flutter: A RenderFlex overflowed by 29 pixels on the bottom.
flutter:
flutter: The relevant error-causing widget was:
flutter:   Column
flutter:
lib/…/theme/collection_card.dart:56
flutter:
flutter: To inspect this widget in Flutter DevTools, visit:
flutter: http://127.0.0.1:9100/#/inspector?uri=http%3A%2F%2F127.0.0.1%3A63724%2FC1EyCvuzJMk%3D%2F&inspectorRef=inspector-8
flutter:
flutter: The overflowing RenderFlex has an orientation of Axis.vertical.
flutter: The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
flutter: black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
flutter: Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
flutter: RenderFlex to fit within the available space instead of being sized to their natural size.
flutter: This is considered an error condition because it indicates that there is content that cannot be
flutter: seen. If the content is legitimately bigger than the available space, consider clipping it with a
flutter: ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex,
flutter: like a ListView.
flutter: The specific RenderFlex in question is: RenderFlex#ac9d0 relayoutBoundary=up1 OVERFLOWING:
flutter:   creator: Column ← Flexible ← Column ← Padding ← CustomPaint ← DecoratedBox ← Container ← Listener ←
flutter:     _GestureSemantics ← RawGestureDetector ← GestureDetector ← CollectionCard ← ⋯
flutter:   parentData: offset=Offset(0.0, 0.0); flex=1; fit=FlexFit.loose (can use size)
flutter:   constraints: BoxConstraints(w=335.3, 0.0<=h<=2.5)
flutter:   size: Size(335.3, 2.5)
flutter:   direction: vertical
flutter:   mainAxisAlignment: start
flutter:   mainAxisSize: min
flutter:   crossAxisAlignment: start
flutter:   textDirection: ltr
flutter:   verticalDirection: down
flutter: ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════

It doesn't show a visual inconsistency, although the layout error is thrown

Questões mais claras e objetivas

Achei um comentário no Google Play bem interessante, que é a questão das perguntas.

As perguntas serem mais objetivas ou ter algum texto padrão como "O quer é essa frase abaixo:" ou "O quer quer dizer ... ...." ficaria mais didático e melhor.

Pra mim mesmo apareceu apenas "GIT" ou um código do SHA1 e eu não entendi muito bem o que queria dizer. Saberia se fosse melhor formulado a pergunta.

Improves Workflows by reusing Composite Actions

Currently, most of the pull-requers workflow is copy-pasted from the release workflow. Github Actions has "composite actions", which let us reuse the workflow scripts but it currently has a limitations that makes unsustainable to use it as it is today

The main limitation that difficult our workflows today is that the composite actions doesn't support the use step, which unable us to reuse most part of the duplicate code between the worflows.

See more: actions/runner#646

Sem feedback tátil nas perguntas

Descreva o Bug/Describe the bug:
Sem feedback tátil nas perguntas
Passos para Reproduzir/Steps to Reproduce:

Exemplo/Example:

  1. Abra o app
  2. Entre em qualquer teste
  3. tente responder uma resposta

Resultado Esperado/Expected Result:
Clicar e aparecer alguma barra selecionável ou abrir botão de digitação
Resultado Obtido/Actual Result:
Não obtive feedback, somente quando revelei o projeto

Screenshots:
animation

Versão do app/App Version:
0.1.0

O aplicativo encerra ao tentar interagir na aba de coleções

Descreva o Bug/Describe the bug:
O aplicativo encerra ao tentar interagir na aba de coleções

Passos para Reproduzir/Steps to Reproduce:

  1. Abra o app
  2. Entre na tela Coleções
  3. Tente usar o scroll ou clicar em algum curso

Resultado Esperado/Expected Result:

Entrar em um curso ou rolar a página para ver mais cursos

Resultado Obtido/Actual Result:

Aplicativo fecha.

Screenshots:

VID_20210717_131944054

Versão do app/App Version:

App baixado da google play store na versão 0.1.0
Problema acontece em um Tablet Samsung Tab A - SM-T510
Versão do Android: 11

Adds missing UI/Widget tests

There are a significant amount of relevant widgets that weren't UI-tested (or Widget tested). The widget testing is relevant to maintain memo's code quality.

The list below is a summary of all these so-called relevant widgets (or widgets that are complex enough to justify its testing):

Pages and its sub-widgets

  • CollectionDetailsPage;
  • CollectionExecutionPage;
  • ExecutionTerminal;
  • CollectionsPage;
  • ProgressPage;
  • SettingsPage.

Widgets or components

  • CollectionCard;
  • LinkButton, ExternalLinkButton and ExternalLinkTextButton;
  • ResourcesList;
  • AnimatableLinearProgress and AnimatableCircularProgress.

Others

  • AppRoot;
  • scaffold_messenger.

[Server support] - Add Repository that abstracts authentication

As the server is introduced, we need to allow users to authenticate, so we can store each individual progress in Firestore.

Before implementing this, we need to have:

  • Decide if the application can be used anonymously while the user doesn't sign in. Answer: it won't allow anonymous users, due to not have to deal with local/cloud sync stuff - we can eventually support it, but not right now.
  • Authentication UI.

Sub-issue that relates to the Server support - #136.

Adds missing `/repositories` and `/services` tests

There are a significant amount of repositories/services implementations that weren't tested.

The list below is a summary of all untested classes:

Repositories

  • CollectionRepositoryImpl;
  • MemoExecutionRepositoryImpl;
  • MemoRepositoryImpl;
  • ResourceRepositoryImpl;
  • UserRepositoryImpl;
  • VersionRepositoryImpl.

Services

  • MemoryRecallServicesImpl;
  • CollectionServicesImpl;
  • ExecutionServicesImpl;
  • ProgressServicesImpl;
  • ResourceServicesImpl;
  • UserServicesImpl;
  • VersionServicesImpl.

Show question along with the answer

Caso de Uso/Use Case:

It would help to determine if a question was easy, medium, or hard.

Proposta/Proposal:

It would be good to have the question showing along with the answer after taping the "Show answer" button. A user might struggle to connect the answer with the question if it doesn't show up.

Also, if he stays in the answer screen for a long time, he will problably not remember the question anymore.

image

Add new test report tool

Now that we've opted to not use codecov anymore (due to some bugs and some security concerns), but we still think that a tool to report the test coverage is useful - because it may indicate the health of a particular application and help while evaluating a particular PR.

We are looking for codecov alternatives, maybe using lcov or another tool that also supports Dart/Flutter?

I'm still not quite sure about the decision on codecov, totally open to discussion on this matter.

Minor stutter when first opening a collection

Describe the bug:

When you first tap on a collection, the transition animation is briefly sluggish.
Tested on an iPhone 6S.

Steps to Reproduce:

  1. Install the app
  2. Open the app
  3. Navigate to Collections screen
  4. Tap a collection for the first time

Expected Result:

The selected collection screen opens with a smooth transition animation.

Actual Result:

The selected collection screen opens with a low-framerate transition animation.

App Version:

The current version on the App Store, as of 23-07-2021.

Criar cards com parte do código selecionado

Caso de Uso/Use Case:

Selecionar parte do código para criação do card de forma personalizada.
Assim seria possível memorizar a parte do código realmente importante e não toda sua estrutura.

Proposta/Proposal:

Caso seja feita mais de uma seleção no código, criar a quantidades de cards por seleção.
Por exemplo, o mem.dev utiliza-se desse recurso.

Chaning the profile picture is not affecting the rank list

Descreva o Bug/Describe the bug:

<-- Faça uma clara e breve descrição do problema / Provide us a brief and clear description of the problem -->

Passos para Reproduzir/Steps to Reproduce:

<-- Quais os passos necessários para que o bug seja reproduzido? / What are the necessary steps to reproduce this bug?
Exemplo/Example:

  1. Abra o app/Open the app
  2. Entre na tela X/Navigate to X Screen
  3. Clique no componente Y/Tap in the component Y -->

Resultado Esperado/Expected Result:

<-- Qual resultado você esperava? / What did you expect to achieve? -->

Resultado Obtido/Actual Result:

<-- Qual resultado você obteve? / What happened instead? -->

Screenshots:

<-- Se possível, adicione Screenshots para ilustrar o problema. / If applicable, adds some Screenshots to illustrate
the problem. -->

Versão do app/App Version:

<-- Versão do app na qual o problema foi reproduzido / App version in use when the problem was reproduced -->

[Server support] - Adds server support to `memo`

Central issue to track the Server support for memo.

Why

Adding a server will allow memo to:

  • Cross-device support.
  • Store user's "progress" in the cloud, drastically improving the experience.
  • Pushing collections updates without needing to deploy new client version to their respective stores.
  • ... and many more features that are usually hard implement while using only a local database.

This will inevitably make this project structure way more complex, but it's almost inevitable given the use-case of this application.

Constraints to these changes:

  • The application's (client) offline usage should still be supported after these server changes.
  • The server should be - ideally - fully structured applying the infrastructure as a code (IaC) "strategy".
  • Last but not least, it should be 100% OS - very likely using this same repository as a monorepo.

How

At the time of writing, we already tackled both core starting point decisions to this:

  • Decide which infrastructure and cloud vendor to use.
  • Plan database structure, taking into consideration current and planned features.

Decide which infrastructure and cloud vendor to use

To summarize the first, the decision was to use Firebase because:

  • All of the requirements (and the ones that may come up ahead) match really well with the client-oriented solutions they provide - meaning less work for us at the expense of some caveats described below.
  • Will arguably make the 100% IaC strategy easier.
  • Flutter + Firebase community and supporting packages are 10/10 - and by obvious reasons.
  • Extra: team is more experienced with Firebase products, if comparing to AWS and GCP.

There are caveats when making this decision, like having a less flexible (and arguably a less robust) server solution, "severe" vendor-locking, etcetera. We are fine with this, as it seems that the pros outweighs the cons, when comparing the same in AWS or GCP.

Plan database structure, taking into consideration current and planned features

We opted to restructure the current (local) NoSQL database to a more "intelligent" model, solving limitations that we had previously, allowing easy scaling for future modifications and also being more cost-efficient while making read/writes. This rewrite can be seen in this image, summarizing the first version of this remodeling, although subject to change until the final release.

Side-note: This could look kind of confusing, but the problem is that we have to deal with a bunch of aggregator fields, or even properties that must be calculated using the dates - like all memo's average memory recall for a single collection.

Pending discussions to be resolved

  • Will we migrate the local stored data to the cloud?

Issues

The server should be considered completed after all issues below are closed.

Firebase

Flutter

[NEW] Because #214 feature will also need to be connected to the server, we must also attach all required domain/data logic to make the functionality to work properly:

  • TODO(matuella): Create a proper issue with all business requirements when #214 is merged.

This will be worked on server branch, which will be eventually be merged to main when we consider it stable.

[Server support] - Update collection-listing strategy from client filesystem

This issue should solve adding new collections using only Firebase, thus allowing much more flexibility to the client applications when receiving new collection updates.

What it should do, technically speaking, is:

  • move all collections from flutter/ to firebase/;
  • then, with the admin SDK capabilities, every time an update occurs (in main branch) within this new folder of collections, run a script (using Github Actions, through a new workflow) to evaluate such changes, compare this new state to what's stored in the production firestore, and make the required writes to mirror this new state.

This is similar to what's occurring locally in VersionServices, although there is an additional complexity of handling both global and user collections - meaning that removing/updating past existing user collections should be made with extra care, as to not create any inconsistency.


Sub-issue that relates to the Server support - #136.

Add test for listenAll method

Caso de Uso/Use Case:

To increase the reliability of SembastGateway, it would be interesting to add unit tests to the listenAll method

Proposta/Proposal:

Add test for listenAll method

Setup GithubAction with Flutter

Caso de Uso/Use Case:
If we have GitActions for Flutter set, it would be possible to check Lint, tests, etc in each PR.

Proposta/Proposal:
Creation of Gitactions for Flutter.

Link do Discord Expirou

Descrição do Bug:

Ao ir nas configurações (menu no canto superior direito) e ir na opção "Discord", o aplicativo redireciona o usuário, porém ao ir para o discord o discord avisa que o link foi expirado

Passos Reproduzidos:

  1. Abra o app
  2. Entre no menu no canto superior direito
  3. Clique na opção "Discord"

Resultado Esperado:

Redirecionar o usuário ao discord com uma tela de convite ao suposto servidor.

Resultado Obtido:

Tela de "convite expirou"

Screenshots:

20210717_210453.mp4

Versão do app:

Versão 0.1.0

`SettingsVM` should also follow the dependency inversion principle

Unlike all other VMs, the SettingsVM is only exposed through a concrete implementation.

We should change what we have today to a SettingsVMImpl that implements this missing interface that will have the same name as the concrete's implementation today - SettingsVM.

Forked PRs doesn't have access to Github Secrets

Github Secrets are not accessible from pull-request workflow in forked repos. This is security protection and an expected behavior, but causes that forked PRs cannot run pull-request workflow.

References:

As proposed by reference number 2, pull_request_target may be used to allow access to Github Secrets from forked PRs.

This issue is still in development/study

Adds missing VMs unit tests

There are a significant amount of relevant view models implementations that weren't unit-tested.

The list below is a summary of all untested view-models:

  • CollectionDetailsVMImpl;
  • CollectionExecutionVMImpl;
  • CollectionsVMImpl;
  • ProgressVMImpl;
  • SettingsVM;
  • AppVMImpl.

Update the WIP sections in ARCHITECTURE.md

In ARCHITECTURE.md file, there are sections to better understand some concepts from external libraries that we are using, but remain with a WIP.

I will eventually update such explanations to help new contributors understand how the project is designed.

Sobreposição dos emojis sobre o conteúdo nas respostas

Descreva o Bug/Describe the bug:

Ao acessar as respostas dos "memos", no conteúdo de flutter, os emojis ficaram sobrepostos à resposta, impedindo que fossem lidas.
Possívelmente, um widget rolável resolveria o problema.
Acontece em android e iOS
Testei em aparelhos antigos e com telas menores, mas qualquer conteúdo maior poderia trazer a questão à tona mesmo em aparelhos mais novos e telas maiores

<-- Faça uma clara e breve descrição do problema / Provide us a brief and clear description of the problem -->

Passos para Reproduzir/Steps to Reproduce:

<-- Quais os passos necessários para que o bug seja reproduzido? / What are the necessary steps to reproduce this bug?
Exemplo/Example:

Abra o app, escolha a coleção de flutter e perceba o problema nas respostas com textos grandes.

Resultado Esperado/Expected Result:

Algum tipo de scroll para telas menores.

Resultado Obtido/Actual Result:

<-- Qual resultado você obteve? / What happened instead? -->

Screenshots:

<-- Se possível, adicione Screenshots para ilustrar o problema. / If applicable, adds some Screenshots to illustrate
the problem. -->

Versão do app/App Version:
Tenho um Moto G3 para testes aqui e foi onde instalei. Tetei no iphone 5s e também acontece.

<-- Versão do app na qual o problema foi reproduzido / App version in use when the problem was reproduced -->

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.