shipbook_flutter 1.0.0 copy "shipbook_flutter: ^1.0.0" to clipboard
shipbook_flutter: ^1.0.0 copied to clipboard

Shipbook gives you the power to remotely gather, search and analyze your user logs and exceptions in the cloud, on a per-user & session basis.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:shipbook_flutter/shipbook_flutter.dart';
final log = Shipbook.getLogger("main");

void main() {
  runApp(const MyApp());
  Shipbook.enableInnerLog(true);
  const connectionUrl = String.fromEnvironment('SHIPBOOK_URL');
  const appId = String.fromEnvironment('SHIPBOOK_APP_ID');
  const appKey = String.fromEnvironment('SHIPBOOK_APP_KEY');
  if (connectionUrl.isNotEmpty) Shipbook.setConnectionUrl(connectionUrl);
  Shipbook.start(appId, appKey);
}

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

  @override
  // ignore: library_private_types_in_public_api
  _RegisterButtonState createState() => _RegisterButtonState();
}

class _RegisterButtonState extends State<RegisterButton> {
  bool isUserRegistered = false;
  int counter = 0;

  @override
  Widget build(BuildContext context) {
    return TextButton(
      onPressed: () {
        setState(() {
          if (isUserRegistered) {
            Shipbook.logout();
            isUserRegistered = false;
          } else {
            isUserRegistered = true;
            Shipbook.registerUser('test$counter', fullName: 'Test User $counter', email: 'test$counter@test.com', additionalInfo: {'key1': 'value1', 'key2': 'value2'});
            counter++;
          }
        });
      },
      child: Text(!isUserRegistered ? 'Register user [test$counter]' : 'Logout from Shipbook'),
    );
  }
}

class ScreenButton extends StatelessWidget {
  const ScreenButton({super.key, required this.screenName});

  final String screenName;

  @override
  Widget build(BuildContext context) {
    return TextButton(
      onPressed: () {
        Shipbook.screen(screenName);
      },
      child: Text('Set screen to $screenName'),
    );
  }
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Shipbook Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Shipbook Example'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  Widget _logButton(BuildContext context, String label, VoidCallback action) {
    return TextButton(
      onPressed: () {
        action();
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Sent: $label'), duration: const Duration(seconds: 1)),
        );
      },
      child: Text(label),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const RegisterButton(),
            const ScreenButton(screenName: 'Home'),
            const Divider(),
            const Text('Log Levels', style: TextStyle(fontWeight: FontWeight.bold)),
            Wrap(
              spacing: 8,
              children: [
                _logButton(context, 'Error', () => log.e('Test error message')),
                _logButton(context, 'Warning', () => log.w('Test warning message')),
                _logButton(context, 'Info', () => log.i('Test info message')),
                _logButton(context, 'Debug', () => log.d('Test debug message')),
                _logButton(context, 'Verbose', () => log.v('Test verbose message')),
              ],
            ),
            const Divider(),
            _logButton(context, 'Log Exception', () {
              try {
                throw StateError('Test exception from example app');
              } catch (e) {
                log.e('Caught exception', e as Error);
              }
            }),
            _logButton(context, 'Throw Uncaught Exception', () {
              throw StateError('Uncaught exception from example app');
            }),
          ],
        ),
      ),
    );
  }
}
1
likes
130
points
22
downloads

Publisher

verified publishershipbook.io

Weekly Downloads

Shipbook gives you the power to remotely gather, search and analyze your user logs and exceptions in the cloud, on a per-user & session basis.

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

device_info_plus, flutter, http, package_info_plus, shared_preferences

More

Packages that depend on shipbook_flutter