ispect 1.0.3 copy "ispect: ^1.0.3" to clipboard
ispect: ^1.0.3 copied to clipboard

Wrapper around Inspector, Talker and etc.

example/lib/main.dart

// ignore_for_file: depend_on_referenced_packages

import 'package:flutter/material.dart';
import 'package:ispect/ispect.dart';
import 'package:ispect_example/src/core/localization/generated/l10n.dart';
import 'package:talker_flutter/talker_flutter.dart';

GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();

void main() {
  final talker = TalkerFlutter.init();
  talker.debug('Hello World!');
  talkerWrapper.initHandling(talker: talker);
  runApp(App(talker: talker));
}

class App extends StatefulWidget {
  final Talker talker;
  const App({super.key, required this.talker});

  @override
  State<App> createState() => _AppState();
}

class _AppState extends State<App> {
  final ISpectController controller = ISpectController();
  final AppConfigController appConfigController = AppConfigController();

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    final ISpectOptions options = ISpectOptions(
      talker: widget.talker,
      themeMode: ThemeMode.dark,
      lightTheme: ThemeData.light(),
      darkTheme: ThemeData.from(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.blue,
          brightness: Brightness.dark,
        ),
      ),
      locale: const Locale('en'),
      controller: controller,
    );

    return MaterialApp(
      navigatorKey: navigatorKey,
      navigatorObservers: [
        TalkerRouteObserver(widget.talker),
      ],
      localizationsDelegates: ISpectLocalizations.localizationDelegates([AppGeneratedLocalization.delegate]),
      theme: ThemeData.light(),
      darkTheme: options.darkTheme,
      themeMode: ThemeMode.dark,
      builder: (context, child) {
        child = ISpectWrapper(
          navigatorKey: navigatorKey,
          options: options,
          isEnabled: appConfigController.isPanelVisible,
          child: child,
        );

        return child;
      },
      home: _Home(
        controller: appConfigController,
      ),
    );
  }
}

class _Home extends StatefulWidget {
  final AppConfigController controller;
  const _Home({required this.controller});

  @override
  State<_Home> createState() => __HomeState();
}

class __HomeState extends State<_Home> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(AppGeneratedLocalization.of(context).app_title),
            Switch(
              value: widget.controller.isPanelVisible,
              onChanged: (value) {
                widget.controller.isPanelVisible = value;
              },
            ),
          ],
        ),
      ),
    );
  }
}

final class AppConfigController extends ChangeNotifier {
  bool isPanelVisible = true;

  void setPanelVisibility(bool value) {
    isPanelVisible = value;
    notifyListeners();
  }
}