locality_social_cloud 1.7.0 copy "locality_social_cloud: ^1.7.0" to clipboard
locality_social_cloud: ^1.7.0 copied to clipboard

Write social apps with Flutter. This code connects to the backend of Locality Social Cloud to provide realtime state synchronization across devices.

example/locality_social_cloud_example.dart

import 'package:flutter/material.dart';
import 'package:locality_social_cloud/api/locality_social_cloud.dart';
import 'package:provider/provider.dart';

Future<LocalitySocialCloud?> startCloud() async {
  return LocalitySocialCloud.up(
    appId: "YOUR_APP_ID",

    /// NOTE: The last letter of your app secret is '='; It is NOT whitespace
    appSecret: "YOUR_APP_SECRET",
    username: "YOUR_USERNAME",
    password: "YOUR_PASSWORD",
    onError: (AuthError error) {
      print(error.toString());
    },
  );
}

GlobalClickCounter globalClickCounter = GlobalClickCounter();

void main() async {
  LocalitySocialCloud? myCloud = await startCloud();
  if (myCloud != null) {
    print("Locality Social Cloud was started!");
  }
  LocalitySocialCloud.supervise(globalClickCounter);
  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => globalClickCounter),
      ],
      child: const MyApp(),
    ),
  );
}

class GlobalClickCounter extends ThrottledChangeNotifier with PubSub {
  int counter = 0;

  /// This is a global click counter. All users can increase the click counter. All users see the same click counter.
  @override
  String getTopic() {
    return 'global-click-counter';
  }

  void increaseCounterByOne() {
    print("INCERASE COUNTER");
    send('increaseCounter', {'amount': 1});
  }

  @override
  void onReceive(LocalityEvent localityEvent) {
    switch (localityEvent.event) {
      case 'increaseCounter':
        counter += localityEvent.payload['amount'] as int;
        notifyListeners();
        break;
    }
  }
}

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

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

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

  final String title;

  @override
  Widget build(BuildContext context) {
    final globalClickCounter = Provider.of<GlobalClickCounter>(context);

    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('You have pushed the button this many times globally:'),
            Consumer<GlobalClickCounter>(
              builder: (context, globalClickCounter, child) => Text(
                '${globalClickCounter.counter}',
                style: Theme.of(context).textTheme.headlineMedium,
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          globalClickCounter.increaseCounterByOne();
        },
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}
2
likes
140
points
26
downloads

Publisher

verified publisherlocality.media

Weekly Downloads

Write social apps with Flutter. This code connects to the backend of Locality Social Cloud to provide realtime state synchronization across devices.

Homepage
Repository
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

connectivity_plus, crypto, cupertino_icons, flutter, http, m511chacha20, phoenix_socket, provider, sqflite, sqflite_common_ffi, theory, uuid

More

Packages that depend on locality_social_cloud