A package for manipulating stack traces and printing them readably.

Overview

This library provides the ability to parse, inspect, and manipulate stack traces produced by the underlying Dart implementation. It also provides functions to produce string representations of stack traces in a more readable format than the native StackTrace implementation.

Traces can be parsed from native StackTraces using Trace.from, or captured using Trace.current. Native StackTraces can also be directly converted to human-readable strings using Trace.format.

Here's an example native stack trace from debugging this library:

#0      Object.noSuchMethod (dart:core-patch:1884:25)
#1      Trace.terse.<anonymous closure> (file:///usr/local/google-old/home/goog/dart/dart/pkg/stack_trace/lib/src/trace.dart:47:21)
#2      IterableMixinWorkaround.reduce (dart:collection:29:29)
#3      List.reduce (dart:core-patch:1247:42)
#4      Trace.terse (file:///usr/local/google-old/home/goog/dart/dart/pkg/stack_trace/lib/src/trace.dart:40:35)
#5      format (file:///usr/local/google-old/home/goog/dart/dart/pkg/stack_trace/lib/stack_trace.dart:24:28)
#6      main.<anonymous closure> (file:///usr/local/google-old/home/goog/dart/dart/test.dart:21:29)
#7      _CatchErrorFuture._sendError (dart:async:525:24)
#8      _FutureImpl._setErrorWithoutAsyncTrace (dart:async:393:26)
#9      _FutureImpl._setError (dart:async:378:31)
#10     _ThenFuture._sendValue (dart:async:490:16)
#11     _FutureImpl._handleValue.<anonymous closure> (dart:async:349:28)
#12     Timer.run.<anonymous closure> (dart:async:2402:21)
#13     Timer.Timer.<anonymous closure> (dart:async-patch:15:15)

and its human-readable representation:

dart:core-patch 1884:25                     Object.noSuchMethod
pkg/stack_trace/lib/src/trace.dart 47:21    Trace.terse.<fn>
dart:collection 29:29                       IterableMixinWorkaround.reduce
dart:core-patch 1247:42                     List.reduce
pkg/stack_trace/lib/src/trace.dart 40:35    Trace.terse
pkg/stack_trace/lib/stack_trace.dart 24:28  format
test.dart 21:29                             main.<fn>
dart:async 525:24                           _CatchErrorFuture._sendError
dart:async 393:26                           _FutureImpl._setErrorWithoutAsyncTrace
dart:async 378:31                           _FutureImpl._setError
dart:async 490:16                           _ThenFuture._sendValue
dart:async 349:28                           _FutureImpl._handleValue.<fn>
dart:async 2402:21                          Timer.run.<fn>
dart:async-patch 15:15                      Timer.Timer.<fn>

You can further clean up the stack trace using Trace.terse. This folds together multiple stack frames from the Dart core libraries, so that only the core library method that was directly called from user code is visible. For example:

dart:core                                   Object.noSuchMethod
pkg/stack_trace/lib/src/trace.dart 47:21    Trace.terse.<fn>
dart:core                                   List.reduce
pkg/stack_trace/lib/src/trace.dart 40:35    Trace.terse
pkg/stack_trace/lib/stack_trace.dart 24:28  format
test.dart 21:29                             main.<fn>

Stack Chains

This library also provides the ability to capture "stack chains" with the Chain class. When writing asynchronous code, a single stack trace isn't very useful, since the call stack is unwound every time something async happens. A stack chain tracks stack traces through asynchronous calls, so that you can see the full path from main down to the error.

To use stack chains, just wrap the code that you want to track in Chain.capture. This will create a new Zone in which stack traces are recorded and woven into chains every time an asynchronous call occurs. Zones are sticky, too, so any asynchronous operations started in the Chain.capture callback will have their chains tracked, as will asynchronous operations they start and so on.

Here's an example of some code that doesn't capture its stack chains:

import 'dart:async';

void main() {
  scheduleAsync();
}

void scheduleAsync() {
  return new Future.delayed(new Duration(seconds: 1))
      .then((_) => runAsync());
}

void runAsync() {
  throw 'oh no!';
}

If we run this, it prints the following:

Uncaught Error: oh no!
Stack Trace: 
#0      runAsync (file:///usr/local/google-old/home/goog/dart/dart/test.dart:13:3)
#1      scheduleAsync.<anonymous closure> (file:///usr/local/google-old/home/goog/dart/dart/test.dart:9:28)
#2      _rootRunUnary (dart:async/zone.dart:717)
#3      _RootZone.runUnary (dart:async/zone.dart:854)
#4      _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:488)
#5      _Future._propagateToListeners (dart:async/future_impl.dart:571)
#6      _Future._complete (dart:async/future_impl.dart:317)
#7      _SyncCompleter.complete (dart:async/future_impl.dart:44)
#8      Future.Future.delayed.<anonymous closure> (dart:async/future.dart:219)
#9      _createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:11)
#10     _handleTimeout (dart:io/timer_impl.dart:292)
#11     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:115)

Notice how there's no mention of main in that stack trace. All we know is that the error was in runAsync; we don't know why runAsync was called.

Now let's look at the same code with stack chains captured:

import 'dart:async';

import 'package:stack_trace/stack_trace.dart';

void main() {
  Chain.capture(() {
    scheduleAsync();
  });
}

void scheduleAsync() {
  new Future.delayed(new Duration(seconds: 1))
      .then((_) => runAsync());
}

void runAsync() {
  throw 'oh no!';
}

Now if we run it, it prints this:

