devtools_app_shared 0.3.0 copy "devtools_app_shared: ^0.3.0" to clipboard
devtools_app_shared: ^0.3.0 copied to clipboard

Platformweb

Package of Dart & Flutter structures shared between devtools_app and devtools extensions.

Shared DevTools Components #

This package contains UI, utility, and service components from Dart & Flutter DevTools that can be shared between DevTools, DevTools extensions, and other tooling surfaces that need the same logic or styling.

Usage #

The following will add the package as a dependency to your pubspec.yaml (and run an implicit flutter pub get):

$ flutter pub add devtools_app_shared

Import the component library that you need:

import 'package:devtools_app_shared/service.dart';
import 'package:devtools_app_shared/service_extensions.dart' as extensions;
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';

Examples #

  1. Set and access global variables.
import 'package:devtools_app_shared/utils.dart';

MyCoolClass get coolClass => globals[MyCoolClass] as MyCoolClass;

void main() {
  // Creates a globally accessible variable (`globals[ServiceManager]`);
  setGlobal(MyCoolClass, MyCoolClass());
  coolClass.foo();
}
  1. Use utilities like the AutoDisposeMixin, which supports adding listeners that will automatically dispose as part of the StatefulWidget lifecycle.
import 'package:devtools_app_shared/utils.dart';

class MyStatefulWidget extends StatefulWidget {
  const MyStatefulWidget({super.key});

  @override
  State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget>
    with AutoDisposeMixin {
  var foo = 'hi';

  @override
  void initState() {
    super.initState();
    addAutoDisposeListener(someListenable, () {
      setState(() {
        foo = '$foo hi';
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Text(foo);
  }
}
  1. Access shared UI components and styling.
import 'package:devtools_app_shared/ui.dart';
...
@override
Widget build(BuildContext context) {
  return RoundedOutlinedBorder( // Shared component
    child: Column(
      children: [
        AreaPaneHeader( // Shared component
          roundedTopBorder: false,
          includeTopBorder: false,
          title: Text('This is a section header'),
        ),
        Expanded(
          child: FooWidget(
            child: Text(
              'Foo',
              style: Theme.of(context).subtleTextStyle, // Shared style
            ),
          ),
        ),
      ],
    ),
  );
}
  1. VM service management, including access to isolates and service extensions.
import 'package:devtools_app_shared/service.dart';
import 'package:devtools_app_shared/service_extensions.dart' as extensions;
import 'package:devtools_shared/service.dart';

void main() {
  final serviceManager = ServiceManager();

  // Use the [connectedState] notifier to listen for connection updates.
  serviceManager.connectedState.addListener(() {
    if (serviceManager.connectedState.value.connected) {
      print('Manager connected to VM service');
    } else {
      print('Manager not connected to VM service');
    }
  });

  // To get a [VmService] object from a vm service URI, consider importing
  // `package:devtools_shared/service.dart` from `package:devtools_shared`.
  final finishedCompleter = Completer<void>();
  final vmService = await connect<VmService>(
    uri: Uri.parse(vmServiceUri),
    finishedCompleter: finishedCompleter,
    serviceFactory: VmService.defaultFactory,
  );

  await serviceManager.vmServiceOpened(
    vmService,
    onClosed: finishedCompleter.future,
  );

  // Get a service extension state.
  final ValueListenable<ServiceExtensionState> performanceOverlayEnabled =
      serviceManager.manager.serviceExtensionManager.getServiceExtensionState(
        extensions.performanceOverlay.extension,
      );

  // Set a service extension state.
  await serviceManager.manager.serviceExtensionManager.setServiceExtensionState(
    extensions.performanceOverlay.extension,
    enabled: true,
    value: true,
  );

  // Access isolates.
  final myIsolate = serviceManager.isolateManager.mainIsolate.value;

  // Etc.
}

Issues & feedback #

This package is developed as part of the larger flutter/devtools project. Please report any issues or feedback there.

Supported Flutter versions #

This package follows the flutter/packages policy for supported Flutter versions, which states that a package will support the latest stable version of Flutter, as well as the current master. In practice, this package will often support older versions as well, as minimum version requirements are generally only updated when there is a specific need, such as using a new DevTools or Flutter feature.

10
likes
150
points
11.5k
downloads

Publisher

verified publisherflutter.dev

Weekly Downloads

Package of Dart & Flutter structures shared between devtools_app and devtools extensions.

Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

collection, dds_service_extensions, devtools_shared, dtd, flutter, logging, meta, path, pointer_interceptor, url_launcher, vm_service, web

More

Packages that depend on devtools_app_shared