Flutter | Cookbook

Inhaltsverzeichnis [Anzeigen]

Development Workflow

TL;DR

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
flutter create <app>
cd <app>
flutter run
flutter create <app> cd <app> flutter run
flutter create <app>
cd <app>
flutter run

Run App

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
flutter
flutter run --release .\lib\go_router.dart
flutter flutter run --release .\lib\go_router.dart
flutter
flutter run --release .\lib\go_router.dart

VSCode and DevTools

Change default browser

Press F1, find Preferences: Open Settings (UI) then search for devtoolsbrowser.

Change in DevTools Menu

Working with Modules and Classes

Import all Modules from a Folder

Suppose you have a list of modules located in the folder models and you want to import all of them.

To do this

  • create a file index.dart which exports all files
  • in your dart file, import this index.dart
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
export 'counter.dart';
export 'number.dart';
export 'counter.dart'; export 'number.dart';
export 'counter.dart';
export 'number.dart';
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import 'data/models/index.dart';
import 'data/models/index.dart';
import 'data/models/index.dart';

Create custom code for unsupported packages

Create main file to check, if package is available. If not, then switch to custom code

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
export 'unsupported.dart' if (dart.library.io) 'io.dart';
export 'unsupported.dart' if (dart.library.io) 'io.dart';
export 'unsupported.dart' if (dart.library.io) 'io.dart';

Use this file in your code

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import 'plugins/desktop/desktop.dart';
import 'plugins/desktop/desktop.dart';
import 'plugins/desktop/desktop.dart';

Create files for supported and unsupported packages

io.dart

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void setTargetPlatformForDesktop({TargetPlatform platform}) {
TargetPlatform targetPlatform;
if (platform != null) {
targetPlatform = platform;
}
if (targetPlatform == null) {
if (Platform.isMacOS) {
targetPlatform = TargetPlatform.iOS;
} else if (Platform.isLinux || Platform.isWindows) {
targetPlatform = TargetPlatform.android;
}
}
debugDefaultTargetPlatformOverride = targetPlatform;
}
import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; void setTargetPlatformForDesktop({TargetPlatform platform}) { TargetPlatform targetPlatform; if (platform != null) { targetPlatform = platform; } if (targetPlatform == null) { if (Platform.isMacOS) { targetPlatform = TargetPlatform.iOS; } else if (Platform.isLinux || Platform.isWindows) { targetPlatform = TargetPlatform.android; } } debugDefaultTargetPlatformOverride = targetPlatform; }
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void setTargetPlatformForDesktop({TargetPlatform platform}) {
  TargetPlatform targetPlatform;
  if (platform != null) {
    targetPlatform = platform;
  }
  if (targetPlatform == null) {
    if (Platform.isMacOS) {
      targetPlatform = TargetPlatform.iOS;
    } else if (Platform.isLinux || Platform.isWindows) {
      targetPlatform = TargetPlatform.android;
    }
  }
  debugDefaultTargetPlatformOverride = targetPlatform;
}

unsupported.dart

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import 'package:flutter/material.dart';
void setTargetPlatformForDesktop({TargetPlatform platform}) {}
import 'package:flutter/material.dart'; void setTargetPlatformForDesktop({TargetPlatform platform}) {}
import 'package:flutter/material.dart';

void setTargetPlatformForDesktop({TargetPlatform platform}) {}

Working with Themes

Using a Theme in MaterialApp()

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), );
return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData.light().copyWith(
primaryColor: Colors.blue,
),
darkTheme: ThemeData.dark(),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
return MaterialApp( title: 'Flutter Demo', theme: ThemeData.light().copyWith( primaryColor: Colors.blue, ), darkTheme: ThemeData.dark(), home: MyHomePage(title: 'Flutter Demo Home Page'), );
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData.light().copyWith(
        primaryColor: Colors.blue,
      ),
      darkTheme: ThemeData.dark(),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );

Working with CSS Colors

Import

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import 'package:css_colors/css_colors.dart';
import 'package:css_colors/css_colors.dart';
import 'package:css_colors/css_colors.dart';

Usage

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
new Container(color: CSSColors.orange)
new Container(color: CSSColors.orange)
new Container(color: CSSColors.orange)

App Bar

How to remove a DEBUG Banner

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text('Home'),
),
),
);
MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( appBar: AppBar( title: const Text('Home'), ), ), );
MaterialApp(
  debugShowCheckedModeBanner: false,

  home: Scaffold(
    appBar: AppBar(
      title: const Text('Home'),
    ),
  ),  
);

Working With Data and Data Models

Replace Integer Variables with a Data Model

Examining the default Flutter App (Counter Sample), shows, that the real counter is implemented as integer with integer operations:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); }
int _counter = 0;

void _incrementCounter() {
  setState(() {
    _counter++;
  });
}

If you want to customize the varianble and operations, you could replace the interger variable witrh your own data model

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import 'data/models/counter.dart';
CounterModel _counter = CounterModel();
void _incrementCounter() {
setState(() {
_counter.add(1);
});
}
import 'data/models/counter.dart'; CounterModel _counter = CounterModel(); void _incrementCounter() { setState(() { _counter.add(1); }); }
import 'data/models/counter.dart';

CounterModel _counter = CounterModel();

void _incrementCounter() {
  setState(() {
    _counter.add(1);
  });
}

The CounterModel is defined in data/models/counter.dart'

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
class CounterModel {
int _value = 0;
int get value => _value;
void set(int val) => _value = val;
void add(int val) => _value += val;
void remove(int val) => _value -= val;
void reset() => _value = 0;
@override
String toString() {
return value.toString();
}
}
class CounterModel { int _value = 0; int get value => _value; void set(int val) => _value = val; void add(int val) => _value += val; void remove(int val) => _value -= val; void reset() => _value = 0; @override String toString() { return value.toString(); } }
class CounterModel {
  int _value = 0;

  int get value => _value;

  void set(int val) => _value = val;
  void add(int val) => _value += val;
  void remove(int val) => _value -= val;

  void reset() => _value = 0;

  @override
  String toString() {
    return value.toString();
  }
}

Interesting Pack

device_preview