Welcome to the Flutter feedback portal. We’re happy you’re here! If you have feedback on how to improve the Flutter, we’d love to hear it!

  • Check out the features or bugs others have reported and vote on your favorites. Feedback will be prioritized based on popularity.
  • If you have feedback that’s not listed yet, submit your own.

Thanks for joining our community and helping improve Syncfusion products!

0
Votes

Edit: The version of syncfusion_flutter_chart is 17.4.40 but not 17.4.41

Series.isVisible is not work for the following case:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';

void main() {
runApp(MaterialApp(
home: TestPage(),
));
}

class TestPage extends StatefulWidget {
@override
_TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
Future future;

@override
void initState() {
super.initState();
future = Future.delayed(Duration(seconds: 1));
}

@override
Widget build(BuildContext context) {
print('build SensorPage');
return Scaffold(
appBar: AppBar(),
body: LayoutBuilder(
builder: (_, __) {
print('build SensorPage.LayoutBuilder');
return FutureBuilder(
future: future,
builder: (_, AsyncSnapshot asyncSnapshot) {
print('build SensorPage.LayoutBuilder.FutureBuilder');
if (asyncSnapshot.connectionState == ConnectionState.done)
return SfCartesianChart(
series: [
[
[0, -3],
[1, 2],
[2, 4],
[3, 8],
[4, 1],
],
[
[0, -1],
[1, 4],
[2, 1],
[3, 3],
[4, 7],
],
].map((List<List<int>> data) {
return LineSeries<List<int>, double>(
dataSource: data,
xValueMapper: (List<int> datum, _) => datum.first.toDouble(),
yValueMapper: (List<int> datum, _) => datum.last.toDouble(),
isVisible: false,
);
}).toList(growable: false),
);
else
return Center(
child: CircularProgressIndicator(),
);
},
);
},
),
);
}
}

There should be only one series visible, but all series are visible.

Screenshot_1579000301.png


I added some code to src/chart/base/chart_base.dart:1183 for debugging



void _findVisibleSeries(BuildContext context) {
print('widget._chartState.initialRender = ${widget._chartState.initialRender}');
print('widget._chartState.widgetNeedUpdate = ${widget._chartState.initialRender}');
print('widget._chartState._legendToggling = ${widget._chartState._legendToggling}');
print('widget._chartState._oldDeviceOrientation = ${widget._chartState._oldDeviceOrientation}');
print('MediaQuery.of(context).orientation = ${MediaQuery.of(context).orientation}');
bool _legendCheck = false;
widget._chartSeries.visibleSeries = <CartesianSeries<dynamic, dynamic>>[];
for (int i = 0; i < widget.series.length; i++) {
widget.series[i]._seriesName = widget.series[i].name ?? 'Series $i';
if (widget._chartState.initialRender ||
(widget._chartState.widgetNeedUpdate &&
!widget._chartState._legendToggling &&
(widget._chartState._oldDeviceOrientation ==
MediaQuery
.of(context)
.orientation))) {
widget.series[i]._visible =
widget._chartState.prevWidgetSeries.isNotEmpty &&
widget._chartState.prevWidgetSeries.length > i &&
widget._chartState.prevWidgetSeries[i].isVisible ==
widget.series[i].isVisible
? widget._chartState.prevWidgetSeries[i]._visible
: widget._chartState.initialRender
? widget.series[i].isVisible
: widget.series[i]._visible ?? widget.series[i].isVisible;
}
else {
if (widget._chartState._oldSeriesVisible.isNotEmpty) {
widget._chartState._oldSeriesVisible[i] = widget.series[i]._visible;
}
_legendCheck = true;
}
print('widget.series[${i}]._visible = ${widget.series[i]._visible}');
if (i == 0 ||
(!widget.series[0].runtimeType.toString().contains('Bar') &&
!widget.series[i].runtimeType.toString().contains('Bar')) ||
(widget.series[0].runtimeType.toString().contains('Bar') &&
(widget.series[i].runtimeType.toString().contains('Bar')))) {
widget._chartSeries.visibleSeries.add(widget.series[i]);
if (_legendCheck)
widget
._chartSeries
.visibleSeries[widget._chartSeries.visibleSeries.length - 1]
._visible =
_checkWithLegendToggleState(
widget._chartSeries.visibleSeries.length - 1,
widget
._chartSeries
.visibleSeries[
widget._chartSeries.visibleSeries.length - 1]
._visible);
}
_legendCheck = false;
print('widget.series[${i}]._visible = ${widget.series[i]._visible}');
}
print('widget._chartSeries.visibleSeries.length = ${widget._chartSeries.visibleSeries.length}');
widget._chartSeries.visibleSeries.forEach((vs) => print(vs.name));
}


Here is the console output

I/flutter ( 2939): build SensorPage

I/flutter ( 2939): build SensorPage.LayoutBuilder

I/flutter ( 2939): build SensorPage.LayoutBuilder.FutureBuilder

I/flutter ( 2939): build SensorPage.LayoutBuilder.FutureBuilder

I/flutter ( 2939): widget._chartState.initialRender = true

I/flutter ( 2939): widget._chartState.widgetNeedUpdate = true

I/flutter ( 2939): widget._chartState._legendToggling = false

I/flutter ( 2939): widget._chartState._oldDeviceOrientation = null

I/flutter ( 2939): MediaQuery.of(context).orientation = Orientation.portrait

I/flutter ( 2939): widget.series[0]._visible = false

I/flutter ( 2939): widget.series[0]._visible = false

I/flutter ( 2939): widget.series[1]._visible = true

I/flutter ( 2939): widget.series[1]._visible = true

I/flutter ( 2939): widget._chartSeries.visibleSeries.length = 2

I/flutter ( 2939): null

I/flutter ( 2939): null

I/flutter ( 2939): build SensorPage.LayoutBuilder

I/flutter ( 2939): build SensorPage.LayoutBuilder.FutureBuilder

I/flutter ( 2939): widget._chartState.initialRender = false

I/flutter ( 2939): widget._chartState.widgetNeedUpdate = false

I/flutter ( 2939): widget._chartState._legendToggling = false

I/flutter ( 2939): widget._chartState._oldDeviceOrientation = null

I/flutter ( 2939): MediaQuery.of(context).orientation = Orientation.portrait

I/flutter ( 2939): widget.series[0]._visible = null

I/flutter ( 2939): widget.series[0]._visible = true

I/flutter ( 2939): widget.series[1]._visible = null

I/flutter ( 2939): widget.series[1]._visible = true

I/flutter ( 2939): widget._chartSeries.visibleSeries.length = 2

I/flutter ( 2939): null

I/flutter ( 2939): null