Secure your application from prying eyes

Overview

previously nammed secure_window

secure_application

This plugin allow you to protect your application content from view on demand

Pluggin in iOS is in swift

Pluggin in Android is in Kotlin / AndroidX libraries

Pluggin is also working for web

Plugin work for windows (will lock when you minimize the window and lock screen)

Usage

Installation

Add secure_application as a dependency in your pubspec.yaml file (what?).

Import

Import secure_application:

import 'package:secure_application/secure_application.dart';

Add a top level SecureApplication

SecureApplication(
        onNeedUnlock: (secure) => print(
            'need unlock maybe use biometric to confirm and then use sercure.unlock()'),
        child: MyAppContent(),
)

Put the content you want to protect in a SecureGate (could be the whole app)

SecureGate(
          blurr: 5,
          lockedBuilder: (context, secureNotifier) => Center(
              child: RaisedButton(
            child: Text('test'),
            onPressed: () => secureNotifier.unlock(),
          )),
          child: YouProtectedWidget(),
)

Tips

Placement

Best place to add the secure application is directly inside the MaterialApp by using its builder:

class MyApp extends StatelessWidget {
  final navigatorKey = GlobalKey<NavigatorState>();
  @override
  Widget build(BuildContext context) => MaterialApp(
        navigatorKey: navigatorKey,
        localizationsDelegates: [
          DefaultMaterialLocalizations.delegate,
          DefaultCupertinoLocalizations.delegate,
          DefaultWidgetsLocalizations.delegate,
        ],
        // debugShowCheckedModeBanner: false,
        title: 'Your Fancy App',
        darkTheme: YourDarkTheme,
        theme: YourTheme,
        onGenerateRoute: _generateRoute,
        builder: (context, child) => SecureApplication(
          nativeRemoveDelay: 800,
          onNeedUnlock: (secureApplicationController) async {
            var authResult = await auth(
                askValidation: () => askValidation(context, child),
                validationForFaceOnly: false);
            if (authResult) {
              secureApplicationController.authSuccess(unlock: true);
            } else {
              secureApplicationController.authFailed(unlock: true);
              secureApplicationController.open();
            }
            return null;
          },
          child: child,
        ),
      );

  Route<dynamic> _generateRoute(RouteSettings settings) {
    switch (settings.name) {
      case '/splash':
        return MaterialPageRoute(builder: (context) => Container());
      default:
        return MaterialPageRoute(
            builder: (context) =>
                SecureGate(blurr: 60, opacity: 0.8, child: DecisionPage()));
    }
  }

  Future<bool> askValidation(BuildContext context, Widget navigator) async {
    if (navigator is Navigator) {
      final context = navigatorKey.currentState.overlay.context;
      return await showDialog<bool>(
        context: context,
        barrierDismissible: false, // user must tap button!
        builder: (BuildContext context) {
          return CupertinoAlertDialog(
            title: Text('Unlock app content'),
            content: Text(
                'Do you wan to unlock the application content? Clicking no will secure the app'),
            actions: <Widget>[
              CupertinoDialogAction(
                isDefaultAction: true,
                child: Text('No'),
                onPressed: () {
                  Navigator.of(context).pop(false);
                },
              ),
              CupertinoDialogAction(
                child: Text('Yes'),
                onPressed: () {
                  Navigator.of(context).pop(true);
                },
              ),
            ],
          );
        },
      );
    }
  }
}

Notice 3 importants part here:

  • Secure application is in MaterialApp/Builder so just above your app naviagator
  • I wrap the route i want to protect in onGenerateRoute with a SecureGate but you could put it anywhare you want if you only want to protect part of your page
  • Ask validation will display a dialog above everything to ask is you want to unlock app or not

react to failed auth

class SecureReacting extends StatefulWidget {
  @override
  _SecureReactingState createState() => _SecureReactingState();
}

class _SecureReactingState extends State<SecureReacting> {
  bool locked = false;
  StreamSubscription<SecureApplicationAuthenticationStatus> _authEventsSub;
  @override
  void initState() {
    super.initState();
    var lockController = SecureApplicationProvider.of(context, listen: false);
    _authEventsSub = lockController.authenticationEvents
        .where((s) => s == SecureApplicationAuthenticationStatus.FAILED)
        .listen((_) => lock());
  }

