Library for RAD development in Flutter

Overview

ACTIVE DEVELOPMENT HAS MOVED TO GITLAB

I am trying Gitlab for a while, and have moved development there. This repo is now out of date.

https://gitlab.com/rickspencer3/rapido-flutter

rapido

Rapido brings Rapid Application Development principles to mobile development, currently available for Flutter.

Introduction

Rapido makes it simple to build document centric applications by:

  1. Providing DocumentList and Document classes that makes it easy to manage user data, including persistence.
  2. Provides many of the UI elements that you need to work with DocumentList, including ListViews, Forms, Maps, and other widgets. They know how to work with DocumentList so provide a ton of functionality with almost no additional coding.
  3. The ability to easily customize the core widgets provided.

Show Me

Create a DocumentList and defining labels for fields, and then create a DocumentListScaffold like this:

class _MyHomePageState extends State<MyHomePage> {
  DocumentList taskList = DocumentList("Tarea",
      labels: {"Date": "date", "Task": "task", "Priority": "pri count"});

  @override
  Widget build(BuildContext context) {
    return DocumentListScaffold(taskList);
  }
}

The rapido widgets infer what kind data is in each field based on the field name. Basic CRUD functionality is automatically created: add button, forms, listview, edit and delete, sorting

Rapido also handles specialized data types: pickers, and maps

You can replace any widget with your own widget, or you can use built in customization hooks to quickly create your own look and feel.

Rapido Online

A Closer Look

Overview of Using DocumentList

DocumentList lies at the core of the R.A.D. experience. By simply using a list, you get:

  1. Local persistence of objects.
  2. Default CRUD UI that your users can use for displaying, creating, editing, and deleting documents in the list.

Importing

Everything you need is in rapido.dart:

import 'package:rapido/rapido.dart';

This import includes DocumentList itself, and all of the UI elements that work on it.

DocumentList

To create a DocumentList, all that is required is to include a "documentType" string. This string is used by DocumentList to organize its documents. Then you can add documents to it by simply passing in maps of type Map<String, dynamic>.

DocumentList taskList = DocumentList("tasks");
taskList.add(Document(initialValues: {"name":"grocery shopping", "priority": 1, "done": false}));

Notice that the maps use a string of a key, but the values are dynamic. You can store anything you like in the DocumentList.

You can modify and delete documents using normal list functionality.

taskList[0]  = Document(initialValues: {"name":"grocery shopping", "priority": 1, "done": true});

You can delete them:

taskList.removeAt[0];

Note that all changes to the DocumentList are automatically persisted to the user's phone! The user can close the app, and when they reopen them, the data is still right there.

UI Elements

After creating a DocumentList, you can use it in a variety of UI elements supplied by Rapido. By simply passing in a DocumentList, the widgets can figure out themselves what functionality to display to users.

For exampe, if you want to easily create an application that supports adding, removing, and editing documents, you can use the DocumentListScaffold class.

DocumentListScaffold(taskList, title:"Task List");

DocumentListView will create a ListView to display and edit the items in the list. It also offers several custimazation options, but the defautls "just work."

DocumentListView(taskList);

DocumentListMapView will display any documents with a field called "latlong" on a map:

DocumentListMapView(taskList);

DocumentForm allows easy creation of new documents, or editing of existing ones.

To create a new document:

DocumentForm(taskList);

To edit an existing one:

DocumentForm(taskList, index: 0);

Feedback Welcome

Rapido is undergoing rapid development. Please visit our Github repo to log any issues or features requests. Of course, pull requests are most welcome.

