Jake
Jake

Reputation: 2056

Flutter 1.1.1 - Dependencies no longer working

The flutter dependency flutter_svg isn't properly loading SVG images since upgrading to flutter v1.1.1.

I expect for an SVG image to be displayed from this source, but the program pauses itself and the image never loads beyond the placeholderBuilder

This is the code I'm using to produce this issue:

new SvgPicture.network(
  sparkString,
  placeholderBuilder: (BuildContext context) => new Container(
    decoration: new BoxDecoration(
      color: const Color(0xFF3C4E57),
      borderRadius: new BorderRadius.all(
        const Radius.circular(5.0),
      ),
    ),
    padding: const EdgeInsets.all(5.0),
    alignment: Alignment.center,
    child: CupertinoActivityIndicator(radius: 10.0)  
  ),
  fit: BoxFit.fill,
  height: _height*0.14,
  width: _width*0.30,
  color: Colors.white.withAlpha(85),
),

And this is the issue that arises:

Flutter pauses itself on line 72 in svg_parser.dart, in parseSvgElement()

stack issue, lines 58 - 81 in svg_parser.dart

This is the output in the debug console

flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following RangeError was thrown building Builder(dirty):
flutter: RangeError (index): Invalid value: Not in range 0..9, inclusive: 10
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0      List.[] (dart:core/runtime/libgrowable_array.dart:145:60)
flutter: #1      _HomePageState._allWidget.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:gucci/home_page.dart:3362:73)
flutter: #2      Builder.build (package:flutter/src/widgets/basic.dart:5736:41)
flutter: #3      StatelessElement.build (package:flutter/src/widgets/framework.dart:3774:28)
flutter: #4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3721:15)
flutter: #5      Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #6      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
flutter: #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
flutter: #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
flutter: #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: #13     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
flutter: #14     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: #15     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: #16     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #17     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #18     StatefulElement.update (package:flutter/src/widgets/framework.dart:3878:5)
flutter: #19     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #20     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
flutter: #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #22     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
flutter: #23     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #24     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #25     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #26     StatelessElement.update (package:flutter/src/widgets/framework.dart:3781:5)
flutter: #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #28     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #29     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #30     ProxyElement.update (package:flutter/src/widgets/framework.dart:3990:5)
flutter: #31     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #32     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #33     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #34     StatefulElement.update (package:flutter/src/widgets/framework.dart:3878:5)
flutter: #35     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #36     SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1028:36)
flutter: #37     SliverMultiBoxAdaptorElement.performRebuild.processElement (package:flutter/src/widgets/sliver.dart:978:34)
flutter: #38     List.forEach (dart:core/runtime/libgrowable_array.dart:278:8)
flutter: #39     SliverMultiBoxAdaptorElement.performRebuild (package:flutter/src/widgets/sliver.dart:989:36)
flutter: #40     SliverMultiBoxAdaptorElement.update (package:flutter/src/widgets/sliver.dart:955:7)
flutter: #41     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #42     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4585:32)
flutter: #43     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4975:17)
flutter: #44     _ViewportElement.update (package:flutter/src/widgets/viewport.dart:192:11)
flutter: #45     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #46     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #47     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #48     ProxyElement.update (package:flutter/src/widgets/framework.dart:3990:5)
flutter: #49     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #50     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
flutter: #51     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #52     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
flutter: #53     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #54     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
flutter: #55     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #56     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
flutter: #57     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #58     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #59     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #60     StatefulElement.update (package:flutter/src/widgets/framework.dart:3878:5)
flutter: #61     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #62     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
flutter: #63     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #64     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #65     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #66     StatefulElement.update (package:flutter/src/widgets/framework.dart:3878:5)
flutter: #67     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #68     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #69     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #70     StatelessElement.update (package:flutter/src/widgets/framework.dart:3781:5)
flutter: #71     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #72     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #73     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #74     StatefulElement.update (package:flutter/src/widgets/framework.dart:3878:5)
flutter: #75     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #76     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
flutter: #77     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #78     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #79     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #80     StatelessElement.update (package:flutter/src/widgets/framework.dart:3781:5)
flutter: #81     Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
flutter: #82     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: #83     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: #84     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2286:33)
flutter: #85     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:676:20)
flutter: #86     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:219:5)
flutter: #87     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
flutter: #88     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
flutter: #89     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
flutter: #90     _invoke (dart:ui/hooks.dart:159:13)
flutter: #91     _drawFrame (dart:ui/hooks.dart:148:3)
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════

Upvotes: 1

Views: 358

Answers (1)

rmtmckenzie
rmtmckenzie

Reputation: 40493

I played around with the SVG and if you remove the marker it works. I suspect that the flutter_svg library doesn't support marker-end yet. It should either throw a better error or not fail though.

If you can remove that marker & the marker-end from the SVG that should solve your problem. If that's not an option, you could open an issue on the library and maybe they'll be able to add it (or you could do it yourself =D).