  void lock() {
    if (mounted) {
      setState(() => locked = true);
      Navigator.of(context).pop();
    }
  }

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

  @override
  Widget build(BuildContext context) {
    return locked ? Container() : Container();
  }
}

Notice 2 importants part here:

  • You are subscribing to a stream so don't forget to unsubscribe in onDispose
  • Since your animation from pop can take some time you might want also to have a locked variable here to display different content during transition

API Docs

API Reference

Basic understanding

The library is mainly controller via the SecureApplicationController which can be

secured

if the user switch app or leave app the content will not be visible in the app switcher and when it goes back to the app it will lock it

locked

the child of the SecureGates will be hidden bellow the blurry barrier

paused

even if secured SecureGates will not activate when user comes back to the app

authenticated

last authentication status. To help you manage visibility of some elements of your UI depending on auth status

  • secureApplicationController.authFailed() will set it to false
  • secureApplicationController.authLogout() will set it to false
  • secureApplicationController.authSuccess() will set it to true

You could use the authenticationEvents for the same purpose as it is a BehaviorSubject stream

Streams

There is two different BehaviorStream (emit last value when you subscribe):

  • authenticationEvents: When there is a successful or unsucessful authentification (you can use it for example to clean your app if authentification is not successful)
  • lockEvents: Will be called when the application lock or unlock. Usefull for example to pause media when the app lock

Example

Look at example app to see a use case

Authentication

This tool does not impose a way to authenticate the user to give them back access to their content

You are free to use your own Widget/Workflow to allow user to see their content once locked (cf SecureApplication widget argument onNeedUnlock)

Therefore you can use any method you like:

  • Your own Widget for code Authentication
  • biometrics with the local_auth package
  • ...

Android

On Android as soon as you secure the application the user will not be able to capture the screen in the app (even if unlocked) We might give an option to allow screenshot as an option if need arise

iOS

Contrary to Android we create a native frosted view over your app content so that content is not visible in the app switcher. When the user gets back to the app we wait for ~500ms to remove this view to allow time for the app to woke and flutter gate to draw

Widgets

SecureApplication

Api Doc this widget is required and need to be a parent of any Gate it provides to its descendant a SecureApplicationProvider that allow you to secure or open the application

You can pass you own initialized SecureApplicationController if you want to set default values

SecureGate

Api Doc The child of this widget will be below a blurry barrier (control the amount of blurr and opacity with its arguments) if the provided SecureApplicationController is locked

Native workings

Android

When locked we set the secure flag to true

activity?.window?.addFlags(LayoutParams.FLAG_SECURE)

When opened we remove the secure flag

activity?.window?.clearFlags(LayoutParams.FLAG_SECURE)

iOS

When app will become inactive we add a top view with a blurr filter We remove this app 500ms after the app become active to avoid your content form being breifly visible

Because we all want to see code in a Readme

