Guard-julia: Guard Plugin for Julia Development

Guard::Julia

Julia guard automatically launches respective tests when Julia files are modified.

The codebase's architecture is largely derived from guard-minitest.

Installation

Ruby must be installed, then run:

$ gem install bundler
$ cd /your/julia/project/dir
$ bundle init

Add this line to your project's newly created Gemfile:

gem 'guard-julia'

And then execute:

$ bundle

Usage

Please read Guard usage documentation.

To create the Guardfile run:

$ bundle exec guard init julia

Then run guard itself:

$ bundle exec guard

Options

all_on_start: true # Run all tests on startup
julia_file_path: 'julia' # File path to Julia executable
all_tests_file: 'test/runtests.jl' # File to run all tests
cli: ['--code-coverage'] # CLI arguments to Julia
env: {} # Environment variables

You can pass any of these options in the Guardfile like so:

guard :julia, cli: ['--code-coverage', '-p 1'] do
  # ...
end

Contributing

  1. Fork it ( http://github.com/svs14/guard-julia/fork )
  2. Get all dependencies (bundle)
  3. Create your feature branch (git checkout -b my-new-feature)
  4. Commit your changes (git commit -am 'Add some feature')
  5. Make sure tests pass (bundle exec rake test)
  6. Follow RuboCop's advice (bundle exec rubocop)
  7. Push to the branch (git push origin my-new-feature)
  8. Create new Pull Request

Download Details:

Author: svs14
Source Code: https://github.com/svs14/guard-julia 
License: MIT license

#julia #plugin 

Guard-julia: Guard Plugin for Julia Development
Hunter  Krajcik

Hunter Krajcik

1659533400

Admost Flutter Plugin: Admost Is A Full-cycle Mobile Monetization tool

admost_flutter_plugin

A new Flutter plugin that uses native platform views to show AdMost mediation platform banner ads!

This plugin also has support for Interstitial and Reward ads.

Installation

Add thidars to your pubspec.yml dependencies:

admost_flutter_plugin: "^1.2.4"

Add the related dependencies into android/app/build.graddle. Dependencies changes according to your ad network choices. The items shown below represents Facebook audience network dependencies chosen as sample. Refer to the admost android documentation for necessary dependencies for selected ad networks for an application.

    dependencies {
        implementation 'com.admost.sdk:facebook-adapter:6.11.0.a31' 
        implementation 'androidx.annotation:annotation:1.2.0' 
    }

It may be needed to add extra repository based on ad network selection. This configuration can be found in the admost android documentation as well.

Simple Example

import 'package:flutter/material.dart';
import 'package:admost_flutter_plugin/admost.dart';
import 'package:admost_flutter_plugin/admost_interstitial.dart';
import 'package:admost_flutter_plugin/admost_rewarded.dart';
import 'package:admost_flutter_plugin/admost_ad_events.dart';
import 'package:admost_flutter_plugin/admost_banner.dart';
import 'package:admost_flutter_plugin/admost_banner_size.dart';
import 'package:admost_flutter_plugin/admost_native_ad.dart';
import 'dart:io';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Map<String, String> conf = {
    "appId": Platform.isIOS
        ? "15066ddc-9c18-492c-8185-bea7e4c7f88c"
        : "6cc8e89a-b52a-4e9a-bb8c-579f7ec538fe",
    "userConsent": "1",
    "subjectToGDPR": "1",
    "subjectToCCPA": "0"
  };
  Admost.initialize(conf);
  runApp(MyApp());
}

/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: MyHomePage(),
      ),
    );
  }
}

/// This is the stateless widget that the main application instantiates.
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String interstitialText = 'Load Interstitial';
  String rewardedText = 'Load Rewarded';

  AdmostInterstitial interstitialAd;
  AdmostRewarded rewardAd;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(10),
      child: Center(
        widthFactor: 2,
        heightFactor: 2,
        child: Column(children: <Widget>[
          Card(
            child: InkWell(
              splashColor: Colors.blue.withAlpha(30),
              onTap: () async {
                if (interstitialAd == null) {
                  interstitialAd = AdmostInterstitial(
                    zoneId: Platform.isIOS
                        ? '39f74377-5682-436a-9338-9d1c4df410bd'
                        : 'f99e409b-f9ab-4a2e-aa9a-4d143e6809ae',
                    listener: (AdmostAdEvent event, Map<String, dynamic> args) {
                      if (event == AdmostAdEvent.loaded) {
                        interstitialText = 'Show Interstitial';
                        setState(() {
                          interstitialText;
                        });
                      }
                      if (event == AdmostAdEvent.dismissed) {
                        interstitialText = 'Load Interstitial';
                        setState(() {
                          interstitialText;
                        });
                      }
                      if (event == AdmostAdEvent.failedToLoad) {
                        print("failedToLoad");
                        print("Error code: ${args['errorCode']}");
                      }
                      if (event == AdmostAdEvent.statusChanged) {
                        print("statusChanged");
                        print("Status: ${args['status']}");
                      }
                    },
                  );
                }

                if (await interstitialAd.isLoaded) {
                  interstitialAd.show("YOUR TAG");
                } else {
                  interstitialAd.load();
                }
              },
              child: Center(
                widthFactor: 2,
                heightFactor: 2,
                child: Text(interstitialText),
              ),
            ),
          ),
          Card(
            child: InkWell(
              splashColor: Colors.blue.withAlpha(30),
              onTap: () async {
                if (rewardAd == null) {
                  rewardAd = AdmostRewarded(
                    zoneId: Platform.isIOS
                        ? '2bdefd44-5269-4cbc-b93a-373b74a2f067'
                        : '88cfcfd0-2f8c-4aba-9f36-cc0ac99ab140',
                    listener: (AdmostAdEvent event, Map<String, dynamic> args) {
                      if (event == AdmostAdEvent.loaded) {
                        rewardedText = 'Show Rewarded';
                        setState(() {
                          rewardedText;
                        });
                      } else if (event == AdmostAdEvent.dismissed) {
                        rewardedText = 'Load Rewarded';
                        setState(() {
                          rewardedText;
                        });
                      } else if (event == AdmostAdEvent.failedToLoad) {
                        print("failedToLoad");
                      } else if (event == AdmostAdEvent.completed) {
                        print("REWARDED");
                      }
                    },
                  );
                }

                if (await rewardAd.isLoaded) {
                  rewardAd.show("YOUR TAG");
                } else {
                  rewardAd.load();
                }
              },
              child: Center(
                widthFactor: 2,
                heightFactor: 2,
                child: Text(rewardedText),
              ),
            ),
          ),
          Card(
            child: AdmostBanner(
              adUnitId: Platform.isIOS
                  ? "b4009772-de04-42c4-bbaa-c18da9e4a1ab"
                  : '9fb970db-7d96-4ef2-ac8c-d88ec22270ff',
              adSize: AdmostBannerSize.LEADERBOARD,
              listener: (AdmostAdEvent event, Map<String, dynamic> args) {
                if (event == AdmostAdEvent.loaded) {
                  print("ADMOST Ad Loaded");
                }
                if (event == AdmostAdEvent.clicked) {
                  print("ADMOST Ad clicked");
                }
                if (event == AdmostAdEvent.failedToLoad) {
                  print("Error code: ${args['errorCode']}");
                }
              },tag:'YOUR TAG',
            ),
          ),
          Card(
            child: AdmostNativeAd(
              adUnitId: Platform.isIOS
                  ? 'c72a4a52-23c5-4c34-9eb1-7bbc4c08c7e4'
                  : 'f3915393-7f42-4b9d-97c3-e7d4017c7591',
              adSize: AdmostBannerSize.MEDIUM_RECTANGLE,
              xibNameForIOS: 'AMRNativeAdBaseView250',
              listener: (AdmostAdEvent event, Map<String, dynamic> args) {
                if (event == AdmostAdEvent.loaded) {
                  print("ADMOST Native Ad Loaded");
                }
                if (event == AdmostAdEvent.clicked) {
                  print("ADMOST Ad clicked");
                }
                if (event == AdmostAdEvent.failedToLoad) {
                  print("Error code: ${args['errorCode']}");
                }
              },tag:'YOUR TAG',
            ),
          )
        ]),
      ),
    );
  }
}


