Elements vs Components in Flutter - flutter

Our team is planning on rewriting a mid sized app that was mostly in React. We are drawing a new architecture in Flutter. In this effort we are discussing proper terminology and how to classify different objects. In React, there is a meaningful difference between Elements and Components.
In the official Flutter documentation both words Elements and Components, are used for what -implicitly- seems to be different things https://flutter.dev/docs/development/ui/widgets/material
"Material Components widgets"
"Expansion panels contain creation flows and allow lightweight editing of an element"
What are the difference between those two? In particular are controllers, elements, states, images considered as components?

I think "components" is vocabulary for Material Design. Components are design concepts. https://material.io/components/
"Widgets" are classes in Flutter.
Flutter widgets are often implementations of Material Design components.

Continuing from comment. Break your folder structure like
|--ui
|--login
|--home
|-- ......
|--modal
|--rest
|--routes
|--helpers
etc as per your convenience. Also make custom widgets which are to be used everywhere combining other simpler widgets and can put in helper folder.
Also look at other opensource flutter projects. You will get a better idea how everyone else are grouping things.

Related

How to document Flutter widgets and screens classes in my app?

I don't know what is the common way and best practices used in documenting UI widgets and components in a Flutter app, I could find a good resource on how to document dart code in general here
And how you can describe a function behavior or a model attribute.
But what is the best way to add comments for UI Classes, Screens, Refactored Widgets, etc..
so that it can be helpful and describes the widget or the screen contents?
The whole flutter project is open source. You could always check how the flutter team documents its widgets.
For example, here is the source of the Container widget:
https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/widgets/container.dart
Personally, I would only document widgets which I publish as part of a library. But tastes are different :D

Is there a CMS similar to Umbraco, that can accommodate Language as a separate dimension for the content nodes?

Does Umbraco allow you to add multiple languages, as another dimension for the content nodes?
I have begun to love Umbraco, but recently I was approached by a huge customer from India, where they have multiple languages. So the default support of languages does not work, where each language has its own content tree, rather they would prefer having a single content tree, and be able to change content for each language on the same tree.
It doesn't out of the box. But there is a nice package for it, named Vorto: https://our.umbraco.org/projects/backoffice-extensions/vorto/
Looks like Umbraco-8 was what I needed back then.

Wicket Components - have to add() every time?