Widget build(BuildContext context) {
    var width = MediaQuery.of(context).size.width * 0.8;
    return MaterialApp(
      home: SecureApplication(
        onNeedUnlock: (secure) async {
          print(
              'need unlock maybe use biometric to confirm and then sercure.unlock() or you can use the lockedBuilder');
          // var authResult = authMyUser();
          // if (authResul) {
          //  secure.unlock();
          //  return SecureApplicationAuthenticationStatus.SUCCESS;
          //}
          // else {
          //  return SecureApplicationAuthenticationStatus.FAILED;
          //}
          return null;
        },
        onAuthenticationFailed: () async {
          // clean you data
          setState(() {
            failedAuth = true;
          });
          print('auth failed');
        },
        onAuthenticationSucceed: () async {
          // clean you data

          setState(() {
            failedAuth = false;
          });
          print('auth success');
        },
        child: SecureGate(
          blurr: blurr,
          opacity: opacity,
          lockedBuilder: (context, secureNotifier) => Center(
              child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              RaisedButton(
                child: Text('UNLOCK'),
                onPressed: () => secureNotifier.authSuccess(unlock: true),
              ),
              RaisedButton(
                child: Text('FAIL AUTHENTICATION'),
                onPressed: () => secureNotifier.authFailed(unlock: true),
              ),
            ],
          )),
          child: Scaffold(
            appBar: AppBar(
              title: const Text('Secure Window Example'),
            ),
            body: Center(
              child: Builder(builder: (context) {
                var valueNotifier = SecureApplicationProvider.of(context);
                return ListView(
                  children: <Widget>[
                    Text('This is secure content'),
                    RaisedButton(
                      onPressed: () => valueNotifier.secure(),
                      child: Text('secure'),
                    ),
                    RaisedButton(
                      onPressed: () => valueNotifier.open(),
                      child: Text('open'),
                    ),
                    if (failedAuth == null)
                      Text(
                          'Lock the app then switch to another app and come back'),
                    if (failedAuth != null)
                      failedAuth
                          ? Text(
                              'Auth failed we cleaned sensitive data',
                              style: TextStyle(color: Colors.red),
                            )
                          : Text(
                              'Auth success',
                              style: TextStyle(color: Colors.green),
                            ),
                    FlutterLogo(
                      size: width,
                    ),
                    RaisedButton(
                      onPressed: () => valueNotifier.lock(),
                      child: Text('manually lock'),
                    ),
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Row(
                        children: <Widget>[
                          Text('Blurr:'),
                          Expanded(
                            child: Slider(
                                value: blurr,
                                min: 0,
                                max: 100,
                                onChanged: (v) => setState(() => blurr = v)),
                          ),
                          Text(blurr.floor().toString()),
                        ],
                      ),
                    ),
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Row(
                        children: <Widget>[
                          Text('opacity:'),
                          Expanded(
                            child: Slider(
                                value: opacity,
                                min: 0,
                                max: 1,
                                onChanged: (v) => setState(() => opacity = v)),
                          ),
                          Text((opacity * 100).floor().toString() + "%"),
                        ],
                      ),
                    ),
                  ],
                );
              }),
            ),
          ),
        ),
      ),
    );
  }
