dbas_sqlite 2.4.4 copy "dbas_sqlite: ^2.4.4" to clipboard
dbas_sqlite: ^2.4.4 copied to clipboard

Flutter plugin that access SQLite for Android, iOS, macOS, Linux, Windows and Web.

example/lib/main.dart

import 'package:dbas_sqlite/dbas_sqlite.dart';
import 'package:flutter/material.dart';

import 'src/tabs/tab_crud.dart';
import 'src/tabs/tab_db_ops.dart';
import 'src/tabs/tab_setup.dart';
import 'src/widgets/log_panel.dart';

void main() {
  runApp(const DbasExampleApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DBAS SQLite Example',
      theme: ThemeData(
        colorSchemeSeed: Colors.indigo,
        useMaterial3: true,
      ),
      home: const ExampleHomePage(),
    );
  }
}

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

  @override
  State<ExampleHomePage> createState() => _ExampleHomePageState();
}

class _ExampleHomePageState extends State<ExampleHomePage> {
  DbasSqlite? _db;
  bool _isLoading = false;
  final List<String> _log = [];
  final ScrollController _logScrollController = ScrollController();

  Future<void> _runOp(Future<void> Function() op) async {
    setState(() => _isLoading = true);
    try {
      await op();
    } finally {
      if (mounted) setState(() => _isLoading = false);
    }
  }

  void _addLog(String message) {
    final now = DateTime.now();
    final timestamp =
        '${now.hour.toString().padLeft(2, '0')}:'
        '${now.minute.toString().padLeft(2, '0')}:'
        '${now.second.toString().padLeft(2, '0')}';

    setState(() {
      // Lines starting with spaces are continuation lines (e.g. row data), no timestamp
      if (message.startsWith(' ')) {
        _log.add('         $message');
      } else {
        _log.add('$timestamp $message');
      }
    });

    WidgetsBinding.instance.addPostFrameCallback((_) {
      if (_logScrollController.hasClients) {
        _logScrollController.jumpTo(
          _logScrollController.position.maxScrollExtent,
        );
      }
    });
  }

  void _clearLog() {
    setState(() {
      _log.clear();
    });
  }

  void _onDbChanged(DbasSqlite? newDb) {
    setState(() {
      _db = newDb;
    });
  }

  @override
  void dispose() {
    _logScrollController.dispose();
    _db?.closeDb();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('DBAS SQLite Example'),
          bottom: const TabBar(
            tabs: [
              Tab(icon: Icon(Icons.settings), text: 'Setup'),
              Tab(icon: Icon(Icons.table_chart), text: 'CRUD'),
              Tab(icon: Icon(Icons.storage), text: 'DB Ops'),
            ],
          ),
        ),
        body: Column(
          children: [
            Expanded(
              child: TabBarView(
                children: [
                  SetupTab(
                    db: _db,
                    isLoading: _isLoading,
                    onLog: _addLog,
                    onDbChanged: _onDbChanged,
                    runOp: _runOp,
                  ),
                  CrudTab(
                    db: _db,
                    isLoading: _isLoading,
                    onLog: _addLog,
                    runOp: _runOp,
                  ),
                  DbOpsTab(
                    db: _db,
                    isLoading: _isLoading,
                    onLog: _addLog,
                    onDbChanged: _onDbChanged,
                    runOp: _runOp,
                  ),
                ],
              ),
            ),
            SizedBox(
              height: 200,
              child: LogPanel(
                entries: _log,
                controller: _logScrollController,
                onClear: _clearLog,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
1
likes
150
points
--
downloads

Documentation

API reference

Publisher

verified publisherdailysoftwaresystems.com

Weekly Downloads

Flutter plugin that access SQLite for Android, iOS, macOS, Linux, Windows and Web.

Repository (GitHub)
View/report issues

License

Apache-2.0 (license)

Dependencies

decimal, ffi, flutter, flutter_web_plugins, path, path_provider, plugin_platform_interface, web

More

Packages that depend on dbas_sqlite

Packages that implement dbas_sqlite