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
16
downloads

Documentation

API reference

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

License

MIT (license)

Dependencies

device_info_plus, flutter, http, package_info_plus, shared_preferences

More

Packages that depend on shipbook_flutter