Uncaught Error: oh no!
Stack Trace: 
test.dart 17:3                                                runAsync
test.dart 13:28                                               scheduleAsync.<fn>
package:stack_trace/src/stack_zone_specification.dart 129:26  registerUnaryCallback.<fn>.<fn>
package:stack_trace/src/stack_zone_specification.dart 174:15  StackZoneSpecification._run
package:stack_trace/src/stack_zone_specification.dart 177:7   StackZoneSpecification._run
package:stack_trace/src/stack_zone_specification.dart 175:7   StackZoneSpecification._run
package:stack_trace/src/stack_zone_specification.dart 129:18  registerUnaryCallback.<fn>
dart:async/zone.dart 717                                      _rootRunUnary
dart:async/zone.dart 449                                      _ZoneDelegate.runUnary
dart:async/zone.dart 654                                      _CustomizedZone.runUnary
dart:async/future_impl.dart 488                               _Future._propagateToListeners.handleValueCallback
dart:async/future_impl.dart 571                               _Future._propagateToListeners
dart:async/future_impl.dart 317                               _Future._complete
dart:async/future_impl.dart 44                                _SyncCompleter.complete
dart:async/future.dart 219                                    Future.Future.delayed.<fn>
package:stack_trace/src/stack_zone_specification.dart 174:15  StackZoneSpecification._run
package:stack_trace/src/stack_zone_specification.dart 119:52  registerCallback.<fn>
dart:async/zone.dart 706                                      _rootRun
dart:async/zone.dart 440                                      _ZoneDelegate.run
dart:async/zone.dart 650                                      _CustomizedZone.run
dart:async/zone.dart 561                                      _BaseZone.runGuarded
dart:async/zone.dart 586                                      _BaseZone.bindCallback.<fn>
package:stack_trace/src/stack_zone_specification.dart 174:15  StackZoneSpecification._run
package:stack_trace/src/stack_zone_specification.dart 119:52  registerCallback.<fn>
dart:async/zone.dart 710                                      _rootRun
dart:async/zone.dart 440                                      _ZoneDelegate.run
dart:async/zone.dart 650                                      _CustomizedZone.run
dart:async/zone.dart 561                                      _BaseZone.runGuarded
dart:async/zone.dart 586                                      _BaseZone.bindCallback.<fn>
dart:async-patch/timer_patch.dart 11                          _createTimer.<fn>
dart:io/timer_impl.dart 292                                   _handleTimeout
dart:isolate-patch/isolate_patch.dart 115                     _RawReceivePortImpl._handleMessage
===== asynchronous gap ===========================
dart:async/zone.dart 476                                      _ZoneDelegate.registerUnaryCallback
dart:async/zone.dart 666                                      _CustomizedZone.registerUnaryCallback
dart:async/future_impl.dart 164                               _Future._Future._then
dart:async/future_impl.dart 187                               _Future.then
test.dart 13:12                                               scheduleAsync
test.dart 7:18                                                main.<fn>
dart:async/zone.dart 710                                      _rootRun
dart:async/zone.dart 440                                      _ZoneDelegate.run
dart:async/zone.dart 650                                      _CustomizedZone.run
dart:async/zone.dart 944                                      runZoned
package:stack_trace/src/chain.dart 93:20                      Chain.capture
test.dart 6:16                                                main
dart:isolate-patch/isolate_patch.dart 216                     _startIsolate.isolateStartHandler
dart:isolate-patch/isolate_patch.dart 115                     _RawReceivePortImpl._handleMessage

That's a lot of text! If you look closely, though, you can see that main is listed in the first trace in the chain.

Thankfully, you can call Chain.terse just like Trace.terse to get rid of all the frames you don't care about. The terse version of the stack chain above is this:

test.dart 17:3       runAsync
test.dart 13:28      scheduleAsync.<fn>
===== asynchronous gap ===========================
dart:async           _Future.then
test.dart 13:12      scheduleAsync
test.dart 7:18       main.<fn>
package:stack_trace  Chain.capture
test.dart 6:16       main

That's a lot easier to understand!