Custom Native Ads

IOS

For IOS it is enough to add the following parameter to the AdmostNativeAd view;

xibNameForIOS: 'AMRNativeAdBaseView250',

Android

As in the MainActivity in the example project, you can follow the following steps;

  1. Define a layout file in the android layout folder for your custom native design
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="120dp"
             android:background="@android:color/white"
             android:orientation="horizontal">

    <ImageView
        android:id="@+id/admost_flutter_back_image"
        android:layout_width="145dp"
        android:layout_marginLeft="5dp"
        android:adjustViewBounds="true"
        android:layout_gravity="left|center"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"
        android:visibility="gone"/>

    <ImageView
        android:id="@+id/admost_flutter_main_image"
        android:layout_width="145dp"
        android:layout_marginLeft="5dp"
        android:adjustViewBounds="true"
        android:layout_gravity="left|center"
        android:layout_height="wrap_content"
        android:scaleType="fitXY" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="0dp">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|left"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="5dp"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/admost_flutter_icon"
                android:layout_width="14dp"
                android:layout_height="14dp"
                android:layout_marginRight="4dp"
                android:layout_marginTop="6dp"
                android:background="@null"
                android:scaleType="fitXY" />

            <TextView
                android:id="@+id/admost_flutter_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"
                android:layout_marginRight="15dp"
                android:maxLines="1"
                android:layout_marginTop="5dp"
                android:gravity="center_vertical"
                android:text="Title"
                android:textColor="#ff000000"
                android:textSize="14sp" />
        </LinearLayout>

        <TextView
            android:id="@+id/admost_flutter_attribution"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|right"
            android:layout_marginTop="30dp"
            android:layout_marginLeft="10dp"
            android:text="Ad"
            android:textColor="#ffacabab"
            android:textSize="12sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="35dp"
            android:layout_marginLeft="10dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/admost_flutter_detail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="5dp"
                android:ellipsize="end"
                android:lineSpacingExtra="3dp"
                android:maxLines="2"
                android:paddingBottom="5dp"
                android:paddingTop="8dp"
                android:text="Title Lorem ipsom dolor sit amet consaposod elit"
                android:textColor="#cc2a2e32"
                android:textSize="12sp"/>

            <Button
                android:id="@+id/admost_flutter_cta"
                android:layout_width="match_parent"
                android:layout_height="36dp"
                android:layout_marginBottom="12dp"
                android:layout_marginTop="-10dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="Go"
                android:textStyle="bold"
                android:textSize="14sp"
                android:textColor="@android:color/black"/>

        </LinearLayout>

        <LinearLayout
            android:id="@+id/admost_flutter_ad_choices"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:gravity="right"
            android:orientation="vertical"/>
    </RelativeLayout>

</LinearLayout>

  1. Create a AdMostViewBinder object in the MainActivity and assign this object as the static native binder
val binder: AdMostViewBinder = admost.sdk.AdMostViewBinder.Builder(R.layout.custom_layout_flutter)
                .iconImageId(R.id.cardIcon)
                .titleId(R.id.cardTitle)
                .callToActionId(R.id.CallToActionTextView)
                .textId(R.id.cardDetailText)
                .attributionId(R.id.cardAttribution)
                .mainImageId(R.id.cardImage)
                .backImageId(R.id.cardBack)
                .privacyIconId(R.id.ad_choices)
                .isRoundedMode(true)
                .build()

AdmostFLTNativeAdBinder.getInstance().binder = binder;

Track IAP

IOS

Admost.trackIAPForIOS(transactionId, currency, amount, ['tag1', 'tag2']);

Android

Admost.trackIAPForAndroid(originalJSON, signature, currency, amount, ['tag1', 'tag2'])

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add admost_flutter_plugin

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  admost_flutter_plugin: ^1.2.4

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:admost_flutter_plugin/admost.dart';
import 'package:admost_flutter_plugin/admost_ad_events.dart';
import 'package:admost_flutter_plugin/admost_banner.dart';
import 'package:admost_flutter_plugin/admost_banner_controller.dart';
import 'package:admost_flutter_plugin/admost_banner_size.dart';
import 'package:admost_flutter_plugin/admost_event_handler.dart';
import 'package:admost_flutter_plugin/admost_interstitial.dart';
import 'package:admost_flutter_plugin/admost_ios_attrackingmanager.dart';
import 'package:admost_flutter_plugin/admost_native_ad.dart';
import 'package:admost_flutter_plugin/admost_rewarded.dart';

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:admost_flutter_plugin/admost.dart';
import 'package:admost_flutter_plugin/admost_interstitial.dart';
import 'package:admost_flutter_plugin/admost_rewarded.dart';
import 'package:admost_flutter_plugin/admost_ad_events.dart';
import 'package:admost_flutter_plugin/admost_banner.dart';
import 'package:admost_flutter_plugin/admost_banner_size.dart';
import 'package:admost_flutter_plugin/admost_native_ad.dart';
import 'package:admost_flutter_plugin/admost_ios_attrackingmanager.dart';
import 'dart:io';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Admost.initialize(
      appId: Platform.isIOS
          ? "15066ddc-9c18-492c-8185-bea7e4c7f88c"
          : "6cc8e89a-b52a-4e9a-bb8c-579f7ec538fe",
      userConsent: "1",
      subjectToGDPR: "1",
      subjectToCCPA: "0");
  //Admost.setUserId("myUniqueUserId");
  //AdmostATTrackingManager.requestTrackingAuthorization().then((value) => print("TrackingAuthorizationStatus: ${value}"));
  //AdmostATTrackingManager.getTrackingAuthorizationStatus().then((value) => print("TrackingAuthorizationStatus: ${value}"));
  runApp(MyApp());
}

/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: MyHomePage(),
      ),
    );
  }
}

