forcemvc 0.1.9+2

  • Installing
  • Versions
  • --

Dart Force MVC


Part of the Dart Force Framework.

Serverside MVC based implementation for Dart. Easy to setup and part of the dart force framework!


Use a server with dart very easily, create controllers with annotations ... similar to spring mvc.

First you will setup a new server.

WebServer server = new WebServer(wsPath: wsPath, port: port, host: host, buildPath: buildPath);

Then you use the on method to handle http requests.

server.on(url, (ForceRequest req, Model model) { /* logic */ }, method: "GET");

You can also use the annotation RequestMapping in a dart object

@RequestMapping(value: "/someurl", method: "GET")
void index(ForceRequest req, Model model)

You can also use the annotation @ModelAttribute to add an object to all the scopes in the methods. An @ModelAttribute on a method argument indicates the argument should be retrieved from the model. If not present in the model, the argument should be instantiated first and then added to the model. Once present in the model, the argument's fields should be populated from all request parameters that have matching names.

String someName() {
	return mv.getValue();

Then you register that object on the WebServer object.


Or you can annotate a class with @Controller and then it will be registered automatically in the force server.

class SomeObject {



ForceRequest is an abstraction for HttpRequest

forceRequest.postData().then((data) => print(data));


You can define inteceptors as follow, the framework will pick up all the HandlerInterceptor classes or implementations.

class RandomInterceptor implements HandlerInterceptor {

  bool preHandle(ForceRequest req, Model model, Object handler) { return true; }
  void postHandle(ForceRequest req, Model model, Object handler) {}
  void afterCompletion(ForceRequest req, Model model, Object handler) {}

Path variables

You can now use path variables in force mvc.

@RequestMapping(value: "/var/{var1}/other/{var2}/", method: "GET")
void pathvariable(ForceRequest req, Model model, String var1, String var2)

This is an alternative way how you can access path variables.


You can also use the annotation @PathVariable("name") to match the pathvariable, like below:

  @RequestMapping(value: "/var/{var1}/", method: "GET")
  String multivariable(req, Model model, @PathVariable("var1") variable) {}


You can find a simple example with a page counter implementation here - live demo


  • get more annotations and options for sending the response back
  • writing tests

Notes to Contributors

Fork Dart Force MVC

If you'd like to contribute back to the core, you can fork this repository and send us a pull request, when it is ready.

If you are new to Git or GitHub, please read this guide first.

Dart Force

Realtime web framework for dart that uses force MVC source code


Follow us on twitter


Follow us on google+


This file contains highlights of what changes on each version of the forcemvc package.

Pub version 0.1.9+2

Add HttpSession & HttpHeaders in possible arguments in a controller method

Pub version 0.1.9+1

Solve an issue with the code, please update!

Pub version 0.1.9

Adding @RequestParam, so you can add this annotation to the controller class if you want to have easy access to querystring parameters.

Pub version 0.1.8+3

Make static folder configurable and some small improvements on the regex expression.

Pub version 0.1.8+2

Static folder for serving static files to the client!

Pub version 0.1.8+1

Improved accesability of path variables.

Pub version 0.1.8

New ways of view rendering and getting the templates.

Pub version 0.1.7+2 & 0.1.7+3

Cleanup code webserver. Solving an issue!

Pub version 0.1.7+1

Updated this buildPath: '../build/web' to get it working in Dart 1.2

Pub version 0.1.7

Extend ForceRequest with getPostData and getPostParams to support post methods.

Pub version 0.1.6

Adding path variables to the mvc part.

Pub version 0.1.5

Serving .dart files much easier, putting it in the framework itself.

Pub version 0.1.4

Adding interceptors to the game, so you can write interceptor classes to intercept a request.

Pub version 0.1.3

Updating dependency on force mirrors, it solves a bug with invocation. Controller scanning, so you don't need to register a class, just annotate it with @Controller.

Pub version 0.1.2+4 & 0.1.2+5

Adding an improvement of force mirrors invoke.

Pub version 0.1.2+3

Solving issue with dependency management

Pub version 0.1.2+2

Add dependency to forcemirrors.

Pub version 0.1.2+1

Adding tests for mirrorhelpers and refactor code to improve annotation handling.

Pub version 0.1.2

Adding the ModelAttribute annotation into the mvc framework.

Pub version 0.1.0

Adding an abstraction ForceRequest, a wrapper around httprequest.

Pub version 0.1.0

Adding renderer and model to the mvc part of it. Adding mustache as a new dependency for the rendering part.

Pub version 0.0.6 & 0.0.7

Fixing issue with annotations of RequestMapping

Pub version 0.0.5

Introducing Simple Web Server

Pub version 0.0.5

Introduction of the model

Pub version 0.0.4

Update version of uuid

Pub version 0.0.3

Adding RequestMethod class into the project

Pub version 0.0.2

Adding documentation and solving issues.

Pub version 0.0.1

Setup of the project, moved basic_server.dart to this package and make it usable in the dart force main package.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  forcemvc: ^0.1.9+2

2. Install it

You can install packages from the command line:

with pub:

$ pub get

Alternatively, your editor might support pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:forcemvc/annotations/force_controller.dart';
import 'package:forcemvc/annotations/force_model_attribute.dart';
import 'package:forcemvc/annotations/force_path_variable.dart';
import 'package:forcemvc/annotations/force_request_mapping.dart';
import 'package:forcemvc/annotations/force_request_param.dart';
import 'package:forcemvc/force_mvc.dart';
import 'package:forcemvc/render/force_mustache_render.dart';
import 'package:forcemvc/render/force_view_render.dart';
import 'package:forcemvc/server/force_handler_interceptor.dart';
import 'package:forcemvc/server/force_interceptors_collection.dart';
import 'package:forcemvc/server/force_model.dart';
import 'package:forcemvc/server/force_mvc_typedefs.dart';
import 'package:forcemvc/server/force_path_analyzer.dart';
import 'package:forcemvc/server/force_request.dart';
import 'package:forcemvc/server/force_request_method.dart';
import 'package:forcemvc/server/force_serving_files.dart';
import 'package:forcemvc/server/simple_web_server.dart';
import 'package:forcemvc/server/web_server.dart';
Version Uploaded Documentation Archive
0.8.5 Jun 20, 2016 Go to the documentation of forcemvc 0.8.5 Download forcemvc 0.8.5 archive
0.8.4 Jun 20, 2016 Go to the documentation of forcemvc 0.8.4 Download forcemvc 0.8.4 archive
0.8.3 Jun 20, 2016 Go to the documentation of forcemvc 0.8.3 Download forcemvc 0.8.3 archive
0.8.2 Jun 20, 2016 Go to the documentation of forcemvc 0.8.2 Download forcemvc 0.8.2 archive
0.8.1 Mar 29, 2016 Go to the documentation of forcemvc 0.8.1 Download forcemvc 0.8.1 archive
0.8.0 Feb 7, 2016 Go to the documentation of forcemvc 0.8.0 Download forcemvc 0.8.0 archive
0.7.3 Oct 11, 2015 Go to the documentation of forcemvc 0.7.3 Download forcemvc 0.7.3 archive
0.7.2 May 18, 2015 Go to the documentation of forcemvc 0.7.2 Download forcemvc 0.7.2 archive
0.7.1+1 Mar 15, 2015 Go to the documentation of forcemvc 0.7.1+1 Download forcemvc 0.7.1+1 archive
0.7.1 Feb 15, 2015 Go to the documentation of forcemvc 0.7.1 Download forcemvc 0.7.1 archive

All 110 versions...

Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

This package version is not analyzed, because it is more than two years old. Check the latest stable version for its analysis.