Флаттер Виджет, который показывает текст построчно? - PullRequest
0 голосов
/ 03 февраля 2020

Есть ли во Flutter виджет, позволяющий отображать дочерние текстовые виджеты построчно при каждом нажатии виджета? Это должно действовать аналогично тому, как маркированные строки в презентации PowerPoint действуют после каждого клика.

1 Ответ

0 голосов
/ 03 февраля 2020

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

//I would call it TIM like VIM :P
class TextIMproved extends StatefulWidget {
  final String _longString;
  final int _numberOfWordsPerRow;

  TextIMproved(this._numberOfWordsPerRow, this._longString);

  @override
  _TextIMprovedState createState() => _TextIMprovedState(_numberOfWordsPerRow, _longString);
}

class _TextIMprovedState extends State<TextIMproved> {
  final String longString;
  List<String> listString;
  int _numberOfWordsPerRow;
  String strPopulated;
  String strToDisplay='';

  _TextIMprovedState(this._numberOfWordsPerRow, this.longString);

  @override
  void initState() {
    super.initState();
    listString = longString.split(' ');
    splitString();
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      child: Container(
        child: Text(strToDisplay, maxLines: longString.length ~/ _numberOfWordsPerRow + _numberOfWordsPerRow,),
      ),
      onTap: splitString,
    );
  }

  void splitString() {

    //1.prepare empty string
    strPopulated = '';

    //2.populate string
    int len = listString.length <_numberOfWordsPerRow ? listString.length : _numberOfWordsPerRow;
    for (int i = 0; i < len; i++) {
      strPopulated += listString[i] + ' ';
    }

    //3. display portion of string
    setState(() {
      strToDisplay += strPopulated;
    });

    //4.remove displayed text
    List<String> listToremove = strPopulated.split(' ');
    for (String str in listToremove) {
      listString.remove(str);
    }
  }
}

РЕДАКТИРОВАТЬ:

вы можете добавить анимация для этого виджета ...

...