/// This is the stateless widget that the main application instantiates.
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String interstitialText = 'Load Interstitial';
  String rewardedText = 'Load Rewarded';

  AdmostInterstitial interstitialAd;
  AdmostRewarded rewardAd;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(10),
      child: Center(
        widthFactor: 2,
        heightFactor: 2,
        child: Column(children: <Widget>[
          Card(
            child: InkWell(
              onTap: () {
                Admost.startTestSuite(Platform.isIOS
                    ? "15066ddc-9c18-492c-8185-bea7e4c7f88c"
                    : "6cc8e89a-b52a-4e9a-bb8c-579f7ec538fe");
              },
              child: Center(
                widthFactor: 2,
                heightFactor: 2,
                child: Text("Start Tester Info"),
              ),
            ),
          ),
          Card(
            child: InkWell(
              splashColor: Colors.blue.withAlpha(30),
              onTap: () async {
                if (interstitialAd == null) {
                  interstitialAd = AdmostInterstitial(
                    zoneId: Platform.isIOS
                        ? '39f74377-5682-436a-9338-9d1c4df410bd'
                        : 'f99e409b-f9ab-4a2e-aa9a-4d143e6809ae',
                    listener: (AdmostAdEvent event, Map<String, dynamic> args) {
                      if (event == AdmostAdEvent.loaded) {
                        print("<ADMOST> Interstitial loaded");
                        print(
                            "<ADMOST> Interstitial network: ${args['network']}");
                        print("<ADMOST> Interstitial ecpm: ${args['ecpm']}");
                        interstitialText = 'Show Interstitial';
                        setState(() {
                          interstitialText;
                        });
                      }
                      if (event == AdmostAdEvent.dismissed) {
                        print("<ADMOST> Interstitial dismissed");
                        interstitialText = 'Load Interstitial';
                        setState(() {
                          interstitialText;
                        });
                      }
                      if (event == AdmostAdEvent.opened) {
                        print("<ADMOST> Interstitial Opened");
                      }
                      if (event == AdmostAdEvent.failedToLoad) {
                        print("<ADMOST> Interstitial failedToLoad");
                        print(
                            "<ADMOST> Interstitial Error code: ${args['errorCode']}");
                        print(
                            "<ADMOST> Interstitial Error description: ${args['errorMessage']}");
                      }
                      if (event == AdmostAdEvent.failedToShow) {
                        print("<ADMOST> Interstitial failedToShow");
                        print(
                            "<ADMOST> Interstitial Error code: ${args['errorCode']}");
                        print(
                            "<ADMOST> Interstitial Error description: ${args['errorMessage']}");
                      }
                    },
                  );
                }

                if (await interstitialAd.isLoaded) {
                  interstitialAd.show();
                  // If you want to add tag, you should remove the line above and use the code below (optional)
                  // interstitialAd.show("YOUR TAG");
                } else {
                  interstitialAd.load();
                }
              },
              child: Center(
                widthFactor: 2,
                heightFactor: 2,
                child: Text(interstitialText),
              ),
            ),
          ),
          Card(
            child: InkWell(
              splashColor: Colors.blue.withAlpha(30),
              onTap: () async {
                if (rewardAd == null) {
                  rewardAd = AdmostRewarded(
                    zoneId: Platform.isIOS
                        ? '2bdefd44-5269-4cbc-b93a-373b74a2f067'
                        : '88cfcfd0-2f8c-4aba-9f36-cc0ac99ab140',
                    listener: (AdmostAdEvent event, Map<String, dynamic> args) {
                      if (event == AdmostAdEvent.loaded) {
                        print("<ADMOST> Rewarded loaded");

                        print("<ADMOST> Rewarded network: ${args['network']}");
                        print("<ADMOST> Rewarded ecpm: ${args['ecpm']}");
                        rewardedText = 'Show Rewarded';
                        setState(() {
                          rewardedText;
                        });
                      } else if (event == AdmostAdEvent.dismissed) {
                        print("<ADMOST> Rewarded dismissed");
                        rewardedText = 'Load Rewarded';
                        setState(() {
                          rewardedText;
                        });
                      } else if (event == AdmostAdEvent.failedToLoad) {
                        print("<ADMOST> Rewarded failedToLoad");
                        print(
                            "<ADMOST> Rewarded Error code: ${args['errorCode']}");
                        print(
                            "<ADMOST> Rewarded Error description: ${args['errorMessage']}");
                      } else if (event == AdmostAdEvent.failedToShow) {
                        print("<ADMOST>  Rewarded failedToShow");
                        print(
                            "<ADMOST> Rewarded Error code: ${args['errorCode']}");
                        print(
                            "<ADMOST> Rewarded Error description: ${args['errorMessage']}");
                      } else if (event == AdmostAdEvent.opened) {
                        print("<ADMOST> Rewarded Opened");
                      } else if (event == AdmostAdEvent.completed) {
                        print("<ADMOST> Rewarded completed");
                      }
                    },
                  );
                }

                if (await rewardAd.isLoaded) {
                  rewardAd.show();
                  // If you want to add tag, you should remove the line above and use the code below (optional)
                  // rewardAd.show("YOUR TAG");
                } else {
                  rewardAd.load();
                }
              },
              child: Center(
                widthFactor: 2,
                heightFactor: 2,
                child: Text(rewardedText),
              ),
            ),
          ),
          Card(
            child: AdmostBanner(
              adUnitId: Platform.isIOS
                  ? "b4009772-de04-42c4-bbaa-c18da9e4a1ab"
                  : '9fb970db-7d96-4ef2-ac8c-d88ec22270ff',
              adSize: AdmostBannerSize.LEADERBOARD,
              listener: (AdmostAdEvent event, Map<String, dynamic> args){
                if (event == AdmostAdEvent.loaded) {
                  print("<ADMOST> Banner Ad network: ${args['network']}");
                  print("<ADMOST> Banner Ad ecpm: ${args['ecpm']}");
                  print("<ADMOST> Banner Ad Loaded");
                }
                if (event == AdmostAdEvent.clicked) {
                  print("<ADMOST> Banner Ad network: ${args['network']}");
                  print("<ADMOST> Banner Ad clicked");
                }
                if (event == AdmostAdEvent.failedToLoad) {
                  print(
                      "<ADMOST> Banner Error description: ${args['errorMessage']}");
                  print("<ADMOST Banner Error code: ${args['errorCode']}");
                }
              },
              //optional
              //tag:"YOUR TAG",
            ),
          ),
          Card(
            child: AdmostNativeAd(
              adUnitId: Platform.isIOS
                  ? 'c72a4a52-23c5-4c34-9eb1-7bbc4c08c7e4'
                  : '951d398e-b6ec-40a7-bc80-6b4b223418df',
              adSize: AdmostBannerSize.MEDIUM_RECTANGLE,
              xibNameForIOS: 'AMRNativeAdBaseView250',
              listener: (AdmostAdEvent event, Map<String, dynamic> args) {
                if (event == AdmostAdEvent.loaded) {
                  print("<ADMOST> Native Ad network: ${args['network']}");
                  print("<ADMOST> Native Ad ecpm: ${args['ecpm']}");
                  print("<ADMOST> Native Ad Loaded");
                }
                if (event == AdmostAdEvent.clicked) {
                  print("<ADMOST> Native Ad network: ${args['network']}");
                  print("<ADMOST> Native Ad clicked");
                }
                if (event == AdmostAdEvent.failedToLoad) {
                  print("<ADMOST> Native Ad Error code: ${args['errorCode']}");
                  print(
                      "<ADMOST> Native Ad Error description: ${args['errorMessage']}");
                }
              },
              //optional
              //tag:"YOUR TAG",
            ),
          )
        ]),
      ),
    );
  }
}

Original article source at: https://pub.dev/packages/admost_flutter_plugin 

#flutter #dart #plugin 

Admost Flutter Plugin: Admost Is A Full-cycle Mobile Monetization tool
Reid  Rohan

Reid Rohan

1659520020

Powercord Plugin to Make "divider" Roles into Actual Dividers

Powecord Role Dividers

Turns "divider" roles into actual dividers.

Before:
Before
After:
After

A divider role I have is not being shown as a divider.

This plugin was made to support a variety of divider formats. However, if a certain divider name isn't working (or is being flagged incorrectly), please create an issue with the role name so I can update the plugin to support it.

How can I change the divider style?

You can style the dividers by selecting the .role-divider class. Here's an example made by @12944qwerty:

.role-divider {
  font-weight: normal !important;
  text-transform: capitalize;
  margin-bottom: 2px;
  margin-top: 2px !important;
}

Custom style

How do I remove a divider role from someone in my server?

You can manage divider roles in the member context menu. Right click on the member and go to the "Roles" section, then click on any roles you want to remove.

Some divider roles are completely missing from a member!

By default, this plugin will hide any divider roles that do not have any roles under them. This can be turned off in settings.

Author: Asportnoy
Source Code: https://github.com/asportnoy/powercord-role-dividers 
License: MIT license

#javascript #plugin 

Powercord Plugin to Make "divider" Roles into Actual Dividers
Nat  Grady

Nat Grady

1659518956

Nvim-R: Vim Plugin to Work with R