Comments
  •  1.24.0-dev.4.2

    1.24.0-dev.4.2

    When an pkg/http connection fails I get this stack – with pubviz

    Not sure if this is an SDK issue or stack_trace.

    I'm on SDK

    HandshakeException: Connection terminated during handshake
    unparsed       #3      _CustomZone.registerCallback (dart:async/zone.dart:1034)
    unparsed       #4      _CustomZone.bindCallback (dart:async/zone.dart:924)
    unparsed       #5      new Timer (dart:async/timer.dart:52)
    unparsed       #6      Timer.run (dart:async/timer.dart:90)
    unparsed       #7      new Future (dart:async/future.dart:156)
    unparsed       #8      _HttpClient._getConnection (dart:io/http_impl.dart:1910)
    unparsed       #9      _HttpClient._openUrl (dart:io/http_impl.dart:1813)
    unparsed       #10     _HttpClient.openUrl (dart:io/http_impl.dart:1718)
    unparsed       #11     IOClient.send (package:http/src/io_client.dart:43)
    <asynchronous  suspension>
    unparsed       #12     BaseClient._sendUnstreamed (package:http/src/base_client.dart:171)
    <asynchronous  suspension>
    unparsed       #13     BaseClient.get (package:http/src/base_client.dart:34)
    unparsed       #14     get.<anonymous closure> (package:http/http.dart:47)
    unparsed       #15     _withClient (package:http/http.dart:167)
    <asynchronous  suspension>
    unparsed       #16     get (package:http/http.dart:47)
    unparsed       #17     getLatestVersion (package:pubviz/src/util.dart:9)
    <asynchronous  suspension>
    unparsed       #18     VizPackage.updateLatestVersion (package:pubviz/src/viz_package.dart:86)
    <asynchronous  suspension>
    unparsed       #19     VizPackage.forDirectory (package:pubviz/src/viz_package.dart:58)
    <asynchronous  suspension>
    unparsed       #20     _getReferencedPackages.<anonymous closure> (package:pubviz/src/viz_root.dart:119)
    <asynchronous  suspension>
    unparsed       #21     MappedIterator.moveNext (dart:_internal/iterable.dart:391)
    unparsed       #22     Future.wait (dart:async/future.dart:355)
    unparsed       #23     _getReferencedPackages (package:pubviz/src/viz_root.dart:127)
    <asynchronous  suspension>
    unparsed       #24     VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #25     main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #26     Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #27     _rootRun (dart:async/zone.dart:1120)
    unparsed       #28     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #29     runZoned (dart:async/zone.dart:1467)
    unparsed       #30     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #31     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #32     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #33     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerCallback (dart:async/zone.dart:1034)
    unparsed       #4      _CustomZone.bindCallback (dart:async/zone.dart:924)
    unparsed       #5      scheduleMicrotask (dart:async/schedule_microtask.dart:148)
    unparsed       #6      new Future.microtask (dart:async/future.dart:182)
    unparsed       #7      IOClient.send (package:http/src/io_client.dart:39)
    unparsed       #8      BaseClient._sendUnstreamed (package:http/src/base_client.dart:171)
    <asynchronous  suspension>
    unparsed       #9      BaseClient.get (package:http/src/base_client.dart:34)
    unparsed       #10     get.<anonymous closure> (package:http/http.dart:47)
    unparsed       #11     _withClient (package:http/http.dart:167)
    <asynchronous  suspension>
    unparsed       #12     get (package:http/http.dart:47)
    unparsed       #13     getLatestVersion (package:pubviz/src/util.dart:9)
    <asynchronous  suspension>
    unparsed       #14     VizPackage.updateLatestVersion (package:pubviz/src/viz_package.dart:86)
    <asynchronous  suspension>
    unparsed       #15     VizPackage.forDirectory (package:pubviz/src/viz_package.dart:58)
    <asynchronous  suspension>
    unparsed       #16     _getReferencedPackages.<anonymous closure> (package:pubviz/src/viz_root.dart:119)
    <asynchronous  suspension>
    unparsed       #17     MappedIterator.moveNext (dart:_internal/iterable.dart:391)
    unparsed       #18     Future.wait (dart:async/future.dart:355)
    unparsed       #19     _getReferencedPackages (package:pubviz/src/viz_root.dart:127)
    <asynchronous  suspension>
    unparsed       #20     VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #21     main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #22     Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #23     _rootRun (dart:async/zone.dart:1120)
    unparsed       #24     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #25     runZoned (dart:async/zone.dart:1467)
    unparsed       #26     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #27     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #28     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #29     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerCallback (dart:async/zone.dart:1034)
    unparsed       #4      _CustomZone.bindCallback (dart:async/zone.dart:924)
    unparsed       #5      scheduleMicrotask (dart:async/schedule_microtask.dart:148)
    unparsed       #6      new Future.microtask (dart:async/future.dart:182)
    unparsed       #7      BaseClient._sendUnstreamed (package:http/src/base_client.dart:152)
    unparsed       #8      BaseClient.get (package:http/src/base_client.dart:34)
    unparsed       #9      get.<anonymous closure> (package:http/http.dart:47)
    unparsed       #10     _withClient (package:http/http.dart:167)
    <asynchronous  suspension>
    unparsed       #11     get (package:http/http.dart:47)
    unparsed       #12     getLatestVersion (package:pubviz/src/util.dart:9)
    <asynchronous  suspension>
    unparsed       #13     VizPackage.updateLatestVersion (package:pubviz/src/viz_package.dart:86)
    <asynchronous  suspension>
    unparsed       #14     VizPackage.forDirectory (package:pubviz/src/viz_package.dart:58)
    <asynchronous  suspension>
    unparsed       #15     _getReferencedPackages.<anonymous closure> (package:pubviz/src/viz_root.dart:119)
    <asynchronous  suspension>
    unparsed       #16     MappedIterator.moveNext (dart:_internal/iterable.dart:391)
    unparsed       #17     Future.wait (dart:async/future.dart:355)
    unparsed       #18     _getReferencedPackages (package:pubviz/src/viz_root.dart:127)
    <asynchronous  suspension>
    unparsed       #19     VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #20     main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #21     Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #22     _rootRun (dart:async/zone.dart:1120)
    unparsed       #23     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #24     runZoned (dart:async/zone.dart:1467)
    unparsed       #25     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #26     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #27     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #28     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerCallback (dart:async/zone.dart:1034)
    unparsed       #4      _CustomZone.bindCallback (dart:async/zone.dart:924)
    unparsed       #5      scheduleMicrotask (dart:async/schedule_microtask.dart:148)
    unparsed       #6      new Future.microtask (dart:async/future.dart:182)
    unparsed       #7      _withClient (package:http/http.dart:164)
    unparsed       #8      get (package:http/http.dart:47)
    unparsed       #9      getLatestVersion (package:pubviz/src/util.dart:9)
    <asynchronous  suspension>
    unparsed       #10     VizPackage.updateLatestVersion (package:pubviz/src/viz_package.dart:86)
    <asynchronous  suspension>
    unparsed       #11     VizPackage.forDirectory (package:pubviz/src/viz_package.dart:58)
    <asynchronous  suspension>
    unparsed       #12     _getReferencedPackages.<anonymous closure> (package:pubviz/src/viz_root.dart:119)
    <asynchronous  suspension>
    unparsed       #13     MappedIterator.moveNext (dart:_internal/iterable.dart:391)
    unparsed       #14     Future.wait (dart:async/future.dart:355)
    unparsed       #15     _getReferencedPackages (package:pubviz/src/viz_root.dart:127)
    <asynchronous  suspension>
    unparsed       #16     VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #17     main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #18     Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #19     _rootRun (dart:async/zone.dart:1120)
    unparsed       #20     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #21     runZoned (dart:async/zone.dart:1467)
    unparsed       #22     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #23     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #24     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #25     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerCallback (dart:async/zone.dart:1034)
    unparsed       #4      _CustomZone.bindCallback (dart:async/zone.dart:924)
    unparsed       #5      scheduleMicrotask (dart:async/schedule_microtask.dart:148)
    unparsed       #6      new Future.microtask (dart:async/future.dart:182)
    unparsed       #7      getLatestVersion (package:pubviz/src/util.dart:7)
    unparsed       #8      VizPackage.updateLatestVersion (package:pubviz/src/viz_package.dart:86)
    <asynchronous  suspension>
    unparsed       #9      VizPackage.forDirectory (package:pubviz/src/viz_package.dart:58)
    <asynchronous  suspension>
    unparsed       #10     _getReferencedPackages.<anonymous closure> (package:pubviz/src/viz_root.dart:119)
    <asynchronous  suspension>
    unparsed       #11     MappedIterator.moveNext (dart:_internal/iterable.dart:391)
    unparsed       #12     Future.wait (dart:async/future.dart:355)
    unparsed       #13     _getReferencedPackages (package:pubviz/src/viz_root.dart:127)
    <asynchronous  suspension>
    unparsed       #14     VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #15     main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #16     Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #17     _rootRun (dart:async/zone.dart:1120)
    unparsed       #18     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #19     runZoned (dart:async/zone.dart:1467)
    unparsed       #20     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #21     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #22     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #23     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerCallback (dart:async/zone.dart:1034)
    unparsed       #4      _CustomZone.bindCallback (dart:async/zone.dart:924)
    unparsed       #5      scheduleMicrotask (dart:async/schedule_microtask.dart:148)
    unparsed       #6      new Future.microtask (dart:async/future.dart:182)
    unparsed       #7      VizPackage.updateLatestVersion (package:pubviz/src/viz_package.dart:83)
    unparsed       #8      VizPackage.forDirectory (package:pubviz/src/viz_package.dart:58)
    <asynchronous  suspension>
    unparsed       #9      _getReferencedPackages.<anonymous closure> (package:pubviz/src/viz_root.dart:119)
    <asynchronous  suspension>
    unparsed       #10     MappedIterator.moveNext (dart:_internal/iterable.dart:391)
    unparsed       #11     Future.wait (dart:async/future.dart:355)
    unparsed       #12     _getReferencedPackages (package:pubviz/src/viz_root.dart:127)
    <asynchronous  suspension>
    unparsed       #13     VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #14     main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #15     Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #16     _rootRun (dart:async/zone.dart:1120)
    unparsed       #17     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #18     runZoned (dart:async/zone.dart:1467)
    unparsed       #19     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #20     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #21     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #22     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerUnaryCallback (dart:async/zone.dart:1045)
    unparsed       #4      _asyncThenWrapperHelper (dart:async-patch/async_patch.dart:30)
    unparsed       #5      VizPackage.forDirectory (package:pubviz/src/viz_package.dart:38)
    unparsed       #6      _getReferencedPackages.<anonymous closure> (package:pubviz/src/viz_root.dart:119)
    <asynchronous  suspension>
    unparsed       #7      MappedIterator.moveNext (dart:_internal/iterable.dart:391)
    unparsed       #8      Future.wait (dart:async/future.dart:355)
    unparsed       #9      _getReferencedPackages (package:pubviz/src/viz_root.dart:127)
    <asynchronous  suspension>
    unparsed       #10     VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #11     main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #12     Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #13     _rootRun (dart:async/zone.dart:1120)
    unparsed       #14     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #15     runZoned (dart:async/zone.dart:1467)
    unparsed       #16     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #17     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #18     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #19     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerCallback (dart:async/zone.dart:1034)
    unparsed       #4      _CustomZone.bindCallback (dart:async/zone.dart:924)
    unparsed       #5      scheduleMicrotask (dart:async/schedule_microtask.dart:148)
    unparsed       #6      new Future.microtask (dart:async/future.dart:182)
    unparsed       #7      _getReferencedPackages.<anonymous closure> (package:pubviz/src/viz_root.dart:117)
    unparsed       #8      MappedIterator.moveNext (dart:_internal/iterable.dart:391)
    unparsed       #9      Future.wait (dart:async/future.dart:355)
    unparsed       #10     _getReferencedPackages (package:pubviz/src/viz_root.dart:127)
    <asynchronous  suspension>
    unparsed       #11     VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #12     main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #13     Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #14     _rootRun (dart:async/zone.dart:1120)
    unparsed       #15     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #16     runZoned (dart:async/zone.dart:1467)
    unparsed       #17     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #18     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #19     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #20     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerUnaryCallback (dart:async/zone.dart:1045)
    unparsed       #4      _asyncThenWrapperHelper (dart:async-patch/async_patch.dart:30)
    unparsed       #5      _getReferencedPackages (package:pubviz/src/viz_root.dart:112)
    unparsed       #6      VizRoot.forDirectory (package:pubviz/src/viz_root.dart:25)
    <asynchronous  suspension>
    unparsed       #7      main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #8      Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #9      _rootRun (dart:async/zone.dart:1120)
    unparsed       #10     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #11     runZoned (dart:async/zone.dart:1467)
    unparsed       #12     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #13     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #14     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #15     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerUnaryCallback (dart:async/zone.dart:1045)
    unparsed       #4      _asyncThenWrapperHelper (dart:async-patch/async_patch.dart:30)
    unparsed       #5      VizRoot.forDirectory (package:pubviz/src/viz_root.dart:23)
    unparsed       #6      main.<anonymous closure> (http://localhost:57487/pubviz.dart:40)
    <asynchronous  suspension>
    unparsed       #7      Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #8      _rootRun (dart:async/zone.dart:1120)
    unparsed       #9      _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #10     runZoned (dart:async/zone.dart:1467)
    unparsed       #11     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #12     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #13     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #14     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    ===== asynchronous gap ===========================
    unparsed       #3      _CustomZone.registerCallback (dart:async/zone.dart:1034)
    unparsed       #4      _CustomZone.bindCallback (dart:async/zone.dart:924)
    unparsed       #5      scheduleMicrotask (dart:async/schedule_microtask.dart:148)
    unparsed       #6      new Future.microtask (dart:async/future.dart:182)
    unparsed       #7      main.<anonymous closure> (http://localhost:57487/pubviz.dart:39)
    unparsed       #8      Chain.capture.<anonymous closure> (package:stack_trace/src/chain.dart:92)
    unparsed       #9      _rootRun (dart:async/zone.dart:1120)
    unparsed       #10     _CustomZone.run (dart:async/zone.dart:1001)
    unparsed       #11     runZoned (dart:async/zone.dart:1467)
    unparsed       #12     Chain.capture (package:stack_trace/src/chain.dart:90)
    unparsed       #13     main (http://localhost:57487/pubviz.dart:39)
    <asynchronous  suspension>
    unparsed       #14     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
    unparsed       #15     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)
    
    opened by kevmoo 13
  • Fixes async gap handling.

    Fixes async gap handling.

    This fixes an issue where an async gap at the end of a stack trace would not get parsed correctly due to the trailing newline being trim()'d.

    A couple of tests were added to cover this case.

    cla: yes 
    opened by ghost 7
  • Fixes async gap handling in Trace.parse and Chain.parse

    Fixes async gap handling in Trace.parse and Chain.parse

    This fixes two minor issues in dealing with async gaps at the end of stack traces (which is new with --lazy-async-stacks):

    • Chain.parse would naively split a chain on the gaps, creating traces for every part, including the empty string after the ending gap marker.
    • Trace._parseVM incorrectly assumed it would always be passed non-empty strings.

    This was observed causing crashes in Pub tests that were parsing and checking specific traces.

    cla: yes 
    opened by ghost 6
  • chain_test fails with Dart 2.0.0-dev.60.0

    chain_test fails with Dart 2.0.0-dev.60.0

    In dev.60, we landed a change to Stream and Zone onError callbacks: https://github.com/dart-lang/sdk/commit/315a186dc4128a4f15cfb4a0c4f1ef6b42ccb866#diff-3d86b3443b2ea32440e90f626168d61a

    This causes chain_test to fail:

    00:00 +6 -1: test/chain/chain_test.dart: Chain.capture() with no onError blocks errors [E]
      NoSuchMethodError: Closure call with mismatched arguments: function 'call'
      Receiver: Closure: (dynamic, dynamic) => dynamic
      Tried calling: call("OH NO")
      Found: call(dynamic, dynamic) => dynamic
      dart:async                        new Future.error
      test/chain/chain_test.dart 54:37  main.<fn>.<fn>.<fn>.<fn>
      package:stack_trace               Chain.capture
      test/chain/chain_test.dart 54:19  main.<fn>.<fn>.<fn>
      dart:async                        runZoned
      test/chain/chain_test.dart 52:7   main.<fn>.<fn>
    
    opened by srawlins 6
  • Avoid converting stacktrace to nullable and then null checking it.

    Avoid converting stacktrace to nullable and then null checking it.

    The Dart implementation will soon be changed so that a declaration such as T? x = y, where y has a non-nullable type, automatically promotes x to a non-nullable type. This will in turn cause a warning if a non-nullable value is assigned to a nullable variable and then null checked.

    We're currently doing that in one place, and there's no need to, so remove the unnecessary type conversion and null check.

    cla: yes 
    opened by stereotype441 5
  • ability to parse chrome eval exceptions

    ability to parse chrome eval exceptions

    Hello! At now Library has a problems with parsing V8 eval stack frames. For example:

    ERROR Error: test
        at eval (eval at get isAppReady (app_store.ts:24), <anonymous>:1:7)
        at AppStore.get isAppReady (app_store.ts:24)
        at trackDerivedFunction (mobx.module.js:761)
        at ComputedValue.push../node_modules/mobx/lib/mobx.module.js.ComputedValue.computeValue (mobx.module.js:1258)
    

    will be unparsed.

    this PR fixes this behavior.

    cla: yes 
    opened by sinegovsky-ivan 5
  • Add support for Firefox anonymous stackTraces

    Add support for Firefox anonymous stackTraces

    Library can't correctly parse firefox anonymous stacktraces: example:

    // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack
    try {
      new Function('throw new Error()')();
    } catch (e) {
      console.log(e.stack);
    }
    
    // anonymous@file:///C:/example.html line 7 > Function:1:1
    // @file:///C:/example.html:7:6
    

    In this case Frame's uri become 'file:///C:/example.html%20%line%20%7' instead of 'file:///C:/example.html'

    This small patch fixes the issue.

    cla: yes 
    opened by sinegovsky-ivan 4
  • Type error?

    Type error?

    I get this issue when compiling with dartdevc:

    Error compiling dartdevc module:stack_trace|lib/lib__stack_trace.js
    
    [error] The return type 'void' isn't a 'T', as defined by the method ''. (package:stack_trace/src/chain.dart, line 96, col 16)
    [error] The argument type '(Zone, ZoneDelegate, Zone, Function) → () → dynamic' can't be assigned to the parameter type '<R>(Zone, ZoneDelegate, Zone, () → R) → () → R'. (package:stack_trace/src/stack_zone_specification.dart, line 69, col 9)
    [error] The argument type '(Zone, ZoneDelegate, Zone, Function) → (dynamic) → dynamic' can't be assigned to the parameter type '<R,T>(Zone, ZoneDelegate, Zone, (T) → R) → (T) → R'. (package:stack_trace/src/stack_zone_specification.dart, line 70, col 9)
    [error] The argument type '(Zone, ZoneDelegate, Zone, Function) → (dynamic, dynamic) → dynamic' can't be assigned to the parameter type '<R,T1,T2>(Zone, ZoneDelegate, Zone, (T1, T2) → R) → (T1, T2) → R'. (package:stack_trace/src/stack_zone_specification.dart, line 71, col 9)
    
    Please fix all errors before compiling (warnings are okay).
    
    bug needs info 
    opened by bergwerf 4
  • Add sample for Chain.terse

    Add sample for Chain.terse

    Thanks for your package - it is really helpful!!!! but it took me quite a while to figure out how to handle Chain.terse / Trace.terse...

    Could you add a little sample to your README?

        void run() {
            Chain.capture( () {
                _loadAsyncProxy();
    
            },onError: (final error,final Chain chain) {
    
                _logger.shout(error,chain.terse);
            });
        }
    
    needs info 
    opened by MikeMitterer 4
  • Package stack_trace prevents breakpoints from working

    Package stack_trace prevents breakpoints from working

    So I tried using the stack_trace package in my app, it works fine, except for this:

    screenshot

    If I remove the comments, the breakpoints don't work anymore. I'm using intelliJ ultimate with the Dart Plugin, with stack_trace version 1.3.2

    Is this a known side-effect of using stack_trace or intended?

    opened by Pacane 4
  • Improve handling of VM stack chains

    Improve handling of VM stack chains

    This more consistently uses stack_trace's chains when they're available, and falls back on VM chains when they aren't. This was always the policy, but we were missing some edge cases.

    cla: yes 
    opened by nex3 3
  • `Chain.capture()` fails to generate complete stack trace for `FileSystemException`

    `Chain.capture()` fails to generate complete stack trace for `FileSystemException`

    Steps to reproduce

    Run the following code:

    import 'dart:io';
    import 'package:stack_trace/stack_trace.dart';
    
    Future<void> badFunc() => File('foo').readAsString();
    
    void main(List<String> arguments) async {
      await Chain.capture(() async {
        try {
          await badFunc();
        }
        catch (error, stackTrace) {
          print(stackTrace);
        }
      });
    }
    

    Output

    #0      _File.open.<anonymous closure> (dart:io/file_impl.dart:356:9)
    #1      StackZoneSpecification._registerUnaryCallback.<anonymous closure>.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:124:36)
    #2      StackZoneSpecification._run (package:stack_trace/src/stack_zone_specification.dart:204:15)
    #3      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:124:24)
    #4      _rootRunUnary (dart:async/zone.dart:1399:47)
    #5      _CustomZone.runUnary (dart:async/zone.dart:1300:19)
    <asynchronous suspension>
    #6      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:124:15)
    <asynchronous suspension>
    

    Expected result

    I am expecting to see some mention of main() and/or the source file name in the stack trace. However, as you can see, there is no mention of any user code in this stack trace at all.

    Using stack_trace version 1.11.0.

    opened by cbatson 0
  • Stack Trace is wrong in release mode (Flutter/Android)

    Stack Trace is wrong in release mode (Flutter/Android)

    Calling Trace.current() in debug works perfectly. However, calling Trace.current() in release mode yields a different stack which is definitely wrong (this code path is impossible). Most, if not all stack traces I get in release mode are like this (where one or two function calls are wrong).

    Debug stack trace, showing correct GlobalChannelProxyService.createChannel call:

    package:poly_scrabble_mobile/room_service/room_service.dart 52:36              RoomService._getCurrentFunctionName
    package:poly_scrabble_mobile/room_service/room_service.dart 134:25             RoomService.callServer
    package:poly_scrabble_mobile/services/global_channel_proxy_service.dart 17:33  GlobalChannelProxyService.createChannel
    package:poly_scrabble_mobile/main_page/chat/create_channel_dialog.dart 14:10   CreateChannelDialog.submit
    package:poly_scrabble_mobile/main_page/chat/create_channel_dialog.dart 44:17   CreateChannelDialog.build.<fn>
    ...
    

    Release stack trace, showing impossible GameServiceProxy.executePlace call:

    package:poly_scrabble_mobile/room_service/room_service.dart 52             RoomService._getCurrentFunctionName
    package:poly_scrabble_mobile/room_service/room_service.dart 134            RoomService.callServer
    package:poly_scrabble_mobile/services/game_proxy_service.dart 84           GameServiceProxy.executePlace
    package:poly_scrabble_mobile/main_page/chat/create_channel_dialog.dart 16  CreateChannelDialog.submit.<fn>
    

    Please note GameServiceProxy.executePlace is never even called in the app. It is, however, an async function, which may be related. If I comment the GameServiceProxy.executePlace function, the release stack trace will be different, but still wrong:

    Release stack trace with commented GameServiceProxy.executePlace function:

    package:poly_scrabble_mobile/room_service/room_service.dart 52              RoomService._getCurrentFunctionName
    package:poly_scrabble_mobile/room_service/room_service.dart 111             RoomService.reflectProp
    package:poly_scrabble_mobile/services/self_user_proxy_service.dart 12       SelfUserProxyService.user
    package:poly_scrabble_mobile/room_service/room_service.dart 165             RoomService._callServerBase
    package:poly_scrabble_mobile/room_service/room_service.dart 148             RoomService.callServer
    package:poly_scrabble_mobile/services/global_channel_proxy_service.dart 17  GlobalChannelProxyService.createChannel
    package:poly_scrabble_mobile/main_page/chat/create_channel_dialog.dart 14   CreateChannelDialog.submit
    package:poly_scrabble_mobile/main_page/chat/create_channel_dialog.dart 33   CreateChannelDialog.build.<fn>
    ...
    

    Please note the SelfUserProxyService.user, which is also an impossible path. It looks like 2 stack traces got mangled in this case.

    opened by fordcars 0
  • Remove unused Chain.disable functionality

    Remove unused Chain.disable functionality

    I cannot find any uses of the Chain.disable API outside of the tests in this package. It is unnecessary complexity. Removing the functionality may also remove some of the overhead from this package since we can omit a boolean check and reading a zone variable for every zone callback.

    Any concerns @jakemac53 @lrhn ?

    next-breaking-release 
    opened by natebosch 3
  • How to get only the caller class link ?

    How to get only the caller class link ?

    There is a someLoggerMethod(Trace.current().frames[1].member) , witch returns the caller function name. Is it a way to insert a caller class link too in console? with result like

    message, callerFunction , lib/className.dart //class link underlined
    
    opened by visign3d 0
  • Trace.parse() does not correctly parse standard stacks in stderr from the Dart VM

    Trace.parse() does not correctly parse standard stacks in stderr from the Dart VM

    If I run:

    main() {
      throw 'test';
    }
    

    I get the output:

    Unhandled exception:
    test
    #0      main (file:///Users/danny/Desktop/dart_sample/bin/trace.dart:2:3)
    #1      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
    #2      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
    

    If I feed this into Trace.parse, it doesn't appear to parse correctly (it goes into Trace.parseFriendly, and that doesn't seem to handle this format):

    import 'package:stack_trace/stack_trace.dart';
    
    main() {
      final stderrOutput = '''
    Unhandled exception:
    test
    #0      main (file:///Users/danny/Desktop/dart_sample/bin/trace.dart:2:3)
    #1      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
    #2      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
    '''
          .trim();
    
      final trace = Trace.parse(stderrOutput);
      for (final frame in trace.frames) {
        print('${frame.uri} ${frame.line}:${frame.column}');
      }
    }
    

    Outputs:

    file:///Users/danny/Desktop/dart_sample null:null
    file:///Users/danny/Desktop/dart_sample null:null
    file:///Users/danny/Desktop/dart_sample null:null
    

    The URIs and line/col don't seem to have been parsed correctly. Calling Trace.parseVm() works correctly, but I don't know for certain that the stack will always be from a VM and thought Trace.parse should handle this.

    opened by DanTup 1
  • Cannot use `catch` anymore when using `Chain.capture`

    Cannot use `catch` anymore when using `Chain.capture`

    Very simple example:

    void main() async {
      try {
        await g();
      } catch (e) {
        print('catch e=$e');
      }
    }
    
    Future<void> g() {
      throw Exception('fake error');
    }
    

    As expected, the output is catch e=Exception: fake error.

    However, by wrapping g with Chain.capture as follows:

    Future<void> g() {
      return Chain.capture(() async {
        throw Exception('fake error');
      });
    }
    

    Our catch no longer works! See below:

    [VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: Exception: fake error
    package:yplusplus/main.dart 60:5              g.<fn>
    package:yplusplus/main.dart 59:24             g.<fn>
    package:stack_trace/src/chain.dart 94:24      Chain.capture.<fn>
    dart:async/zone.dart 1354:13                  _rootRun
    dart:async/zone.dart 1258:19                  _CustomZone.run
    dart:async/zone.dart 1789:10                  _runZoned
    dart:async/zone.dart 1711:10                  runZoned
    package:stack_trace/src/chain.dart 92:12      Chain.capture
    package:yplusplus/main.dart 59:16             g
    package:yplusplus/main.dart 52:11             main
    dart:ui/hooks.dart 142:25                     _runMainZoned.<fn>.<fn>
    dart:async/zone.dart 1354:13                  _rootRun
    dart:async/zone.dart 1258:19                  _CustomZone.run
    dart:async/zone.dart 1789:10                  _runZoned
    dart:async/zone.dart 1777:12                  runZonedGuarded
    dart:ui/hooks.dart 138:5                      _runMainZoned.<fn>
    dart:isola<…>
    

    This is very counter-intuitive. I wonder how can I solve this problem? In other words, I want to have the full stack trace (so I use capture), but at the same time, I want catch to work!

    Thanks for any suggestions!

    opened by fzyzcjy 1
Releases(1.6.6)
Owner
Dart
Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.
Dart
A flutter package that developers have pretty logs instead just printing everything like a newbie

A flutter package that developers have pretty logs instead just printing everything like a newbie. Features Makes it easy to log to console without us

null 2 Nov 28, 2021
Esc pos printer - POS (thermal, receipt) printing for Flutter & Dart

esc_pos_printer The library allows to print receipts using an ESC/POS thermal WiFi/Ethernet printer. For Bluetooth printers, use esc_pos_bluetooth lib

Andrey 259 Jan 6, 2023
(Full-stack) Fully functional social media app (Instagram clone) written in flutter and dart with backend node.js and Postgres SQL.

Photoarc A Fully functional social media app written in flutter and dart using node.js and Postgres SQL as backend. Backend Repository Demo Download t

Ansh rathod 59 Jan 5, 2023
Flutter-Musive-app - Full-stack music player app written in flutter and dart using node.js music API

Musive Full-stack music player app is written in flutter and dart using node.js

Ansh rathod 69 Dec 28, 2022
Full Stack Instagram Clone With Flutter and Firebase

Instagram Full Stack Clone with Flutter,Dart and Firebase Built an responsive Instagram Clone app that Works on Android and Web! Features Responsive I

Sunil Chormare 3 Aug 14, 2022
Flying Fish is full-stack Dart framework - a semi-opinionated framework for building applications exclusively using Dart and Flutter

Flying Fish is full-stack Dart framework - a semi-opinionated framework for building applications exclusively using Dart and Flutter.

Flutter Fish 3 Dec 27, 2022
BubbleShowcase is a small but power flutter package that allows you to highlight specific parts of your app to explain them to the user or to showcase your app new features.

BubbleShowcase BubbleShowcase is a small but powerful flutter package that allows you to highlight specific parts of your app (to explain them to the

Hugo Delaunay 38 Oct 26, 2022
A dart-lang version of the SIP UA stack.

dart-sip-ua A dart-lang version of the SIP UA stack, ported from JsSIP. Overview Use pure dart-lang SIP over WebSocket (use real SIP in your flutter m

Flutter WebRTC 255 Dec 26, 2022
Flutter item stack listview

Flutter Item Stack ListView Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is

sarad chhetri 0 Dec 12, 2021
Build Instagram Clone - with Clean Architecture Flutter (Firebase Full-Stack)

Instagram Clone - Clean Architecture Flutter Instagram Clone Flutter - with Clean Architecture Firebase as backend (Full-Stack) is Underdevelopment Ap

Adnan Khan 41 Dec 31, 2022
Responsive Full Stack Reddit Clone - Works on Android, iOS & Web! built with Flutter 🚀💙

?? ??️ ?? ??️ ?? ??️ ?? ??️ UNDER CONSTRUCTION ?? ??️ ?? ??️ ?? ??️ ?? ??️ Reddit Clone ?? ?? Responsive Full Stack Reddit Clone - Works on Android, i

SOLOMON ABUH 3 Dec 15, 2022
SoundVolumeView that displays general information and the current volume level for all active sound components in your system, and allows you to instantly mute and unmute them

SoundVolumeView that displays general information and the current volume level for all active sound components in your system, and allows you to instantly mute and unmute them

Domingo 4 Mar 4, 2022
Flutter plugin for selecting images from the Android and iOS image library, taking new pictures with the camera, and edit them before using such as rotation, cropping, adding sticker/text/filters.

advance_image_picker Flutter plugin for selecting multiple images from the Android and iOS image library, taking new pictures with the camera, and edi

Weta Vietnam 91 Dec 19, 2022
Flutter frontend for downloading free album and playlists (based on a YouTube URL) and uploading them to a Plex server.

Flutter frontend for downloading free album and playlists (based on a YouTube URL) and uploading them to a Plex server. (The project is currently in progress. There are some additional features and ideas I want to implement.)

null 1 Jan 9, 2022
Rajagiri connect is a networking platform that enables the students of Rajagiri to form a social network among themselves, enabling them to connect with their seniors, juniors and faculty for sharing of information and resources.

Rajagiri Connect Rajagiri connect is a networking platform that enables the students of Rajagiri to form a social network among themselves, enabling t

Muhammad Amaan 2 Nov 27, 2022
Download files from Firebase Storage with Flutter. List all images, videos, or other files from Firebase and download them.

Flutter Tutorial - Download Files From Firebase Storage Download files from Firebase Storage with Flutter. List all images, videos, or other files fro

Johannes Milke 28 Dec 4, 2022
Upload Files To Firebase Storage with Flutter. Pick images, videos, or other files from your device and upload them to Firebase.

Flutter Tutorial - Upload Files To Firebase Storage Upload Files To Firebase Storage with Flutter. Pick images, videos, or other files from your devic

Johannes Milke 30 Dec 28, 2022
Automatically generate profile picture with random first name and background color. But you can still provide pictures if you have them. As the default color, based on the name of the first letter. :fire: :fire: :fire:

FLUTTER PROFILE PICTURE Automatically generate profile picture with random first name and background color. But you can still provide pictures if you

Aditya Dharmawan Saputra 10 Dec 20, 2022