Как увеличить размер текста, пока нажата кнопка? - PullRequest
0 голосов
/ 06 февраля 2020

Я концентрируюсь на добавлении специальных возможностей в свое приложение. Первый заключается в увеличении / уменьшении размера текста с помощью жестов увеличения и увеличения, а также кнопок Я сделал это на своем ящике, но он не продолжает увеличиваться или уменьшать размер текста, пока нажаты кнопки. В настоящее время пользователю придется нажимать кнопку несколько раз.

Я пробовал onLongPressed, который, кажется, действует так же, как onTap. Я также попробовал onTapDown, который выдает мне ошибку.

Вот мой код.

class _MapDrawerState extends State<MapDrawer> {
    double _fontSize = 16.0;
    final double _baseFontSize = 16.0;
    double _fontScale = 1.0;
    double _baseFontScale = 1.0;
    double _maxScale = 2.2;
    @override
    Widget build(BuildContext context) {
        return GestureDetector(
            onScaleStart: (ScaleStartDetails scaleStartDetails) {
                _baseFontScale = _fontScale;
            },
            onScaleUpdate: (ScaleUpdateDetails scaleUpdateDetails) {
                setState(() {
                  _fontScale =
                      (_baseFontScale * scaleUpdateDetails.scale).clamp(1.0, _maxScale);
                  _fontSize = _fontScale * _baseFontSize;
                });
              },
              child: SizedBox(
                width: MediaQuery.of(context).size.width * 0.85, //
                child: Drawer(
                  child: ListView(
                    // Important: Remove any padding from the ListView.
                    padding: EdgeInsets.zero,
                    children: <Widget>[
                      DrawerHeader(
                        child: Image.asset('assets/imgs/sliding_bar/whiteLogo.png'),
                        decoration: BoxDecoration(
                          color: Theme.UniColour.primary[900],
                        ),
                        margin: EdgeInsets.only(bottom: 0),
                      ),
                      _buildFontSizeButtons(),
                      Divider(),
                      ListTile(
                        title: Text(
                          AppLocalizations.of(context).drawerResidences,
                          style: TextStyle(fontSize: _fontSize),
                        ), // AppLocalizations.of(context).drawerResidences
                        trailing: Image.asset('assets/imgs/sliding_bar/home2.png'),
                        onTap: () {
                          // TODO: Show Student Residences Markers.
                          //Navigator.pop(context);
                        },
                      ),

                    ],
                  ),
                ),
              ),
            );
          }

          Widget _buildFontSizeButtons() {
            return Row(children: <Widget>[
              _buildReduceFontSizeIcon(),
              _buildIncreaseFontSizeIcon(),
            ]);
          }

          Widget _buildReduceFontSizeIcon() {
            return Expanded(
              child: Opacity(
                opacity: 0.60,
                child: Container(
                  padding: EdgeInsets.all(7.0),
                  decoration: BoxDecoration(
                    color: Theme.UniColour.secondary[200],
                    border:
                        Border.all(color: Theme.UniColour.tertiary[500], width: 1.0),
                    boxShadow: [
                      BoxShadow(
                        color: Colors.black,
                        offset: Offset(0.0, 0.0),
                        blurRadius: 1.0,
                      ),
                    ],
                  ),
                  child: InkWell(
                    onTap: () {
                      print("REDUCE FONT-SIZE ICON PRESSED");
                      setState(() {
                        if (_fontSize > _baseFontSize) {
                          _fontSize--;
                        }
                      });
                    },
                    onLongPress: () {
                      print("REDUCE FONT-SIZE ICON LONG PRESSED");
                      setState(() {
                        if (_fontSize > _baseFontSize) {
                          _fontSize--;
                        }
                      });
                    },
                    child: Icon(
                      Icons.zoom_out,
                      color: Colors.black87,
                      size: 36.0,
                    ),
                  ),
                ),
              ),
            );
          }

          Widget _buildIncreaseFontSizeIcon() {
            return Expanded(
              child: Opacity(
                opacity: 0.60,
                child: Container(
                  padding: EdgeInsets.all(7.0),
                  decoration: BoxDecoration(
                    color: Theme.UniColour.secondary[200],
                    border:
                        Border.all(color: Theme.UniColour.tertiary[500], width: 1.0),
                    boxShadow: [
                      BoxShadow(
                        color: Colors.black,
                        offset: Offset(0.0, 0.0),
                        blurRadius: 1.0,
                      ),
                    ],
                  ),
                  child: InkWell(
                    onTap: () {
                      print("INCREASE FONT-SIZE ICON PRESSED");
                      setState(() {
                        if (_fontSize < _baseFontSize * _maxScale) {
                          _fontSize++;
                        }
                      });
                    },
                    onLongPress: () {
                      print("INCREASE FONT-SIZE ICON LONG PRESSED");
                      setState(() {
                        if (_fontSize < _baseFontSize * _maxScale) {
                          _fontSize++;
                        }
                      });
                    },
                    child: Icon(
                      Icons.zoom_in,
                      color: Colors.black87,
                      size: 36.0,
                    ),
                  ),
                ),
              ),
            );
          }
        } 

Как я могу изменить размер текста, пока нажаты кнопки?

Если кто-нибудь знает, как увеличить / уменьшить размер полей формы, это было бы удивительно.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 06 февраля 2020

Этот пример должен делать то, что вы ожидаете:

class TextIncreaseIssue extends StatefulWidget {
  @override
  _TextIncreaseIssueState createState() => _TextIncreaseIssueState();
}

class _TextIncreaseIssueState extends State<TextIncreaseIssue> {
  double textFontSize = 12;
  Timer _fontTimer;
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          Text('My text',
            style: TextStyle(fontSize: textFontSize),
          ),
          GestureDetector(
            onTapDown: (details) => _tapIncreaseFontSize(),
            onLongPressStart: (details) => _startIncreaseFontSize(),
            onLongPressEnd: (details) => _stopIncreaseFontSize(),
            child: Container(
              alignment: Alignment.center,
              color: Colors.lightBlue,
              height: 60,
              width: 100,
              child: Text('Increase font'),
            ),
          ),
        ]
      ),
    );
  }

  void _tapIncreaseFontSize(){
    setState(() {
      textFontSize++;
    });
  }

  void _startIncreaseFontSize(){
    _fontTimer = Timer.periodic(Duration(milliseconds: 100), (timer) {
      setState(() {
        textFontSize++;
      });
    });
  }

  void _stopIncreaseFontSize(){
    _fontTimer.cancel();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...