Nvim-R

This is the development code of Nvim-R which improves Vim's support to edit R code.

Installation

If you use a plugin manager, such as vim-plug, follow its instructions on how to install plugins from github.

To install the stable version of the plugin, if using vim-plug, put this in your vimrc/init.vim:

Plug 'jalvesaq/Nvim-R', {'branch': 'stable'}

The stable branch is a copy of the last released version plus minor bug fixes eventually found after the release. I plan to keep the stable branch compatible with Ubuntu LTS releases, and the master branch compatible with Ubuntu normal releases. If you need an older version, you could try either the oldstable branch or one of the tagged versions.

James Eapen maintains an online version of the plugin's documentation. Please, read the section Installation for details.

Usage

Please read the plugin's documentation for instructions on usage.

Screenshots

The animated GIF below shows R running in a Neovim terminal buffer. We can note:

The editor has some code to load Afrobarometer data on Mozambique, R is running below the editor and the Object Browser is on the right side. On the R Console, we can see messages inform some packages were loaded. The messages are in magenta because they were colorized by the package colorout.

When the command library("foreign") is sent to R, the string read.spss turns blue because it is immediately recognized as a loaded function (the Vim color scheme used is southernlights).

When Mozambique's data.frame is created, it is automatically displayed in the Object Browser. Messages about unrecognized types are in magenta because they were sent to stderr, and the line Warning messages is in red because colorout recognized it as a warning.

When the "label" attributes are applied to the data.frame elements, the labels show up in the Object Browser.

The next images show results of omni completion.

The last slide shows the output of summary.

Nvim-R screenshots

The communication between R and either Vim or Neovim

In addition to sending lines of code to R Console, Nvim-R and R communicate with each other through TCP connections. The R package nvimcom runs a TCP server that receives messages from Vim/Neovim, and it also sends messages through a TCP connection to Vim/Neovim. Moreover, nvimcom includes the application nclientserver which is never used by R itself, but is run by Vim/Neovim, providing both a TCP client and a TCP server. The Diagram below shows the three paths of communication between Vim/Neovim and R:

The black path is followed by all commands that you trigger in the editor and that you can see being pasted into R Console. There are three different ways of sending the commands to R Console:

When running R in a Neovim built-in terminal, the function chansend() is used to send code to R Console.

When running R in an external terminal emulator, Tmux is used to send commands to R Console.

On Windows operating system, Nvim-R can send a message to R (nvimcom) which forwards the command to R Console.

The blue path is followed by the few commands that you trigger, but that are not pasted into R Console and do not output anything in R Console; their results are seen in the editor itself. These are the commands to do omnicompletion (of names of objects and function arguments), start and manipulate the Object Browser (\ro, \r= and \r-), call R help (\rh or :Rhelp), insert the output of an R command (:Rinsert) and format selected text (:Rformat).

The red path is followed by R messages that tell the editor to update the Object Browser, update the syntax highlight to include newly loaded libraries and open the PDF output after knitting an Rnoweb file and compiling the LaTeX result.

Neovim-R communication

Author: jalvesaq
Source Code: https://github.com/jalvesaq/Nvim-R 
License: GPL-2.0 license

#r #plugin 

Nvim-R: Vim Plugin to Work with R
Mike  Kozey

Mike Kozey

1659310620

Flutter_upshot_plugin: Created For Flutter Plugin

flutter_upshot_plugin

Upshot.ai is a analytics and customer engagement platform. This framework helps you capture analytics, track events, send smart notifications and in-app messages to users.

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add flutter_upshot_plugin

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  flutter_upshot_plugin: ^1.0.8

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:flutter_upshot_plugin/flutter_upshot_plugin.dart';

example/lib/main.dart

import 'dart:collection';
import 'dart:developer';

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

import 'package:flutter/services.dart';
import 'package:flutter_upshot_plugin/flutter_upshot_plugin.dart';
import 'package:flutter_upshot_plugin/upshotConstants.dart';
import 'package:flutter_upshot_plugin_example/upshotMethodChannel.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  String? eventId;

  @override
  void initState() {
    super.initState();
    initPlatformState();
    // initialiseBrandKinesis();
    FlutterUpshotPlugin.initializeUpshotUsingConfigFile();
    UpshotMethodChannel(context);
  }

  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      platformVersion = await FlutterUpshotPlugin.getSDKVersion ??
          'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  Future<void> initialiseBrandKinesis() async {
    try {
      await FlutterUpshotPlugin.initializeUpshotUsingConfigFile();
    } catch (e) {
      log('Error:  $e');
    }
  }

  Future<void> initializeBrandKinesisWithOptions(String appId, String ownerId,
      bool fetchLocation, bool useExternalStorage, bool enableDebugLogs) async {

    Map optionsMap = {
      UpshotInitOptions.appId.name : appId,
      UpshotInitOptions.ownerId.name: ownerId,
      UpshotInitOptions.enableDebuglogs.name: enableDebugLogs,
      UpshotInitOptions.enableLocation.name: fetchLocation,
      UpshotInitOptions.enableCrashlogs.name: true,
      UpshotInitOptions.enableExternalStorage.name: useExternalStorage
    };
    await FlutterUpshotPlugin.initialiseUpshotUsingOptions(optionsMap);
  }

  Future<void> createEvent(String eventName, HashMap<String, Object> data) async {
    try {
      String? eventID = await FlutterUpshotPlugin.createCustomEvent(eventName, data, false);
      eventId = eventID;
      log('$eventId');
    } catch (e) {
      log('Error : $e');
    }
  }

  Future<void> createLocationEvent(double lat, double long) async {
    try {
      await FlutterUpshotPlugin.createLocationEvent(lat, long);
    } catch (e) {
      log('$e');
    }
  }

  Future<void> createAttributionEvent(String attributionSource,
      String utmSource, String utmMedium, String utmCampaign) async {
    try {
      Map optionsMap = {
        UpshotAttribution.attributionSource.toString(): attributionSource,
        UpshotAttribution.utmSource.toString(): utmSource,
        UpshotAttribution.utmMedium.toString(): utmMedium,
        UpshotAttribution.utmCampaign.toString():utmCampaign
      };
      await FlutterUpshotPlugin.createAttributionEvent(optionsMap);
    } catch (e) {
      log('$e');
    }
  }

  static Future<void> sendUserDetails(HashMap<String, Object> data) async {
    await FlutterUpshotPlugin.sendUserDetails(data);
  }

  static Future<void> setValueAndClose(String eventName, Map data) async {
    await FlutterUpshotPlugin.setValueAndClose(eventName, data);
  }

  static Future<void> closeEventForId(String eventId) async {
    await FlutterUpshotPlugin.closeEventForId(eventId);
  }

  static Future<void> dispatchEventWithTime(bool time) async {
    await FlutterUpshotPlugin.dispatchEvents(time);
  }

  static Future<void> removeTutorial() async {
    await FlutterUpshotPlugin.removeTutorial();
  }

  static Future<void> createPageViewEvent(String pageName) async {
    try {
      String? eventID = await FlutterUpshotPlugin.createPageViewEvent(pageName);
      log(eventID.toString());
    } catch (e) {
      log('Error : $e');
    }
  }

  Future<void> terminateUpshot() async {
    await FlutterUpshotPlugin.terminateUpshot();
  }

  Future<void> showActivity(String tag) async {
    await FlutterUpshotPlugin.showActivity(-1, tag);
  }

  static Future<void> getBadges() async {
    await FlutterUpshotPlugin.fetchUserBadges();
  }

  static Future<void> getCampaignDetails() async {
    await FlutterUpshotPlugin.fetchInboxDetails();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(12.0),
          child: ListView(
            shrinkWrap: true,
            children: [
              const SizedBox(height: 20),
              Center(
                child: Text('Running on: $_platformVersion\n'),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  initializeBrandKinesisWithOptions(
                      "appId", "ownerId", true, true, true);
                },
                child: const Text("Initialize With Options"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () async {
                  HashMap<String, Object>? data = HashMap();
                  data['city'] = 'Bengaluru';
                  data['timesVisited'] = 20;
                  createEvent("test", data);
                },
                child: const Text("Create Event"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () async {
                  createLocationEvent(17.2365, 25.3269);
                },
                child: const Text("Create Location Event"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  terminateUpshot();
                },
                child: const Text("Terminate Upshot"),
              ),
              const SizedBox(height: 10),

              /// Pass user data as key and value pair
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  HashMap<String, Object> data = HashMap();
                  data.putIfAbsent("first_name", () => "G S Prakash");
                  data.putIfAbsent("age", () => 23);
                  data.putIfAbsent("gender", () => 1);
                  data.putIfAbsent("mail", () => "gsp8672@gmail.com");
                  data.putIfAbsent("day", () => 23);
                  data.putIfAbsent("month", () => 3);
                  data.putIfAbsent("year", () => 1996);
                  data.putIfAbsent("appUID", () => "GFKB6598BV");
                  data.putIfAbsent("facebookId", () => "some URL");
                  data.putIfAbsent("twitterId", () => "some URL");

                  /// Others Data
                  data.putIfAbsent("city", () => "Bangalore");
                  data.putIfAbsent("state", () => "Karnataka");
                  sendUserDetails(data);
                },
                child: const Text("Send User Details"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  getBadges();
                },
                child: const Text("Get Badges"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  closeEventForId('ffa1d44d-b0d6-48e3-a9f6-ae2481d90996\$c');
                },
                child: const Text("Close Event for ID"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  HashMap<String, Object>? data = HashMap();
                  data['city'] = 'Bengaluru';
                  data['timesVisited'] = 20;
                  setValueAndClose("test", data);
                },
                child: const Text("SetValue And Close"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  createPageViewEvent("Login");
                },
                child: const Text("Create page view event"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  getCampaignDetails();
                },
                child: const Text("Get VisualInbox"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  dispatchEventWithTime(true);
                },
                child: const Text("Dispatch event with time"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  removeTutorial();
                },
                child: const Text("Remove Tutorial"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  showActivity("main");
                },
                child: const Text("Show Activity"),
              ),
              const SizedBox(height: 10),
              TextButton(
                style: TextButton.styleFrom(
                    backgroundColor: Colors.black12,
                    textStyle: const TextStyle(color: Colors.white)),
                onPressed: () {
                  createAttributionEvent(
                      "attribution", "utmSource", "utmMedium", "utmCampaign");
                },
                child: const Text("Create Attribution Event"),
              ),
              const SizedBox(height: 40),
            ],
          ),
        ),
      ),
    );
  }
}