Comments
  • Why application not locked after opening?

    Why application not locked after opening?

    Hi, is there a reason this package doesn’t lock an app after launch? I’ve tried it and it just works when I switch to another app and come back. Can we make it work even when after we launch an app?

    opened by minhdanh 6
  • type 'List<Widget?>' is not a subtype of type 'List<Widget>' in type cast

    type 'List' is not a subtype of type 'List' in type cast

    flutter: [debug] Capture from onError type 'List<Widget?>' is not a subtype of type 'List<Widget>' in type cast
    
    ======== Exception caught by widgets library =======================================================
    The following _CastError was thrown building SecureGate(dirty, dependencies: [_EffectiveTickerMode, SecureApplicationProvider], state: _SecureGateState#93e4b(ticker inactive)):
    type 'List<Widget?>' is not a subtype of type 'List<Widget>' in type cast
    
    The relevant error-causing widget was: 
      SecureGate file:///Users/ying/workspace/FlutterProjects/gitter/lib/main.dart:297:21
    When the exception was thrown, this was the stack: 
    #0      _SecureGateState.build (package:secure_application/secure_gate.dart:118:9)
    #1      StatefulElement.build (package:flutter/src/widgets/framework.dart:4612:27)
    #2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4495:15)
    #3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4667:11)
    #4      Element.rebuild (package:flutter/src/widgets/framework.dart:4189:5)
    ...
    ====================================================================================================
    
    opened by kw214 6
  • How to secure all the pages of the app?

    How to secure all the pages of the app?

    I am trying to develop an app that has multiple screens. Whenever the user goes to the background and then comes to foreground, then I should be prompted to authenticate before going to other screen. I have tried many things but unable to understand how to implement it. Can you help me on how to do that @neckaros ?

    opened by 0Vipin0 6
  • Show toast on screenshot on a secure app

    Show toast on screenshot on a secure app

    How can I show a toast when the user wants to take a screenshot of my app which is under your very good package? I used the example for testing purposes. Your early response will be highly appreciated.

    opened by shariful2011 5
  • Need help in implementation as I am unable to stop screen capture

    Need help in implementation as I am unable to stop screen capture

    I have tried to implement your library as per documentation instructions. But When I use your demo app , I am unable to capture screen and also any screen recorder app don't capture app screen , just black screen AS it should be. But In my app it never works. Please guide me what step I am missing.

    My code :

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MultiProvider(
            providers: [
              ChangeNotifierProvider.value(
                value: ProviderCall(),
              ),
            ],
            child: Consumer<ProviderCall>(
                builder: (ctx, auth, _) => MaterialApp(
                      title: AllStrings.appName,
                      theme: new ThemeData(
                        primaryColor: Colors.deepPurple,
                        primarySwatch: Colors.deepPurple,
                        primaryColorDark: Colors.deepPurple,
                        hintColor: Colors.blue,
                      ),
                      debugShowCheckedModeBanner: false,
                      home: SecureApplication(
                          nativeRemoveDelay: 800,
                          onNeedUnlock: (secureApplicationController) async {},
                          child: MyHomePage(title: 'My  App')),
                    )));
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      var valueNotifier ;
      void initState() {
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        valueNotifier = SecureApplicationProvider.of(context);
        return PickupLayout(
            scaffold: Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: SecureGate(
              blurr: 0,
              opacity: 0,
              child: new Center(
                child: new Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    new Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: <Widget>[
                        new RaisedButton(
                          padding: const EdgeInsets.all(8.0),
                          textColor: Colors.white,
                          color: Colors.blue,
                          onPressed: () => secure(context),
                          child: new Text("Secure"),
                        ),
                        new RaisedButton(
                          onPressed: () => open(context),
                          textColor: Colors.white,
                          color: Colors.red,
                          padding: const EdgeInsets.all(8.0),
                          child: new Text(
                            "Open",
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
              )),
        ));
      }
    
      void secure(BuildContext context) {
          valueNotifier.secure();
      }
    
      void open(BuildContext context) {
        valueNotifier.open();
      }
    }
    
    

    As per my understanding of your library , I want to secure the screen and don't want to lock the screen. I guess I am missing some step. Plese guide me to solution.

    opened by RuhaanSharma 5
  • Build warning on Flutter 3.0.0

    Build warning on Flutter 3.0.0

    When building an app with Flutter version 3.0.0 or above that uses the secure_application package I am seeing the warnings below. Could a new version on pub.dev be published that makes this package compatible with Flutter 3.0.0 please?

    ../../../../Library/flutter/.pub-cache/hosted/pub.dartlang.org/secure_application-3.8.0/lib/secure_application.dart:102:20: Warning: Operand of null-aware operation '!' has type
    'WidgetsBinding' which excludes null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../../Library/flutter/packages/flutter/lib/src/widgets/binding.dart').
        WidgetsBinding.instance!.addObserver(this);
                       ^
    ../../../../Library/flutter/.pub-cache/hosted/pub.dartlang.org/secure_application-3.8.0/lib/secure_application.dart:112:20: Warning: Operand of null-aware operation '!' has type
    'WidgetsBinding' which excludes null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../../Library/flutter/packages/flutter/lib/src/widgets/binding.dart').
        WidgetsBinding.instance!.removeObserver(this);
                       ^
    ../../../../Library/flutter/.pub-cache/hosted/pub.dartlang.org/secure_application-3.8.0/lib/secure_application.dart:134:30: Warning: Operand of null-aware operation '!' has type
    'WidgetsBinding' which excludes null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../../Library/flutter/packages/flutter/lib/src/widgets/binding.dart').
                  WidgetsBinding.instance!.addPostFrameCallback((_) {
                                 ^
    
    opened by gilescm 4
  • Support Up-to-date dependencies

    Support Up-to-date dependencies

    Currently, this package depends on rxdart ^0.26.0. Can you please update the rxdart version (to rxdart ^0.27.3)? I want to use this package but I cannot install it because of this version issue :( Thank you.

    opened by davidchristian1 4
  • How to change color when in application switcher on iOS?

    How to change color when in application switcher on iOS?

    On iOS whenever I open my app (with secured state), and open task switcher, the task switcher hides the content of the app with a white color. Can I change this color (my use case is that I want to support dark mode)? Thanks.

    opened by minhdanh 4
  • Fix a null safety error in the [SecureGate]

    Fix a null safety error in the [SecureGate]

    error: type List<Widget?> is not a subtype of type List in type cast.

    <Widget?>[
      widget.child,
      if (_gateVisibility.value != 0)
        Positioned.fill(
          child: BackdropFilter(
            filter: ImageFilter.blur(
                sigmaX: widget.blurr * _gateVisibility.value,
                sigmaY: widget.blurr * _gateVisibility.value),
            child: Container(
              decoration: BoxDecoration(
                  color: Colors.grey.shade200
                      .withOpacity(widget.opacity * _gateVisibility.value)),
            ),
          ),
        ),
      if (_lock && widget.lockedBuilder != null)
        widget.lockedBuilder!(context, _secureApplicationController),
    ] as List<Widget>,
    
    opened by lubritto 4
  • Issue with the dependency setting

    Issue with the dependency setting

    I've tried playing around with this package and ran into a problem getting it to work. I reduced your example to the most basic structure: main.dart:

    return MaterialApp(
      home: SecureApplication(
        nativeRemoveDelay: 1000,
        child: MainBody(),
      ),
    );
    

    } main_body.dart:

    var width = MediaQuery.of(context).size.width * 0.8;
    return Scaffold(
      appBar: AppBar(
        title: const Text('Secure Window Example'),
      ),
      body: Center(
        child: FlutterLogo(
          size: width,
        ),
      ),
    );
    

    } When I changed the dependency from:

    dev_dependencies:
      secure_application:
        path: ../
    
    

    Screen Shot 2020-08-22 at 10 21 18 AM

    to the prescibed:

    dependencies:
      secure_application: ^3.5.3
    

    Screen Shot 2020-08-22 at 10 24 14 AM

    The blur no longer worked when the app was minimized. I've tried this with a few different configuration and always get the same result. Can you provide any insight into what's going on?

    opened by BSTomack 4
  • No signature of method: build_…android() applicable for argument types: (build_…_run_closure2)

    No signature of method: build_…android() applicable for argument types: (build_…_run_closure2)

    Hello!

    I can't build my Flutter app for Android after adding the secure_application package, it crashes with error below:

    Build file '/usr/local/Caskroom/flutter/2.2.2/flutter/.pub-cache/hosted/pub.dartlang.org/secure_application-3.7.3/android/build.gradle' line: 27
    
    A problem occurred evaluating project ':secure_application'.
    > No signature of method: build_c5ahy1849z3l6msywlxga8k28.android() is applicable for argument types: (build_c5ahy1849z3l6msywlxga8k28$_run_closure2) values: [build_c5ahy1849z3l6msywlxga8k28$_run_closure2@62470d9]
    

    Here is my build.gradle of app module:

    def localProperties = new Properties()
    def localPropertiesFile = rootProject.file('local.properties')
    if (localPropertiesFile.exists()) {
        localPropertiesFile.withReader('UTF-8') { reader ->
            localProperties.load(reader)
        }
    }
    
    def flutterRoot = localProperties.getProperty('flutter.sdk')
    if (flutterRoot == null) {
        throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
    }
    
    def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
    if (flutterVersionCode == null) {
        flutterVersionCode = '1'
    }
    
    def flutterVersionName = localProperties.getProperty('flutter.versionName')
    if (flutterVersionName == null) {
        flutterVersionName = '1.0'
    }
    
    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
    
    android {
        compileSdkVersion 30
    
        sourceSets {
            main.java.srcDirs += 'src/main/kotlin'
        }
    
        defaultConfig {
            // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
            applicationId "com.mobile"
            minSdkVersion 24
            targetSdkVersion 30
            versionCode flutterVersionCode.toInteger()
            versionName flutterVersionName
        }
    
        buildTypes {
            release {
                // TODO: Add your own signing config for the release build.
                // Signing with the debug keys for now, so `flutter run --release` works.
                signingConfig signingConfigs.debug
            }
        }
        buildToolsVersion '30.0.3'
    }
    
    flutter {
        source '../..'
    }
    
    dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    }
    

    build.gradle of project:

    buildscript {
        ext.kotlin_version = '1.5.21'
        repositories {
            google()
            mavenCentral()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:7.0.0'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        }
    }
    
    allprojects {
        repositories {
            google()
            mavenCentral()
        }
    }
    
    rootProject.buildDir = '../build'
    subprojects {
        project.buildDir = "${rootProject.buildDir}/${project.name}"
        project.evaluationDependsOn(':app')
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    And pubspec.yaml of Flutter:

    name: mobile
    description: Mobile
    
    version: 1.0.0+1
    
    environment:
      sdk: ">=2.12.0 <3.0.0"
    
    dependencies:
      flutter:
        sdk: flutter
      flutter_localizations:
        sdk: flutter
      intl: ^0.17.0
      cupertino_icons: ^1.0.3
      equatable: ^2.0.3
      flutter_bloc: ^7.0.1
      get_it: ^7.2.0
      hex: ^0.2.0
      path: ^1.8.0
      qr_flutter: ^4.0.0
      qr_code_scanner: ^0.5.2
      secp256k1: ^0.3.0
      sqflite_sqlcipher: ^2.0.0
      sha3: ^0.2.0
      share_plus: ^2.1.4
      shared_preferences: ^2.0.6
      secure_application: ^3.7.3
    
    dev_dependencies:
      flutter_test:
        sdk: flutter
      build_runner:
      test:
    
    flutter:
      generate: true
      uses-material-design: true
      assets:
        - assets/scripts/sqlite_v1.sql
    

    What am I doing wrong? Where can the problem be?

    opened by ghostman2013 3
  • iOS issue -  applicationWillResignActive - Fatal Exception: NSInternalInconsistencyException unexpected start state

    iOS issue - applicationWillResignActive - Fatal Exception: NSInternalInconsistencyException unexpected start state

    Hello,

    using version 3.8.0, I found that many issues occurs on my production application (only on iOS) on this line : https://github.com/neckaros/secure_application/blob/master/ios/Classes/SwiftSecureApplicationPlugin.swift#L53

    Crashlytics log the following message : applicationWillResignActive - Fatal Exception: NSInternalInconsistencyException unexpected start state

    It looks like the issue is occurring only on iOS 13.

    Fatal Exception: NSInternalInconsistencyException
    0  CoreFoundation                 0x131344 __exceptionPreprocess
    1  libobjc.A.dylib                0x5cc0 objc_exception_throw
    2  CoreFoundation                 0x2e878 +[_CFXNotificationTokenRegistration keyCallbacks]
    3  Foundation                     0xdcc74 -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]
    4  UIKitCore                      0xa6766c _prepareForCAFlush
    5  UIKitCore                      0xa98e34 _beforeCACommitHandler
    6  CoreFoundation                 0xac11c __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
    7  CoreFoundation                 0xa6e4c __CFRunLoopDoObservers
    8  CoreFoundation                 0xa6be8 CFRunLoopRunSpecific
    9  Foundation                     0x8598 -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
    10 Foundation                     0x8470 -[NSRunLoop(NSRunLoop) runUntilDate:]
    11 secure_application             0x79c4 applicationWillResignActive + 53 (SwiftSecureApplicationPlugin.swift:53)
    12 secure_application             0x6b90 applicationWillResignActive (<compiler-generated>)
    13 Flutter                        0x1f0ac -[FlutterPluginAppLifeCycleDelegate handleWillResignActive:] + 196 (FlutterPluginAppLifeCycleDelegate.mm:196)
    14 CoreFoundation                 0x89824 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
    15 CoreFoundation                 0x89874 ___CFXRegistrationPost1_block_invoke
    16 CoreFoundation                 0x88b64 _CFXRegistrationPost1
    17 CoreFoundation                 0x88818 ___CFXNotificationPost_block_invoke
    18 CoreFoundation                 0x2058 -[_CFXNotificationRegistrar find:object:observer:enumerator:]
    19 CoreFoundation                 0x88158 _CFXNotificationPost
    20 Foundation                     0x6e2c -[NSNotificationCenter postNotificationName:object:userInfo:]
    21 UIKitCore                      0xa63278 -[UIApplication _deactivateForReason:notify:]
    22 UIKitCore                      0x1dd204 -[_UISceneLifecycleMultiplexer _performBlock:withApplicationOfDeactivationReasons:fromReasons:]
    23 UIKitCore                      0x1dd6b0 -[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:]
    24 UIKitCore                      0x1dcf38 -[_UISceneLifecycleMultiplexer uiScene:transitionedFromState:withTransitionContext:]
    25 UIKitCore                      0x1e1654 __186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke_2
    26 UIKitCore                      0x5c6f8c +[BSAnimationSettings(UIKit) tryAnimatingWithSettings:actions:completion:]
    27 UIKitCore                      0x6c222c _UISceneSettingsDiffActionPerformChangesWithTransitionContext
    28 UIKitCore                      0x1e1390 __186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke
    29 UIKitCore                      0x6c2114 _UISceneSettingsDiffActionPerformActionsWithDelayForTransitionContext
    30 UIKitCore                      0x1e11e8 -[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]
    31 UIKitCore                      0x47918 __64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke
    32 UIKitCore                      0x46418 -[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:]
    33 UIKitCore                      0x47648 -[UIScene scene:didUpdateWithDiff:transitionContext:completion:]
    34 UIKitCore                      0x5edc18 -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:]
    35 FrontBoardServices             0xdb7c -[FBSSceneImpl updater:didUpdateSettings:withDiff:transitionContext:completion:]
    36 FrontBoardServices             0x33b68 __88-[FBSWorkspaceScenesClient sceneID:updateWithSettingsDiff:transitionContext:completion:]_block_invoke_2
    37 FrontBoardServices             0x17f40 -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:]
    38 FrontBoardServices             0x33a84 __88-[FBSWorkspaceScenesClient sceneID:updateWithSettingsDiff:transitionContext:completion:]_block_invoke
    39 libdispatch.dylib              0x35ac _dispatch_client_callout
    40 libdispatch.dylib              0x633c _dispatch_block_invoke_direct
    41 FrontBoardServices             0x596c8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__
    42 FrontBoardServices             0x59374 -[FBSSerialQueue _queue_performNextIfPossible]
    43 FrontBoardServices             0x3d3dc -[FBSWorkspaceFencingImpl synchronizeSystemAnimationFencesWithCleanUpBlock:]
    44 FrontBoardServices             0x5c68 -[FBSUIApplicationWorkspaceShim synchronizeSystemAnimationFencesWithCleanUpBlock:]
    45 UIKitCore                      0xa671f8 -[UIApplication _synchronizeSystemAnimationFencesWithSpinCleanUpBlock:]
    46 UIKitCore                      0xab394c __realPreCommitHandler_block_invoke_3
    47 QuartzCore                     0xaef1c CA::Context::commit_transaction(CA::Transaction*, double)
    48 QuartzCore                     0xd98c4 CA::Transaction::commit()
    49 QuartzCore                     0xda4b4 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*)
    50 CoreFoundation                 0xac11c __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
    51 CoreFoundation                 0xa6e4c __CFRunLoopDoObservers
    52 CoreFoundation                 0xa72dc __CFRunLoopRun
    53 CoreFoundation                 0xa6bc8 CFRunLoopRunSpecific
    54 GraphicsServices               0x35cc GSEventRunModal
    55 UIKitCore                      0xa6e744 UIApplicationMain
    56 Runner                         0x5c98 main + 8 (Double+extension.swift:8)
    57 libdyld.dylib                  0x1384 start
    

    Does this issue had already been logged ?

    Thx,

    opened by evaisse 0
  • A package version with rxdart ^0.27.x support has not yet been released

    A package version with rxdart ^0.27.x support has not yet been released

    Could you release a new version? I see the pubspec has already been updated to support the latest version of rxdart. It would be great to have a release!

    opened by SimoneBressan 0
  • SecureApplicationState(secured:) issue

    SecureApplicationState(secured:) issue

    Setting secured in the state init doesn't work: _secureAppController = SecureApplicationController(SecureApplicationState(secured: true)); Current workaround: _secureAppController = SecureApplicationController(SecureApplicationState()); _secureAppController.secure();

    I'm on iOS, secure_application version 3.7.1

    opened by Z-Foster 0
