Как создать пользовательский круговой индикатор выполнения в Flutter?

#flutter

Вопрос:

Я хочу сделать пользовательский круговой индикатор выполнения. В котором я могу установить максимальное значение, например 1200. Ход выполнения круга меняется в зависимости от моего входного значения. Если я введу 100 в качестве значения, оно будет отображаться как прогресс. Если я снова введу 200, он суммирует это значение с предыдущим, например: 200 100= 300, и показывает прогресс.

Он будет делать то же самое до тех пор, пока не достигнет максимального значения. Если он пересекает максимальное значение, то вычисляется дополнительное значение, которое я ввел.

Например, если я введу 1500, он покажет дополнительное значение 300.

Я проверил много статей о круговом индикаторе выполнения.

Но я не могу понять, как это сделать в Флаттере.

Комментарии:

1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Вы можете использовать CircularProgressIndicator.adaptive, это дает вам возможность указывать «значение»прогресса.

вы можете указать любое значение прогресса от 0 до 1 (1-полный круг), поэтому можете указать свои значения в виде дроби (значение прогресса/общее значение) в параметре value.

Например, в вашем случае 100/1200

а для дополнительного значения вы можете добавить простую проверку, которая определит, превышает ли значение прогресса ваше общее значение, а затем покажет их разницу

Вот код, который увеличивает значение прогресса на 100, нажав на кнопку, а также показывает дополнительное значение (если таковое имеется).

 class ExampleScreen extends StatefulWidget {   const ExampleScreen({Key? key}) : super(key: key);   @override  Statelt;ExampleScreengt; createState() =gt; _ExampleScreenState(); }  class _ExampleScreenState extends Statelt;ExampleScreengt; {  int totalValue = 1200;  int loadingValue = 0;   void onAddButtonPressed() {  setState(() {  loadingValue  = 100;  });  }   @override  Widget build(BuildContext context) {  return Scaffold(  floatingActionButton: FloatingActionButton(  onPressed: onAddButtonPressed,  tooltip: 'Add 100',  child: const Icon(Icons.add),  ),  body: Center(  child: Column(  mainAxisSize: MainAxisSize.min,  children: [  CircularProgressIndicator.adaptive(  value: loadingValue / totalValue,  ),  if (loadingValue gt; totalValue) ...[  const SizedBox(  height: 10,  ),  Text(  'your extra values are ${loadingValue - totalValue}',  ),  ]  ],  ),  ),  );  } }  

Комментарии:

1. Код прекрасно работает. Большое спасибо!