Getting Started

This project is a starting point for a Flutter plug-in package, a specialized package that includes platform-specific implementation code for Android and/or iOS.

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Author: Upshot-AI
Source Code: https://github.com/Upshot-AI/flutter_upshot_plugin 
License: MIT license

#flutter #dart #plugin 

Flutter_upshot_plugin: Created For Flutter Plugin
Hunter  Krajcik

Hunter Krajcik

1658749200

Provide Iotpay Service for Wechat, Alipay, Unionpay, Credit

iotpay_flutter_plugin

Provide Iotpay service for Wechat, Alipay, Unionpay, Credit

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add iotpay_flutter_plugin

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  iotpay_flutter_plugin: ^0.0.1

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:iotpay_flutter_plugin/iotpay_flutter_plugin.dart';

example/lib/main.dart

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

import 'package:flutter/services.dart';
import 'package:iotpay_flutter_plugin/iotpay_flutter_plugin.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    try {
      platformVersion =
          await IotpayFlutterPlugin.platformVersion ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Running on: $_platformVersion\n'),
        ),
      ),
    );
  }
}

Getting Started

This project is a starting point for a Flutter plug-in package, a specialized package that includes platform-specific implementation code for Android and/or iOS.

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Original article source at: https://pub.dev/packages/iotpay_flutter_plugin

#flutter #dart #plugin 

Provide Iotpay Service for Wechat, Alipay, Unionpay, Credit
Hunter  Krajcik

Hunter Krajcik

1658606220

indigitall_flutter_plugin: Indigitall Flutter Plugin

indigitall_flutter_plugin

indigitall flutter plugin

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add indigitall_flutter_plugin

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  indigitall_flutter_plugin: ^1.3.1

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:indigitall_flutter_plugin/indigitall_flutter_plugin.dart';

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:indigitall_flutter_plugin/core/utils/IndigitallParams.dart';
import 'package:indigitall_flutter_plugin/indigitall_flutter_plugin.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? _deviceId = 'Unknown';

  @override
  void initState() {
    super.initState();

    Map params = {
      IndigitallParams.PARAM_APP_KEY : "YOUR_APP_KEY",
      IndigitallParams.PARAM_SENDER_ID : "YOUR_SENDER_ID",
      IndigitallParams.PARAM_REQUEST_LOCATION : true,
      IndigitallParams.PARAM_WIFI_FILTER_ENABLED : true,
      IndigitallParams.PARAM_LOG_DEBUG : false
    };

    IndigitallFlutterPlugin.init(params, (device) => {
      print("init device "+ device.deviceId.toString()),
      _deviceId = device.deviceId,
    }, (device) => {
      print("init onnew device "+ device.deviceId.toString()),
      _deviceId = device.deviceId,
    }, (error) => {
      print("error init device "+ error.errorMessage.toString())
    });
  }




  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Device Id: $_deviceId\n'),
        ),
      ),
    );
  }
}

Getting Started

This project is a starting point for a Flutter plug-in package, a specialized package that includes platform-specific implementation code for Android and/or iOS.

For help getting started our sdk with Flutter, view our Indigitall online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Original article source at: https://pub.dev/packages/indigitall_flutter_plugin 

#flutter #plugin #dart 

indigitall_flutter_plugin: Indigitall Flutter Plugin
Mike  Kozey

Mike Kozey

1658533980

Flutter_plugin_qpos: A New Flutter Plugin That Development By Dspread

flutter_plugin_qpos

A new Flutter plugin.

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add flutter_plugin_qpos

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  flutter_plugin_qpos: ^0.1.3

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:flutter_plugin_qpos/flutter_plugin_qpos.dart';

example/lib/main.dart

import 'package:flutter/material.dart';
import 'pages/PluginPage.dart';
import 'pages/SecondScreen.dart';


void main() => runApp(MyApp());
Map<String, WidgetBuilder>? routes;

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          // This is the theme of your application.
          //
          // Try running your application with "flutter run". You'll see the
          // application has a blue toolbar. Then, without quitting the app, try
          // changing the primarySwatch below to Colors.green and then invoke
          // "hot reload" (press "r" in the console where you ran "flutter run",
          // or simply save your changes to "hot reload" in a Flutter IDE).
          // Notice that the counter didn't reset back to zero; the application
          // is not restarted.
          primarySwatch: Colors.blue,
        ),
        //注册路由表
        routes: {
          "/": (context) => PluginPage(),
          // '/second': (context) => SecondScreen(),
         },
        onGenerateRoute: (RouteSettings settings) {
          String? routeName = settings.name;
          print(routeName);
          return MaterialPageRoute(builder: (context) => PluginPage());
        }
    );
  }
}

Getting Started

This project is a starting point for a Flutter plug-in package, a specialized package that includes platform-specific implementation code for Android and/or iOS.

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Original article source at: https://pub.dev/packages/flutter_plugin_qpos 