Owner
Arnaud Jezequel
Arnaud Jezequel
A simple and secure money manager that keeps you financially vigilant.

Be Thrifty Today A simple and secure money manager that keeps you financially vigilant. Website https://bethrifty.today Short Description Be Thrifty T

Amruth Pillai 121 Dec 26, 2022
Item selling mobile app with secure payments with Payhere payment gateway. Auto APK generation with github actions CI/CD.

payhere_demo A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if

Shihara Dilshan 2 Jan 20, 2022
Natrium - Fast, Robust & Secure NANO Wallet, now written with Flutter.

Natrium - Fast, Robust & Secure NANO Wallet What is Natrium? Natrium is a cross-platform mobile wallet for the NANO cryptocurrency. It is written in D

Appditto 702 Dec 30, 2022
Flutter Satellite.im Minimal Secure Chat Client

Uplink Flutter Satellite.im Minimal Secure Chat Client Getting Started ?? To run this project either use the launch configuration in VSCode or use the

Satellite 27 Dec 21, 2022
A Simple Todo app design in Flutter to keep track of your task on daily basis. Its build on BLoC Pattern. You can add a project, labels, and due-date to your task also you can sort your task on the basis of project, label, and dates

WhatTodo Life can feel overwhelming. But it doesn’t have to. A Simple To-do app design in flutter to keep track of your task on daily basis. You can a