I am attempting to build a simple application using wicket and have been impressed so far. I have been taking advantage of the Component class to determine behavior of elements on the page based on user input or the model. I see the component model similarities with JSF, but find the wicket lifecycle easier to manage.
What i haven't been able to understand is having to add every component to the tree for every wicket:id mentioned on a page, especially for ones without any children. it seems heavy handed to have to build up the tree in java code when the tree has already been somewhat defined within the markup. what am i missing?
edit
I should probably give an example. I have a label for an input box that in some cases i want to be able to modify. 95% of the time the text and attributes i have for the label in markup will be fine.
Short answer: Yes, you have to add them.
Long answer: You can create custom code to do this, but I doubt it's worth the effort.
With JSF, you use a non-html tag, which has one component type associated to it - for example, h:inputText correspond to the class HtmlInputText -, so it knows what class to instantiate.
With Wicket, the HTML file contains only (with a few exceptions) HTML tags, and you have to instantiate a concrete component for each wicket:id-marked tag you add to the markup, because it can't know for sure if <span wicket:id='xyz'> means a Label, a FeedbackPanel, a WebMarkupContainer, or some custom component.
With JSF you do in the markup what, with Wicket, you do in Java code, that is, to build the component tree, bind components to properties, and handle events. It keeps everything in one file (you don't have to create a class for every template file), which has many, many cons (some may think it has some pros, I digress).
You page is never just a simple form that does nothing. You want to convert and validate the input, you want to process the submit, you want to update components using Ajax. With JSF, you do all that in the (non-compilable, type-unsafe, poorly tooled, non-refactorable) template, making it bloated with expressions, configuration tags, and - gawd forbid - business logic.
If Wicket had support for this (and, for the matter, it has the flexibility needed for you to build this add-on yourself), you would have to add lots of extra annotations (special, non-standard tags and attributes) to the markup, to declare what class to instantiate, what model to update, what validations to execute, etc., compromising two of the beauties of the framework, the clean HTML template, and the clear separation between visuals and logic.
One framework that tries to do more in the template, while remaining less bloated than JSF (which isn't that hard anyway) is Apache Tapestry. But as can be seen in its tutorial, you still end up having to use non-standard tags and following arbitrary conventions to bind the template to the code (you may like it, but if this is the case you have baaad taste, sorry :P).
I have a label for an input box that in some cases i want to be able to modify. 95% of the time the text and attributes i have for the label in markup will be fine.
You could try to wrap the content of the label in a Model, enclose that label in a container and repaint the container (target.add(container);).
Offcurse you should add them.One of the most powerful facilities of wicket is that allow you to make a reusable components espacially html components.
There are a million ways to build a house, but most people wouldn’t
consider building toilets, bathtubs, and glass windows from scratch.
Why build a toilet yourself when you can buy one for less money than
it would cost you to construct it, and when it’s unlikely you’ll
produce a better one than you can get in a shop? In the same fashion,
most software engineers try to reuse software modules. “Make or buy”
decisions encompass more than whether a module is available;
generally, reusing software modules is cheaper and leads to more
robust systems. Reusing software also means you don’t have to code the
same functionality over and over again.(wicket in action:manning)
So to have a reusable wicket pages, wicket just needs a html page to show it's components hierarchy or their positions. The types and model of these components left to programmer.

Creating a responsive design using CQ5 templates

I'm investigating Adobe CQ5 and would like any advice on how to integrate its drag-and-drop UI to create a responsive website. It seems as if it works on a concept of fairly bland templates with components that can be dropped in pretty much anywhere, including things like "three-column control" - which would make designing a responsive grid structure very hard (as it would be hard to prevent users from dropping in a control that could ruin the layout).
Does anyone have any experience or advice on this? I'm really looking for deep technical details on the structure of templates vs components (paragraphs), and where/how to manage to the CSS.
CQ5 offers ways to control what can be done within a template, so thinking that components "can be dropped in pretty much anywhere" may be misleading. Page templates are designed and configured so that you control which components can be added to a certain area of a page. This allows you to only make those components available that will work with the template layout, excluding components that would wreck the layout. Then authors are only allowed to use things that will work. If they attempt to drag a component onto a paragraph (parsys) where that component has not been configured as available, the UI will not allow them to use it there. So CQ actually makes it easy to prevent users from dropping a control somewhere that would ruin the layout.
This is outlined a bit here:
http://dev.day.com/docs/en/cq/current/howto/components_develop.html#Adding%20a%20new%20component%20to%20the%20paragraph%20system%20%28design%20%20%20%20%20mode%29 which states that
"The components can be activated (or deactivated) to determine which
are offered to the author when editing a page."
When it comes to CSS and JavaScript, you can create a client library and then include the relevant client library on the page. Backend CQ functionality will take care of combining multiple CSS (or JavaScript) files into a single minified file to allow for a single HTTP request of an optimized file. This it outlined a bit here:
http://dev.day.com/docs/en/cq/current/developing/widgets.html#Including%20the%20Client-Sided%20Code%20in%20a%20Page as well as
http://dev.day.com/docs/en/cq/current/howto/taglib.html#%3Ccq:includeClientLib%3E
So you might develop several components that share a client library, then when any of the components is added to a paragraph the client library will be included on the page. You may also want a CSS library that applies to all the templates to give a common look and feel, yet allow components to add their own when they are used.
These guidelines for using templates and components outline how you provide control, yet flexibility:
http://dev.day.com/docs/en/cq/5-5/developing/developing_guidelines_bestpractices.html#Guidelines%20for%20Using%20Templates%20and%20Components
I'll document our successful WIP experience with RWD and CQ5
Assumptions:
A well documented style guide.
Our First Steps:
Modified existing column control component css to utilize twitter bootstrap grid css.
Create a base page property allowing two different classes on the grid container to be set and inherited by child pages. (container||container-fluid).
Leverage out-of-the-box components where ever possible.
All component widths inherit the width of their parent container allowing for components to be dropped into any location within a template.
Issues:
The out-of-the-box column control component can not be nested.
We are looking into building a custom column control component.
Takeaways: this is an evolutionary project and we are constantly iterating.
With the recent launch of AEM 6.0, they have an example website called as Geomatrixx Media. This website is responsive.
You can take this example as reference and start building on top of it.

Any way to use a MigLayout in GWT?

There's a question about using layout managers in GWT, which was however answered in the sense that no direct porting of Swing apps is possible. But I don't need this, I only want to use a sane way of positioning.
Is there a a port of MigLayout (or alike) to GWT?
Since a LayoutManager is mostly a way to set the component sizes and positions using some user preferences, it should be possible. Doing this for a HTML component is possible (and AFAIK some frameworks compute all sizes and positions on the server and avoid all associated HTML/CSS problems).
Depending on your definition of crazy, the LayoutPanels built in to GWT are quite sane. There's a DockLayoutPanel with familiar north/south/east/west behavior, and also panels that allow more arbitrary percentages and positions. Combining them with CSS is very powerful and flexible.
http://code.google.com/webtoolkit/doc/latest/DevGuideUiPanels.html
Although requested years ago, it looks like it hasn't been done yet.
Just one quotation:
I'm just getting started with GWT and I feel like I just stepped back into the dark ages with all the various layout panels and layout managers.
There's gxt-jglayout, which is JGoodies form layout implementation for Ext-GWT (GXT), but Ext-GWT is not free (it's dual licensed).