#flutter #dart #plugin 

Flutter_plugin_qpos: A New Flutter Plugin That Development By Dspread
Mike  Kozey

Mike Kozey

1658402770

Jd_adjoe_plugin: Adjoe's Flutter Plugin

jd_adjoe_plugin

adjoe's flutter plugin

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add jd_adjoe_plugin

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  jd_adjoe_plugin: ^0.0.3

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:jd_adjoe_plugin/jd_adjoe_plugin.dart';

example/lib/main.dart

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

import 'package:flutter/services.dart';
import 'package:jd_adjoe_plugin/jd_adjoe_plugin.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  @override
  void initState() {
    super.initState();

  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Column(
          children: [

          ],
        ),
      ),
    );
  }
}

Official website

Author: LiJinJinJIn
Source Code: https://github.com/LiJinJinJIn/jd_adjoe_plugin 
License: View license

#flutter #dart #plugin 

Jd_adjoe_plugin: Adjoe's Flutter Plugin
Rocio  O'Keefe

Rocio O'Keefe

1658130612

Vdotok_connect: A New Flutter Plugin

vdotok_connect

Getting Started

IOS:

Add the following entry to your Info.plist file, located in

<key>NSCameraUsageDescription</key><string>$(PRODUCT_NAME) Camera Usage!</string><key>NSMicrophoneUsageDescription</key><string>$(PRODUCT_NAME) Microphone Usage!</string>

Android:

 

Ensure the following permission is present in your Android Manifest file, located in


<project root>/android/app/src/main/AndroidManifest.xml:  

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<uses-permission android:name="android.permission.INTERNET" /> 

<uses-permission android:name="android.permission.CAMERA" /> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

 

Create Client Instance:

First we need to create an instance of emitter client.

Emitter emitter = Emitter.instance; 

Add listeners:

Below described main helpful callbacks and listeners:


emitter.onConnect = (res) { 

}; 

emitter.onPresence = (res) { 

}; 

emitter.onsubscribe = (value) { 

}; 

emitter.onMessage = (msg) async { 

}; 

class used in ReadReceiptModel class to inform status of the message


class ReceiptType { 

static var sent = 1; 

static var delivered = 2; 

static var seen = 3; 

} 

Class to identify the type of file


class MediaType { 

static int image = 0; 

static int audio = 1; 

static int video = 2; 

static int file = 3; 

} 

Class to identify the type of Message


class MessageType { 

static const String text = "text"; 

static const String media = "media"; 

static const String file = "file"; 

static const String thumbnail = "thumbnail"; 

static const String path = "path"; 

static const String typing = "typing"; 

} 

SDK Methods:

Connection:

Use this method to connect socket.


emitter.connect( 

String clientId,

bool reconnectivity,

String refID,

String authorization_token,

String project_id,

String host,

String port,

); 

Subscription:

Use this method to subscribe to a chat or group


emitter.subscribePresence(String channelKey, String channelName, bool changes, bool status); 

SubscribePresence:

Use this method to acknowledge the availability of the user.


emitter.subscribePresence(String channelKey, String channelName, bool changes, bool status); 

Publish:

Use this method to publish message of object type which can be of any type i-e text ,audio,video,document or images type.


emitter.publish(String channelKey, String channelName, Map<String, dynamic> send_message);

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add vdotok_connect

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  vdotok_connect: ^0.0.7

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:vdotok_connect/vdotok_connect.dart';

example/lib/main.dart

import 'dart:async';
import 'dart:io';
import 'package:data_connection_checker/data_connection_checker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:vdkFlutterChat/src/Screeens/home/homeIndex.dart';
import 'package:vdkFlutterChat/src/Screeens/login/SignInScreen.dart';
import 'package:vdkFlutterChat/src/Screeens/splash/splash.dart';
import 'package:vdkFlutterChat/src/constants/constant.dart';
import 'package:vdkFlutterChat/src/core/providers/auth.dart';
import 'package:vdkFlutterChat/src/routing/routes.dart';
import 'src/constants/constant.dart';

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext context) {
    return super.createHttpClient(context)
      ..badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
  }
}

void main() {
  HttpOverrides.global = new MyHttpOverrides();
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool state = true;
  bool connectionState = false;
  bool keepShowing = false;
  bool isDeviceConnected = false;
  bool isdev=true;
  StreamSubscription subscription;
  GlobalKey<ScaffoldMessengerState> rootScaffoldMessengerKey;

  @override
  void initState() {
    super.initState();
    rootScaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();
    checkStatus();
    checkConnectivity();
  }

  @override
  void dispose() {
    subscription.cancel();
    super.dispose();
  }

  checkStatus() async {
    if (!kIsWeb) {
      bool connectivity = await DataConnectionChecker().hasConnection;
      print("this is for web $connectivity");
      if (connectivity == true) {
        setState(() {
          state = true;
          print("here in state circle");
        });
      } else {
        setState(() {
          state = false;
        });
      }
    }
  }

  void checkConnectivity() async {
     isDeviceConnected = false;
    if (!kIsWeb) {
      DataConnectionChecker().onStatusChange.listen((status) async {
        print("this on listener");
        isDeviceConnected = await DataConnectionChecker().hasConnection;
        print("this is is connected $isDeviceConnected");
        if (isDeviceConnected == true) {
        
          if (state == true)
            state = false;
          else{
          setState(() {
            isdev=true;
          });
            showSnackbar("Internet Connected", whiteColor, Colors.green, false);}
        } else {
          {
            setState(() {
              isdev=false;
            });
          showSnackbar(
              "No Internet Connection", whiteColor, primaryColor, true);
          }
        }
      });
    }
  }

  showSnackbar(text, Color color, Color backgroundColor, bool check) {
    if (check == false) {
      rootScaffoldMessengerKey.currentState
        ..hideCurrentSnackBar()
        ..showSnackBar(SnackBar(
          content: Text(
            '$text',
            style: TextStyle(color: color),
          ),
          backgroundColor: backgroundColor,
          duration: Duration(seconds: 2),
        ));
    } else if (check == true) {
      rootScaffoldMessengerKey.currentState
        ..hideCurrentSnackBar()
        ..showSnackBar(SnackBar(
          content: Text(
            '$text',
            style: TextStyle(color: color),
          ),
          backgroundColor: backgroundColor,
          duration: Duration(days: 1),
        ));
    }
  }

  @override
  Widget build(BuildContext context) {
     //  SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.top]);

    return MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => AuthProvider()..isUserLogedIn()),
      ],
      child: MaterialApp(
        scaffoldMessengerKey: rootScaffoldMessengerKey,
        debugShowCheckedModeBanner: false,
        title: 'Flutter Demo',
        theme: ThemeData(
            accentColor: primaryColor,
            primaryColor: primaryColor,
            scaffoldBackgroundColor: Colors.white,
            textTheme: TextTheme(
              bodyText1: TextStyle(color: secondaryColor),
              bodyText2: TextStyle(color: secondaryColor), //Text
            )),
        onGenerateRoute: Routers.generateRoute,
        home: Scaffold(
          body: Consumer<AuthProvider>(
            builder: (context, auth, child) {
              if (auth.loggedInStatus == Status.Authenticating)
                return SplashScreen();
              else if (auth.loggedInStatus == Status.LoggedIn) {
                print("thiddfdfbkdfkbndfkn $isdev");
                return HomeIndex(state:isdev);
              } else
                return SignInScreen();
            },
          ),
        ),
      ),
    );
  }
}

Original article source at: https://pub.dev/packages/vdotok_connect 

#flutter #dart #plugin 

Vdotok_connect: A New Flutter Plugin
Hunter  Krajcik

Hunter Krajcik

1657927260

Uipickers: A Plugin Library That Exposes Platform Specific Date, Time