Burhanuddin Rashid 1k Jan 6, 2023
A mobile image uploader in which you can upload image to your personal gallery from either your camera or mobile gallery and it can detect your current geographic location and address using firebase firestore and storage.

Image Uploader In Flutter About It is an Image Uploader gallery which tracks your address from which you're uploading using Flutter and Image picker.

Prahen parija 6 Dec 20, 2022
Movie Lib is a mobile application where you can find the movies of your interest. This app provides a collection of movies of different languages according to your interest.

Movie Lib Movie Lib is a mobile application where you can find the movies of your interest. This app provides a collection of movies of different lang

Abhijith Kp 6 Sep 28, 2021
A multi-plateform (Flutter) application for reading your emails, with your favorite devices, using the JMAP protocol!

A multi-plateform (Flutter) application for reading your emails, with your favorite devices, using the JMAP protocol!

LINAGORA 119 Jan 2, 2023
GChat is a chatting application developed using Flutter(Dart) and firebase for 2 users. Trying to Develop an application that does not sell your data with whatsapp rolling out its privacy policy updates.

Gchat - The Chatting Application A Flutter project for chatting. I used Android Studio and you can you any editor of your choice for ex: VS Code, Inte

Sanchaksh Kaul 6 Nov 6, 2022
A simple easy to use Flutter DApp , which keeps a track of all your day to day transactions by using Ethereum blockchain in the background which in turn increases your credit score.

