Получить позицию последнего отрисованного в TextPainter символа в исходной строке

Пишу читалку электронных книг на Flutter и задумка такая. Есть метод, который генерирует вкладки. На первой вкладке через TextPainter я рисую текст на весь body Scaffold'а, а дальше хочу получить позицию последнего отрисованного символа чтобы на следующей вкладке начать рисовать уже с него, но не могу понять как это сделать. Гуглеж ничего не дал, прошу помощи.

Я немного поэксперементировал сегодня и понял, что на страницу влазает не только то, что я вижу, но и еще немного вниз. Как будто скаффолда не существует и оно старается занять весь экран. У TextPaint есть метод getPositionForOffset, но вообще не понятно что это, зачем и что оно делает. А вот из TextSpan можно получить текст. Конечно, не понятно полный ли текст видно в консоли vscode, но тем не менее... Стоит попробовать запустить из другого эмулятора терминала.

Вот код (из сторонних библиотек тут используется Dio):

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';

class ReaderPage extends StatefulWidget {
  ReaderPageState createState() => ReaderPageState();
}

class ReaderPageState extends State<ReaderPage> {
  @override
  Widget build(BuildContext context) {
    //getText();

    return Scaffold(
        appBar: AppBar(),
        body: Container(
            padding: EdgeInsets.fromLTRB(10, 2, 10, 50),
            child: FutureBuilder<String>(
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.done) {
                  
                  return Container(child:
                      CustomPaint(
                        size: Size(double.infinity, double.infinity),
                        painter: PageTextPainter(snapshot.data),
                      ));
                }
                return CircularProgressIndicator();
              },
              future: getText(),
            )));
  }

  Future<String> getText() async {
    var response = await Dio().get(
        'https://ranobelib.ru/bozhestvenniy-mech-haosa/glava-78-krovavaya-pobeda/');
    return response.data;
  }
}

class PageTextPainter extends CustomPainter {
  String data;
  PageTextPainter(this.data);

  @override
  void paint(Canvas canvas, Size size) {
    final textStyle = TextStyle(
      color: Colors.black,
      fontSize: 38,
    );
    final textSpan = TextSpan(
      text: data,
      style: textStyle,
    );
    final textPainter = TextPainter(
      text: textSpan,
      textDirection: TextDirection.ltr,
    );

    textPainter.layout(
      minWidth: 0,
      maxWidth: size.width,
    );
    final offset = Offset(0, 0);
    textPainter.paint(canvas, offset);
    print("startText" + textSpan.text + "endText");
  }

  @override
  bool shouldRepaint(CustomPainter old) {
    return false;
  }
}

Ответы (0 шт):