uipickers

A plugin library that exposes platform specific date, time and picker popups. It uses the native iOS 14 UIKit UIDatePicker and SwiftUI like Picker on iOS and the corresponding material pickers on other platforms.

Image 1 Image 2

Usage

First import it in your Dart code:

import 'package:uipickers/uipickers.dart';

Then select one of the following widgets:

  • AdaptiveDatePicker - Allows selecting a date or time and displays the selected date in a widget. The underlying popup is selected automatically based on the current platform.
  • AdaptivePicker - Allows selecting an item from a list of string items. The underlying popup is selected automatically based on the current platform.
  • UIDatePicker - Allows selecing a date, time, or time+date and uses a native iOS 14 style UIDatePicker component.
  • UIPicker - Allows selecting an item from a list of string items. Uses iOS native components (UIButton + UIMenu) to present SwiftUI like Picker popup.
  • MaterialDatePicker - Allows selecing a date, time, or time+date and uses the build-in material dialogs.
  • MaterialPicker - Allows selecing an item from a list of string items. Uses the build-in DropDownButton.

AdaptiveDatePicker

The AdaptiveDatePicker is used for selecting a date or time. It displays the currently selected date/time in its widget. On iOS it will use a native iOS 14 style UIDatePicker. The initialDate property sets the currently selected date, firstDate is the earliest allowable date and lastDate is the latest allowable date. The onChanged event handler is called when the user selects an item from the popup:

DateTime selectedDate = DateTime.now();
//...
AdaptiveDatePicker(
    initialDate: selectedDate,
    firstDate: DateTime.now(), 
    lastDate: DateTime.now().add(Duration(days: 10)),
    onChanged: (date) { setState(() => selectedDate = date); },
)

Warning: The size of the widget should be constrained. For example it could be wrapped inside a SizedBox:

SizedBox(width: 150, height: 34,
    child: AdaptiveDatePicker(
        //...
    )
)

In order to use the native version explicitly, just set the type property to cupertino, or replace AdaptiveDatePicker with UIDatePicker:

AdaptiveDatePicker(
    type: AdaptiveDatePickerType.cupertino,
    //...
)

The tintColor property is specific for UIDatePicker. It changes the highlighted text color:

UIDatePicker(
    tintColor: UIColors.red,
    //...
)

There are various attributes to customize, for example backgroundColor, cornerRadius, borderColor, etc.:

AdaptiveDatePicker(
    backgroundColor: Colors.blue[50]!,
    borderColor: Colors.blue[800]!,
    borderWidth: 3,
    cornerRadius: 4,
    items: items, 
    value: selectedItem, 
    onChanged: (value) { setState(() => selectedItem = value); },
);

AdaptivePicker

The AdaptivePicker widget allows automatic selection of the underlying widget implementation based on the operating system. On iOS it will use a SwiftUI like picker based on UIButton+UIMenu. The value property sets the currently selected item index, and the onChanged event handler is called when the user selects an item from the popup:

int selectedItem = 1;
var items = [ 'one', 'two', 'three' ];
//...
AdaptivePicker(
    items: items, 
    value: selectedItem, 
    onChanged: (value) { setState(() => selectedItem = value); }
)

Warning: The size of the widget should be constrained. For example it could be wrapped inside a SizedBox:

SizedBox(width: 150, height: 34,
    child: AdaptiveDatePicker(
        //...
    )
)

In order to use the native version explicitly, just set the type property to cupertino, or replace AdaptivePicker with UIPicker:

AdaptivePicker(
    type: AdaptivePickerType.cupertino,
    //...
)

There are various attributes to customize, for example backgroundColor, cornerRadius, borderColor, etc.:

UIPicker(
    backgroundColor: Colors.blue[50]!,
    borderColor: Colors.blue[800]!,
    borderWidth: 3,
    cornerRadius: 4,
    items: items, 
    value: selectedItem, 
    onChanged: (value) { setState(() => selectedItem = value); },
);

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add uipickers

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  uipickers: ^0.0.8

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:uipickers/uipickers.dart';

example/lib/main.dart

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int selectedItem = 0;
  DateTime selectedDate = DateTime.now();
  final key1 = GlobalKey();
  final key2 = GlobalKey();
  final items = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: Padding(
                padding: const EdgeInsets.fromLTRB(100, 140, 20, 20),
                child: Column(children: [
                  SizedBox(
                      width: 150,
                      height: 34,
                      child: AdaptivePicker(
                          key: key1,
                          type: AdaptivePickerType.material,
                          items: items,
                          value: selectedItem,
                          onChanged: (val) {
                            setState(() {
                              selectedItem = val ?? 0;
                              selectedDate = DateTime.now()
                                  .add(Duration(days: selectedItem));
                            });
                          })),
                  const SizedBox(height: 12),
                  SizedBox(
                      width: 150,
                      height: 34,
                      child: AdaptiveDatePicker(
                        key: key2,
                        type: AdaptiveDatePickerType.material,
                        initialDate: selectedDate,
                        firstDate: DateTime.now(),
                        lastDate: DateTime.now().add(const Duration(days: 10)),
                        onChanged: (date) {
                          setState(() {
                            selectedDate = date;
                            selectedItem =
                                daysBetween(DateTime.now(), selectedDate);
                          });
                        },
                      ))
                ]))));
  }

  int daysBetween(DateTime from, DateTime to) {
    var fromD = DateTime(from.year, from.month, from.day);
    var toD = DateTime(to.year, to.month, to.day);
    return (toD.difference(fromD).inHours / 24).round();
  }
}

Original article source at: https://pub.dev/packages/uipickers 

#flutter #dart #plugin 

Uipickers: A Plugin Library That Exposes Platform Specific Date, Time
Hunter  Krajcik

Hunter Krajcik

1657892940

Amplify analytics Plugin interface

amplify_analytics_plugin_interface

The platform interface for the analytics module of Amplify Flutter.

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add amplify_analytics_plugin_interface

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  amplify_analytics_plugin_interface: ^0.5.1

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:amplify_analytics_plugin_interface/amplify_analytics_plugin_interface.dart';

Getting Started

Visit our Web Site to learn more about AWS Amplify.

Original article source at: https://pub.dev/packages/amplify_analytics_plugin_interface 

#flutter #dart #plugin #interface 

Amplify analytics Plugin interface
Hunter  Krajcik

Hunter Krajcik

1657877880

Testdialogplugin: To Be Able To Show A Custom Alert Box Easly

testdialogplugin

A new Flutter project.

Installing

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add testdialogplugin

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  testdialogplugin: ^0.0.1

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:testdialogplugin/testdialogplugin.dart';

example/lib/main.dart

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

import 'package:flutter/services.dart';
import 'package:testdialogplugin/testdialogplugin.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    try {
      platformVersion =
          await Testdialogplugin.platformVersionDialog ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Running on: $_platformVersion\n'),
        ),
      ),
    );
  }
}

Getting Started

This project is a starting point for a Flutter plug-in package, a specialized package that includes platform-specific implementation code for Android and/or iOS.

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

=======

DialogPluginFlutter

DialogPluginFlutter

26927643364523a0ba3d35962dc2b55a3923e516+

Original article source at: https://pub.dev/packages/testdialogplugin 

#flutter #dart #plugin 

Testdialogplugin: To Be Able To Show A Custom Alert Box Easly

Cakephp3-netbeans: CakePHP3/4 support in NetBeans

NetBeans CakePHP3/4 Plugin

This plugin provides support for CakePHP3/4.

Requirements

  • NetBeans 12.0+

How To Install

Via NetBeans Plugin Portal Update Center

  • Tools > Plugins > Available Plugins
  • Click the "Check for Newest" button
  • Check "CakePHP3/4 Framework"
  • Click the "Install" button

