idkit_gshared 0.0.1 copy "idkit_gshared: ^0.0.1" to clipboard
idkit_gshared: ^0.0.1 copied to clipboard

A convenient global shared data package for Flutter projects.

example/lib/main.dart

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

/// Global Shared Simple Interest
final IDKitGShared gShared = IDKitGShared();

/// Test class
class TestInfo {
  final String name;
  const TestInfo(this.name);
}

void main() {
  gShared.register<int>(520);
  gShared.register<int>(1314, mark: 'love');
  gShared.register(
    const TestInfo('Asynchronous registration'),
  );
  gShared.register(
    const TestInfo('Asynchronous registration - Mark'),
    mark: 'r_mark',
  );

  gShared.register<Future<String>>(
    Future.delayed(const Duration(seconds: 1), () {
      return '110';
    }),
  );
  gShared.register<Future<TestInfo>>(
    Future.delayed(const Duration(seconds: 1), () {
      return const TestInfo('120');
    }),
    mark: 'mark',
  );
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('idkit_gshared test'),
      ),
      body: Container(
        alignment: Alignment.center,
        child: Column(
          children: [
            Text('${gShared.read<int>() ?? 0}'),
            Text('${gShared.read<int>(mark: 'love') ?? 0}'),
            Text('${gShared.read<TestInfo>()?.name ?? 0}'),
            Text('${gShared.read<TestInfo>()?.name ?? 0}'),
            FutureBuilder<String>(
              future: gShared.read<Future<String>>(),
              initialData: '000',
              builder: (_, AsyncSnapshot<String> snapshot) {
                return Text('${snapshot.data}');
              },
            ),
            FutureBuilder<String>(
              future: gShared.read<Future<String>>(mark: 'mark'),
              initialData: '000 - mark',
              builder: (_, AsyncSnapshot<String> snapshot) {
                return Text('${snapshot.data}');
              },
            ),
            ElevatedButton(
              child: const Text('Next Step'),
              onPressed: () {
                Navigator.of(context).push(MaterialPageRoute(builder: (_) {
                  return const SecondPage();
                }));
              },
            )
          ],
        ),
      ),
    );
  }
}

class SecondPage extends StatefulWidget {
  const SecondPage({Key? key}) : super(key: key);

  @override
  State<SecondPage> createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
  late int count = 0;

  @override
  Widget build(BuildContext context) {
    gShared.registerListen<String>();
    gShared.registerListen<String>(mark: 'mark');
    return Scaffold(
      appBar: AppBar(
        title: const Text('idkit_gshared:Multi-layer data sharing'),
      ),
      body: Container(
        alignment: Alignment.center,
        child: Column(
          children: <Widget>[
            const SizedBox(
              height: 20,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(gShared.read<String>(mark: 'wz') ?? 'defaulu value: network'),
                StreamBuilder<String?>(
                  stream: gShared.watch<String>(),
                  initialData: 'listen - 0',
                  builder: (_, s) {
                    final String? a = s.data;
                    return Text(a ?? 'listen - 0');
                  },
                ),
                StreamBuilder<String?>(
                  stream: gShared.watch<String>(mark: 'mark'),
                  initialData: 'listen - 0',
                  builder: (_, s) {
                    final String? a = s.data;
                    return Text(a ?? 'listen - 0');
                  },
                )
              ],
            ),
            const SizedBox(
              height: 20,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: <Widget>[
                ElevatedButton(
                  onPressed: () {
                    count++;
                    gShared.add<String>('listen - $count', mark: 'listen');
                  },
                  child: const Text('Add Count + 1'),
                ),
                ElevatedButton(
                  onPressed: () {
                    Navigator.of(context).push(MaterialPageRoute(builder: (_) {
                      return const ThreePage();
                    }));
                  },
                  child: const Text('Next Step Button'),
                ),
                ElevatedButton(
                  onPressed: () {
                    gShared.unRegister<String>();
                    gShared.unRegister<String>(mark: 'mark');
                    gShared.unRegisterAll();
                    gShared.unRegisterAll(listen: true);
                    gShared.update<String>((value) => 'I am a baby!');
                  },
                  child: const Text('Update Data'),
                )
              ],
            )
          ],
        ),
      ),
    );
  }
}

class ThreePage extends StatefulWidget {
  const ThreePage({Key? key}) : super(key: key);

  @override
  State<ThreePage> createState() => _ThreePageState();
}

class _ThreePageState extends State<ThreePage> {
  late int count = 0;

  @override
  Widget build(BuildContext context) {
    gShared.convertListen<int>();
    gShared.unRegisterListen<String>();
    gShared.unRegisterListen<String>(mark: 'mark');

    return Scaffold(
      appBar: AppBar(
        title: const Text('Three Page 3'),
      ),
      body: Container(
        alignment: Alignment.center,
        child: Column(
          children: <Widget>[
            Text(gShared.read<String>() ?? ''),
            StreamBuilder<int?>(
              stream: gShared.watch<int>(),
              initialData: 0000,
              builder: (_, s) {
                return Text('${s.data ?? 1111}');
              },
            )
          ],
        ),
      ),
      floatingActionButton: ElevatedButton(
        child: const Text('Add Change + 1'),
        onPressed: () {
          count++;
          gShared.add<int>(count);
        },
      ),
    );
  }
}
1
likes
120
pub points
0%
popularity

Publisher

unverified uploader

A convenient global shared data package for Flutter projects.

Repository (GitHub)
View/report issues

Documentation

API reference

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on idkit_gshared