#list #flutter #random
Вопрос:
Есть ли способ автоматически отображать случайную цитату каждые 9 секунд?
Ниже приведена усеченная часть кода, которая имеет значение:
final List<String> RandomQuotes = [ ... ] // (one hundreds quotes here)
var randomQuote = (RandomQuotes.toList()..shuffle()).first;
:
:
:
... Text(randomQuote, Style:...)
Я попробовал предложенный вами код, но var randomQuote не используется. Как видно на изображениях ниже.
Комментарии:
1. Проверьте класс таймера: api.flutter.dev/flutter/dart-async/Timer/Timer.periodic.html
Ответ №1:
Довольно просто просто используйте a Timer.periodic
и определите продолжительность 9 секунд:
import 'dart:async';
import 'dart:math';
final items = <String>['Hi', 'Hello', 'Test'];
Timer.periodic(Duration(seconds: 9), (_) {
final _random = Random();
final item = items[_random.nextInt(items.length)];
print(item);
});
Комментарии:
1. обновил свой код выше с результатами, посмотрите, Гийом
2. Это происходит потому, что ваша переменная
randomQuote
объявлена внутри таймера и недоступна. Вам нужно объявитьrandomQuote
вне таймера (но таймер все равно назначит свое значение), вы также можете захотеть выполнить вызовsetState
, чтобы ваш пользовательский интерфейс был обновлен новым назначенным словом.3. « Таймер.периодический(Длительность(секунд: 9), (_) { Заданное состояние(() {}); }); var randomQuote = (случайные цитаты..перемешать()).первый; « Я изменил код на этот Guillaume, изменение происходит, но каждые 9 секунд, когда цитата обновляется, она обновляется дважды подряд, прежде чем оставаться на одной в течение 9 секунд и обновляться еще дважды, я вижу скачок. Даже когда я использовал ваш код, а не список перетасовки, он все равно остался прежним. Есть идеи, как это остановить?
4. Поскольку ваш таймер объявлен внутри метода сборки, вы должны объявить его внутри
initState
5. верно. разгадал ее! Спасибо! знаете ли вы какой-нибудь способ заставить старую цитату исчезнуть, а новую цитату исчезнуть?
Ответ №2:
Самое простое решение в одной строке:
final List<String> RandomQuotes = [ ... ] // (one hundreds quotes here)
Timer.periodic(Duration(seconds: 9), (_) {
var randomQuote = (RandomQuotes..shuffle()).first;
});
Комментарии:
1. обновил свой код выше с результатами, посмотрите на Gourango
2. Переменная, объявленная внутри метода, не может быть доступна глобально в классе. Пожалуйста, взгляните на программирование дротиков. Я надеюсь, что это решит вашу проблему.