Use downloaded nbms

  • Download a nbm (e.g. org-netbeans-modules-php-cake3-0.0.1-dev-201408251540.nbm)
  • Tools > Plugins > Downloaded > Add Plugins
  • Select the nbm
  • Click Install

How To Update

You can update to the new version by the same way as the install. You don't have to uninstall the old version.

How To Enable

  • Open the project properties dialog (Right-Click your project > properties)
  • Frameworks > CakePHP3/4 > Check Enabled

Use Your Custom Directory Structure

If you just installed Cake3/4 via Composer, you don't have to do anything.

  • Open the project properties
  • Set relative paths from your Source Directory to Path settings

Root

Use when your CakePHP app directory exists in your php project as a subdirectory.

e.g. set app to Root setting like the following case:

source directory
    ├── foo
    ├── bar
    └── app
            ├── README.md
            ├── bin
            ├── composer.json
            ├── composer.lock
            ├── config
            ├── index.php
            ├── logs
            ├── phpunit.xml.dist
            ├── plugins
            ├── src
            ├── tests
            ├── tmp
            ├── vendor
            └── webroot

The Others

The same as App settings of config/app.php

Templates, plugins, locales, e.t.c.

Support them using .cake file.

Features

  • Code completion
  • Smart Go To
  • Run Actions (Run Command)
  • Template files(Controller, Table, Helper, e.t.c.)
  • Support for a .cake file
  • Resolve mime-types for a ctp extension and a .cake file
  • Show a parent directory name of a ctp file in the multi-row tabs(see Tools > Options > Appearance > Document Tabs) e.g. home.ctp [Pages]
  • Custom nodes

Code Completion

Component

// in your Controller e.g. SomeController or AppController
public $components = ['Foo', 'My.Bar', 'Bar' => ['className' => 'MyBar'] ];

public initialize() {
    $this->loadComponent('Foo');
    $this->laodComponent('Bar', ['className' => 'MyBar']);
}

// in your Controller
$this->[Ctrl+Space]

Helper

// in your Controller e.g. SomeController or AppController
public $helpers = ['Foo', 'My.Bar', 'Bar' => ['className' => 'MyBar'] ];

// in your template file e.g. index.ctp
$this->[Ctrl+Space]

Table

// in your Controller e.g. SomeController 
$this->loadModel('Users');

// in your Controller
$this->[Ctrl+Space]

Please add @property to your table class if you want to use like the following:

// e.g. BookmarksTable
/**
 * @property \App\Model\Table\TagsTable $Tags 
 */
class BookmarksTable extends Table {
}

$this->Bookmarks->Tags->[Ctrl+Space]

Method Parameters

// e.g. path/to/your/template/index.ctp
// file path completion
$this->Html->css('[Ctrl+Space]');

// constants
$this->Html->docType('[Ctrl+Space]');

NOTE Please add a semicolon(;) if you want to use code completions for parameters. Tips: You can add it like the following: Ctrl+;

Smart Go To

This feature is not enabled by default. If you want to use it, please set the KeyMap to it. (Tools > Options > Keymap > Search CakePHP > CakePHP3/4: Smart Go To > e.g. set Ctrl + Shift + J)

Files related to the current editor are shown when you run this action. e.g. If your current file is a Controller, template, table, entity, testcase, conponent and helper file(s) will be shown.

You can change a list to specific category's one like the following. (Ctrl is a Ctrl or Command key)

  • Controller(All) : Ctrl + C (Ctrl + Shift + C)
  • Component : Ctrl + P (Ctrl + Shift + P)
  • Table : Ctrl + M (Ctrl + Shift + M)
  • Entity : Ctrl + E (Ctrl + Shift + E)
  • Behavior : Ctrl + B (Ctrl + Shift + B)
  • Templates : Ctrl + V (Ctrl + Shift + V)
  • View Cell : Ctrl + L (Ctrl + Shift + L)
  • Helper : Ctrl + H (Ctrl + Shift + H)
  • Fixture : Ctrl + F (Ctrl + Shift + F)
  • TestCase : Ctrl + T
  • Config : Ctrl + I or Ctrl + Shift + I

NOTE Core files are not shown (e.g. HtmlHelper, AuthComponent, e.t.c.)

Support for a .cake file

You can use the .cake if you want to use the specified directories for Controller, Table, Template, e.t.c.. The file format is the following:

{
    "cake": ".\/vendor\/cakephp\/cakephp",
    "build_path": {
        "entities": [
            ".\/src\/Model\/Entity\/"
        ],
        "tables": [
            ".\/src\/Model\/Table\/"
        ],
        "behaviors": [
            ".\/src\/Model\/Behavior\/"
        ],
        "controllers": [
            ".\/src\/Controller\/"
        ],
        "components": [
            ".\/src\/Controller\/Component\/"
        ],
        "templates": [
            ".\/src\/Template\/"
        ],
        "views": [
            ".\/src\/View\/"
        ],
        "helpers": [
            ".\/src\/View\/Helper\/"
        ],
        "consoles": [
            ".\/src\/Console\/"
        ],
        "shells": [
            ".\/src\/Shell\/"
        ],
        "tasks": [
            ".\/src\/Shell\/Task\/"
        ],
        "locales": [
            ".\/src\/Locale\/"
        ],
        "vendors": [
            ".\/vendor\/"
        ],
        "plugins": [
            ".\/plugins\/"
        ]
    }
}

NOTE It is not available in any categories.

Custom nodes

You can add some directories(nodes) under the your project tree. Controller, Model, e.t.c. are shown by default. If you want to hide/show them, please change the options.(Tools > Options > PHP > Frameworks and Tools > CakePHP3/4 > Custom nodes)

Actions

Right-click a project > CakePHP3/4

  • Run Command
  • Run server
  • Refresh

Run Command

All commands will be shown as a list in the command dialog. Then you can run a command with some parameters.

Run server

Just run cake server. If you want to set details, please use Run Configuration of project properties.

Refresh

Please run this action after you changed the .cake file or you updated the version of CakePHP. Refresh the version number and category paths.

Downloads

Issues

If you have issues, please submit them to GitHub Issues . Please don't create PRs soon.

Author: junichi11
Source Code: https://github.com/junichi11/cakephp3-netbeans 
License: Apache-2.0 license

#php #cakephp #plugin 

Cakephp3-netbeans: CakePHP3/4 support in NetBeans

Mixer: A Plugin to Discover and Manage CakePHP Plugins

Mixer

A plugin to discover and manage CakePHP plugins and generate skeleton application code.

Requirements

  • PHP 5.6+
  • CakePHP 3.4+

Installation

You can install this plugin into your CakePHP application using composer.

The recommended way to install composer packages is:

composer require --dev cakedc/mixer

Ensure Mixer Plugin is loaded in your config/bootstrap.php file

if (Configure::read('debug')) {
    Plugin::load('CakeDC/Mixer', ['bootstrap' => true, 'routes' => true]);
}

Now you can navigate to your app /mixer URL and start discovery and managing your plugins! It searches through all packages on Packagist with type "cakephp-plugin" excluding CakePHP 2.x packages.

Attention: we don't want you to use Mixer in production. That's why we're asking to add it to require-dev composer.json section and it will only work when debug is on.

Support

For bugs and feature requests, please use the issues section of this repository.

Commercial support is also available, contact us for more information.

Contributing

This repository follows the CakeDC Plugin Standard. If you'd like to contribute new features, enhancements or bug fixes to the plugin, please read our Contribution Guidelines for detailed instructions.

Author: CakeDC
Source Code: https://github.com/CakeDC/mixer 
License: View license

#php #cakephp #plugin 

Mixer: A Plugin to Discover and Manage CakePHP Plugins