Sahayog A simple easy to use Flutter DApp , which keeps a track of all your day to day transactions by using Ethereum blockchain in the background whi

Utkarsh Agarwal 15 May 21, 2022
Your grades across all your devices.

Gradely 2 A Grade Calculator App, that syncs all your Grades across all your devices, built with Flutter and with the amazing backend Appwrite. Screen

Elias Schneider 16 Dec 8, 2022
About This is Personal Expenses Planner. You can add your expenses in to the app and manage your transaction. and you can see How much did you spend on which day. I developed this project using flutter.

expense_planner A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

Darshit Rudani 5 Jul 6, 2022
A web dashboard that allows you to monitor your Chia farm and sends notifications when blocks are found and new plots are completed through a discord bot. It can link multiple farmers/harvesters to your account.

farmr A web dashboard that allows you to monitor your Chia farm and sends notifications when blocks are found and new plots are completed through a di

Gil Nobrega 261 Jan 2, 2023
This app is a minimal TodoList app that functions like a whiteboard. You can add new tasks, keep track of your tasks to make your day more productive, and then delete it after it is done.

My First Mobile App _ Minimal TodoList Flutter A new Flutter project. Getting Started This project is a starting point for a Flutter application. A fe

null 0 Nov 23, 2021
Quickly generate a personalized WhatsApp link with a predefined message and share it with your audience on your Social Networks!

Quickly generate a personalized WhatsApp link with a predefined message and share it with your audience on your Social Networks!

Sanskar Tiwari 11 Aug 28, 2021
BankGit helps you manage your account and transactions more efficiently by breaking your account into branches for various purposes and then making transactions directly from them.

Bank Git Web Hosted Here : https://bank-management-45848.web.app/ Bank Git is an application built with Flutter and Firebase to help you manage your b

Yash Johri 27 Dec 26, 2022
A task manager app made with flutter where you can mark your tasks for specific days and keep your life organized!

task_manager_app A task manager app made with flutter where you can mark your tasks for specific days and keep your life organized! Getting Started Th

null 2 Sep 1, 2021
Get your users to know your app with ease

nice_intro Get your users to know your app with ease Getting Started Onboarding is a great way to introduce your app to newcomers, to help them quickl

Ethiel ADIASSA 20 Nov 7, 2022
App to seamlessly share files/images from your phone to your pc

Self-Share App to seamlessly share files/images from your phone to your pc Image

Wahbi 1 May 28, 2022