If you do submit it, use this as a minimal example:

import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  MyAppState createState() {
    return new MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Container(
            height: 300,
            width: 300,
            color: Colors.blue,
            child: SvgPicture.string(
              '''

<?xml version="1.0" standalone="no"?>
<svg viewBox="-2 -4 100 20" width="100" height="20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
      <marker id="neatchart-markerCircle-1472608912" markerWidth="2" markerHeight="2" refX="1" refY="1" markerUnits="strokeWidth">
        <circle class="neatchart-marker" cx="1" cy="1" r="1" stroke="none" fill="#F00" />
      </marker>
      <linearGradient id="neatchart-fadeFromNothing-1472608912" x1="0%" y1="0%" x2="100%" y2="0%" gradientUnits="userSpaceOnUse">
        <stop offset="0.5%" stop-color="#000" stop-opacity="0"></stop>
        <stop offset="2%" stop-color="#000" stop-opacity="1"></stop>
        <stop offset="100%" stop-color="#000" stop-opacity="1"></stop>
      </linearGradient>
    </defs>
    <g class="neatchart">
      <g class="chart__plotLine"
        fill="none"
        stroke-width="1.3333333333333"
        stroke-linejoin="round"
        stroke-linecap="round"
        stroke="url(#neatchart-fadeFromNothing-1472608912)"
        marker-end="url(#neatchart-markerCircle-1472608912)"
      >
        <path d="M0,0 1.85,2.02 3.69,2.25 5.54,1.53 7.38,4 9.23,4.22 11.08,4.81 12.92,6.77 14.77,6.11 16.62,4.89 18.46,5.11 20.31,5.02 22.15,6.18 24,6.39 25.85,6.53 27.69,7.33 29.54,7.52 31.38,6.87 33.23,6.06 35.08,5.9 36.92,5.7 38.77,6.28 40.62,6.84 42.46,7.17 44.31,7.02 46.15,7.64 48,7.72 49.85,8 51.69,7.96 53.54,7.82 55.38,7.44 57.23,6.76 59.08,6.88 60.92,7.66 62.77,7.98 64.62,7.82 66.46,7.56 68.31,7.5 70.15,7.89 72,7.91 73.85,7.78 75.69,7.76 77.54,7.75 79.38,7.7 81.23,7.81 83.08,7.91 84.92,7.83 86.77,8.23 88.62,9.01 90.46,9.51 92.31,9.64 94.15,9.96 96,10 " />
      </g>
    </g>
  </svg>
  ''',
              fit: BoxFit.contain,
            ),
          ),
        ),
      ),
    );
  }
}

And this is what actually rendered for me:

import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  MyAppState createState() {
    return new MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Container(
            height: 300,
            width: 300,
            color: Colors.blue,
            child: SvgPicture.string(
              '''

<?xml version="1.0" standalone="no"?>
<svg viewBox="-2 -4 100 20" width="100" height="20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
      <linearGradient id="neatchart-fadeFromNothing-1472608912" x1="0%" y1="0%" x2="100%" y2="0%" gradientUnits="userSpaceOnUse">
        <stop offset="0.5%" stop-color="#000" stop-opacity="0"></stop>
        <stop offset="2%" stop-color="#000" stop-opacity="1"></stop>
        <stop offset="100%" stop-color="#000" stop-opacity="1"></stop>
      </linearGradient>
    </defs>
    <g class="neatchart">
      <g class="chart__plotLine"
        fill="none"
        stroke-width="1.3333333333333"
        stroke-linejoin="round"
        stroke-linecap="round"
        stroke="url(#neatchart-fadeFromNothing-1472608912)"
      >
        <path d="M0,0 1.85,2.02 3.69,2.25 5.54,1.53 7.38,4 9.23,4.22 11.08,4.81 12.92,6.77 14.77,6.11 16.62,4.89 18.46,5.11 20.31,5.02 22.15,6.18 24,6.39 25.85,6.53 27.69,7.33 29.54,7.52 31.38,6.87 33.23,6.06 35.08,5.9 36.92,5.7 38.77,6.28 40.62,6.84 42.46,7.17 44.31,7.02 46.15,7.64 48,7.72 49.85,8 51.69,7.96 53.54,7.82 55.38,7.44 57.23,6.76 59.08,6.88 60.92,7.66 62.77,7.98 64.62,7.82 66.46,7.56 68.31,7.5 70.15,7.89 72,7.91 73.85,7.78 75.69,7.76 77.54,7.75 79.38,7.7 81.23,7.81 83.08,7.91 84.92,7.83 86.77,8.23 88.62,9.01 90.46,9.51 92.31,9.64 94.15,9.96 96,10 " />
      </g>
    </g>
  </svg>
  ''',
              fit: BoxFit.contain,
            ),
          ),
        ),
      ),
    );
  }
}

Upvotes: 2

Related Questions