Skip to main content

Project Creation

This guide will take you from an empty folder to a running Flutter + Serverpod app with Dart Way.


1. Create a Serverpod project

Follow Serverpod guide, or run:

serverpod create myapp

You’ll get 3 packages:

myapp_client/
myapp_flutter/
myapp_server/

Also, make sure Docker is running — Serverpod needs PostgreSQL and Redis.


2. Add Dart Way dependencies

Client package (myapp_client/pubspec.yaml)

dependencies:
dartway_auth_serverpod_client:
git:
url: git@github.com:dartway/dartway_auth_serverpod.git
path: dartway_auth_serverpod_client
dartway_core_serverpod_client:
git:
url: git@github.com:dartway/dartway_core_serverpod.git
path: dartway_core_serverpod_client

Flutter package (myapp_flutter/pubspec.yaml)

dependencies:
dartway_app:
git:
url: git@github.com:dartway/dartway_app.git

dartway_auth_serverpod_client:
git:
url: git@github.com:dartway/dartway_auth_serverpod.git
path: dartway_auth_serverpod_client

dartway_core_serverpod_flutter:
git:
url: git@github.com:dartway/dartway_core_serverpod.git
path: dartway_core_serverpod_flutter

Server package (myapp_server/pubspec.yaml)

dependencies:
dartway_core_serverpod_server:
git:
url: git@github.com:dartway/dartway_core_serverpod.git
path: dartway_core_serverpod_server

dartway_auth_serverpod_server:
git:
url: git@github.com:dartway/dartway_auth_serverpod.git
path: dartway_auth_serverpod_server

Run flutter pub get in each package.


3. Define your first model

Add /myapp_server/lib/src/protocol/user_profile.yaml:

class: UserProfile
table: user_profile
fields:
userId: int
firstName: String
phone: String

Then generate code:

cd myapp_server
dart run serverpod generate

Now UserProfile exists both on server and in Flutter client.


4. Initialize Dart Way in Flutter

Replace main.dart in myapp_flutter/lib/:

void main() async {
DwApp(
title: 'MyApp',
routerProvider: appRouterProvider,
dwConfig: DwConfig(
defaultModelGetter: DwRepository.getDefault,
),
appInitializers: [
(ref) async => ref.initDartwayServerpodApp<UserProfile>(
client: AppCore.initServerpodClient(
kDebugMode
? (!kIsWeb && Platform.isAndroid
? 'http://10.0.2.2:8080/'
: 'http://localhost:8080/')
: dw.services.dotEnv.get('BACKEND_URL'),
),
initRepositoryFunction: DefaultModels.initRepository,
userIdMode: UserIdMode.userProfileId,
),
],
).run();
}

5. Setup default models

Create lib/core/default_models.dart:

import 'package:dartway_core_serverpod_flutter/dartway_core_serverpod_flutter.dart';
import 'package:myapp_client/myapp_client.dart';

class DefaultModels {
static initRepository() {
DwRepository.setupRepository(
defaultModel: UserProfile(
id: DwRepository.mockModelId,
userId: DwRepository.mockModelId,
firstName: 'Niclaus',
phone: '79123912012',
),
);
}
}

This provides default UserProfile for skeletons while real data loads.


6. Run it 🚀

Start server:

cd myapp_server
dart run bin/main.dart

Run Flutter app:

cd ../myapp_flutter
flutter run

You now have a working full-stack Dart app with Dart Way.