# dart-hotreloader
**Repository Path**: SimpleZero/dart-hotreloader
## Basic Information
- **Project Name**: dart-hotreloader
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-01
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# hotreloader (Dart)
[](https://travis-ci.com/vegardit/dart-hotreloader)
[](LICENSE.txt)
[](https://pub.dev/packages/hotreloader)
[](CODE_OF_CONDUCT.md)
1. [What is it?](#what-is-it)
1. [Requirements](#requirements)
1. [How to use](#how-to-use)
1. [Logging](#logging)
1. [Alternatives](#alternatives)
1. [Changelog / Version History](#changelog)
1. [License](#license)
## What is it?
This [Dart](https://dart.dev) library provides a code reloading service that monitors the source files of a Dart project on the local file system for changes
and automatically applies them using the Dart VM's [hot reload](https://github.com/dart-lang/sdk/wiki/Hot-reload) capabilities to the running Dart process.
## Requirements
[Dart SDK](https://dart.dev/get-dart) **2.6.0** or higher.
## How to use
1. Add this to your `pubspec.yaml`
```yaml
dev_dependencies:
hotreloader: ^2.0.0
```
1. Enable hot reloading in your entry point dart file, e.g. `bin/main.dart`
```dart
import 'package:hotreloader/hotreloader.dart';
Future main(List args) async {
// instantiate a reloader that by monitors the project's source code folders for changes
final reloader = await HotReloader.create();
// ... your other code
// cleanup
reloader.stop();
}
```
1. Run the dart program using the Dart VM with the `--enable-vm-service` flag enabled, e.g.
```bash
dart --enable-vm-service bin/main.dart
```
1. You can now change dart files under the `lib` and the changes should be applied to the running process.
The reloader service can be further customized, e.g.
```dart
import 'package:hotreloader/hotreloader.dart';
Future main(List args) async {
final reloader = await HotReloader.create(
debounceInterval: Duration(seconds: 2), // wait up to 2 seconds after file change before reloading
onBeforeReload: (ctx) => //
ctx.isolate.name != 'foobar' && // never reload the isolate named 'foobar'
ctx.event?.path.contains('/mymodel/')) ?? true, // only perform reload when dart files under ../mymodel/ are changed
onAfterReload: (ctx) => print('Hot-reload result: ${ctx.result}')
);
// ... your other code
await reloader.reloadCode(); // programmatically trigger code reload
// ... your other code
// cleanup
reloader.stop();
}
```
## Logging
This library uses the [logging](https://pub.dev/packages/logging) package for logging.
You can configure the logging framework and change the [log-level](https://github.com/dart-lang/logging/blob/master/lib/src/level.dart) programmatically like this:
```dart
import 'dart:io' as io;
import 'dart:isolate';
import 'package:hotreloader/hotreloader.dart';
import 'package:logging/logging.dart' as logging;
Future main() async {
logging.hierarchicalLoggingEnabled = true;
// print log messages to stdout/stderr
logging.Logger.root.onRecord.listen((msg) =>
(msg.level < logging.Level.SEVERE ? io.stdout : io.stderr)
.write('${msg.time} ${msg.level.name} [${Isolate.current.debugName}] ${msg.loggerName}: ${msg.message}\n')
);
HotReloader.logLevel = logging.Level.CONFIG;
final reloader = await HotReloader.create();
// ... your other code
// cleanup
reloader.stop();
}
```
## Alternatives
- https://pub.dev/packages/angel_hot
- https://pub.dev/packages/jaguar_hotreload
- https://pub.dev/packages/recharge
- https://pub.dev/packages/reloader
## Changelog / Version History
This project maintains a [changelog](CHANGELOG.md) and adheres to [Semantic Versioning](https://semver.org) and [Keep a CHANGELOG](https://keepachangelog.com)
## License
All files are released under the [Apache License 2.0](LICENSE.txt).
Individual files contain the following tag instead of the full license text:
```
SPDX-License-Identifier: Apache-2.0
```
This enables machine processing of license information based on the SPDX License Identifiers that are available here: https://spdx.org/licenses/.