Comments
  • Dependencies out of date - new version coming soon?

    Dependencies out of date - new version coming soon?

    Because rapido >=0.1.9 depends on path_provider ^0.5.0+1 and rapido <0.1.9 depends on path_provider ^0.4.1, every version of rapido requires path_provider ^0.4.1 or ^0.5.0+1.

    Any chance of a new release please?

    opened by macrotech5 4
  • DocumentList should allow more than one onChanged listener at a time

    DocumentList should allow more than one onChanged listener at a time

    While writing the example below, I noticed that the onChanged function was not firing.

    class _MyHomePageState extends State<MyHomePage> {
      DocumentList docs = DocumentList(
        "taskList",
        labels: {
          "Date": "date",
          "Task": "task",
          "Priority": "pri count",
          "Note": "note"
        },
        onLoadComplete: (DocumentList list) {
          list.sort((t1, t2) => t1["pri count"] - (t2["pri count"]));
        },
        onChanged: (DocumentList list) {
          print("taskList updated");
        },
      );
    
    enhancement user request medium 
    opened by rickspencer3 4
  • Boolean field not supported by Parse persistence provider

    Boolean field not supported by Parse persistence provider

    Hi,

    When using the Parse persistance, the boolean field type is not supported because of the "?" at the end of the name of the field. With this label : "Available": "available?" in the documentList, Parse send this error ╭-- Parse Response Class: Products Function: ParseApiRQ.create Status Code: 105 Type: InvalidKeyName Error: Invalid field name: available?. ╰--

    My Parse server is hosted on back4app.

    opened by jeanmarcp 2
  • backend

    backend

    I like this project and its very useful for apps where you have many of Master Detail forms to do CRUD on.

    For the backend do you have thoughts yet ?

    I have lately been using GraphQL flutter with graphQL backend in golang and getting good results in term of low friction for devs. https://github.com/zino-app/graphql-flutter

    https://github.com/zino-app/graphql-flutter#roadmap

    • has subscriptions, but i still need to get it working with golang backend using gqlgen
    discussion 
    opened by ghost 2
  • Sorting should be simplified

    Sorting should be simplified

    DocumentList.sort() works, but it could be simplified somewhat. For example:

    documentList.setSortField("date", DocumentList.SortOrder.Ascending);
    

    as well as something like:

     documentList.sortByTimestamp = true;
    
    enhancement 
    opened by rickspencer3 2
  • example setup

    example setup

    Could you do a "flutter create ." in the examples and add a reference to rapido in the pubspec. Makes its easier to work on this together and push examples back.

    opened by ghost 1
  • DocumentForm should take a Document, not an integer index

    DocumentForm should take a Document, not an integer index

    DocumentForm should only need to know about the Document it is creating or adding. It should not know about DocumentList.

    1. Document will need an "onChanged" handler that DocumentList responds to.
    2. Document will need to have a labels property, which can be supplied by the DocumentList or can be supplied directly.
    3. The following code in DocumentForm will need to be modified to use labels on the Document, rather than the DocumentList, and to update the Document directly.
      List<Widget> _buildFormFields(BuildContext context) {
        List<Widget> fields = [];
        widget.documentList.labels.keys.forEach((String label) {
          dynamic initialValue;
          if (widget.index != null) {
            initialValue = widget.documentList[widget.index]
                [widget.documentList.labels[label]];
          }
          fields.add(
            Container(
              padding: EdgeInsets.all(10.0),
              child: TypedInputField(widget.documentList.labels[label],
                  label: label,
                  initialValue: initialValue, onSaved: (dynamic value) {
                newData[widget.documentList.labels[label]] = value;
              }),
              margin: EdgeInsets.all(10.0),
            ),
          );
        });
    
    enhancement 
    opened by rickspencer3 1
  • Pass the Document into customItemBuilder, not the index

    Pass the Document into customItemBuilder, not the index

    Widget CustomItem Builder(int index) {}
    

    should be

    Widget CustomItemBuilder(Document  document){}
    

    in addition to #30 it would be:

    Widget CustomItemBuilder(Document  document, BuildContext context){}
    
    enhancement 
    opened by rickspencer3 1
  • calculate zoom for a set of latlongs

    calculate zoom for a set of latlongs

    Currently, awaiting https://github.com/flutter/flutter/issues/25298 to be fixed. Meanwhile, maybe I can calculate the sort of correct zoom level using something like thisL https://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom-level-for-a-given-bounds

    bug medium 
    opened by rickspencer3 2
Owner
Rapido
Rapid Application Development (for Flutter)
Rapido
Pokedex-Flutter - Pokedex demonstrates modern Flutter development with GetX, Hive, Flow, Adaptive/Responsive Design

Pokedex-Flutter Pokedex demonstrates modern Flutter development with GetX, Hive,

Khoujani 3 Aug 17, 2022
[Flutter SDK V.2] - Youtube Video is a Flutter application built to demonstrate the use of Modern development tools with best practices implementation like Clean Architecture, Modularization, Dependency Injection, BLoC, etc.

[Flutter SDK V.2] - Youtube Video is a Flutter application built to demonstrate the use of Modern development tools with best practices implementation like Clean Architecture, Modularization, Dependency Injection, BLoC, etc.

R. Rifa Fauzi Komara 17 Jan 2, 2023
COVID-19 application made with Flutter, following Test Driven Development (TDD) and Clean Architecture along with Internationalization with JSON.

Covid App COVID-19 application made with Flutter, following Test Driven Development (TDD) and Clean Architecture along with Internationalization with

Sandip Pramanik 4 Aug 4, 2022
Addons to supabase dart (and Flutter), to make development easier.

supabase_addons Make great apps with a great backend! Supabase is an open source Firebase alternative. It has support for auth, database and storage u

Bruno D'Luka 20 Dec 3, 2022
DropdownButton, ToggleButton & CheckboxListTile implementation in Flutter as a Mobile App Development exercise.

Sort & Filter UI A new Flutter project. Getting Started This project is a starting point for a Flutter application. ⏮ Preview A few resources to get y

Ehmad Saeed⚡ 8 Sep 29, 2021
Trying out Flutter for desktop Web app development as an alternative to SPA frameworks (such as React and Angular) by recreating one of the pages of an existing CV Management web app

HTML Renderer Demo CanvasKit Renderer Demo Reddit discussion This repo contains a PoC of using Flutter as a traditional SPA framework for creating a d

Maxim Saplin 20 Oct 11, 2022
flutter development bootcamp layout challenge #2.1

MiCard App Challenge Hey folks! This app is the continuation of the layout_challenge_app. I coded this app from scratch because unfortunate things hap

Damla Çim 1 Jan 6, 2022
PCSB In House Development Flutter

pcsb_ipd Collabrative project for IPD in PCSB using Flutter Getting Started This project is a starting point for a Flutter application. A few resource

null 2 Oct 27, 2021
Learn to Code While Building Apps - The Complete Flutter Development Bootcamp

BMI Calculator ?? Our Goal The objective of this tutorial is to look at how we can customise Flutter Widgets to achieve our own beautiful user interfa

London App Brewery 146 Jan 1, 2023
Starter code for the Clima Project from the Complete Flutter Development Bootcamp

Clima ☁ Our Goal The objective of this tutorial is to learn about asynchronous programming in Dart. We'll look at how to carry out time consuming task

London App Brewery 141 Dec 10, 2022
This is a set of small projects focused solely on the development of the graphical interface with Flutter

My Flutter Projects Flutter apps with cool design and animations Social Media Youtube Facebook Twitter Getting Started This project is a starting poin

Kevin Melendez 500 Dec 19, 2022
A Calculator App Development Using Flutter & Dart By Jawan Pakistan

Calculator App Using Flutter & Dart 20211006_155755.mp4

Jibran Abdul Jabbar 1 Dec 28, 2021
Project-x2 - A Flutter E-Commerce starter template that bootstraps development of your mobile application

Flutter E-Commerce UI KIT A powerful Flutter E-Commerce starter template that bo

null 1 Apr 7, 2022
Feathr - A Mastodon client built in Flutter (in development).

feathr A Mastodon client built in Flutter (in development). Contributing Pull requests are welcome. For major changes, please open an issue first to d

feathr.space 8 Nov 25, 2022
This project follows the Reso Coder course for flutter test-driven-development with clean architecture and BloC state management for a random trivia simple app.

This project follows the Reso Coder course for flutter test-driven-development with clean architecture and BloC state management for a random trivia simple app.

Tomas B Sarmiento Abella 1 Jan 5, 2022
A beautiful weather forecasting application built with the Flutter development kit. Available on Android and iOS.

Flutter Weather A beautiful weather forecasting application built with the Flutter development kit. Screenshots Analysis Run Application This project

Scott Carnett 15 Oct 17, 2022
Learn to Code While Building Apps - The Complete Flutter Development Bootcamp

Quizzler ❓ Our Goal In this tutorial we will be reviewing Stateful and Stateless Widgets as well as learning about the fundamental building blocks of

London App Brewery 169 Dec 31, 2022