Home > Back-end >  How to put a function in a text widget
How to put a function in a text widget

Time:07-17

How to put this method

    void fontControl() {
    setState(() {
      TextStyle(fontSize: 10   count.toDouble());

      if (count == 100) {
        const TextStyle(fontSize: 100);
      }
    });
  }

to the text widget

Text(count.toString(), style: fontControl())

CodePudding user response:

wrap it in a GestureDetector widget with a GestureDetector.onTap handler :

onTap: (){
         // your function here
        },

CodePudding user response:

You can use method to provide style. For this you need to return TextStyle, therefore it cannot be void. Also, you can choose textStyle variable.

You can make it dynamic or better nullable return type. And use SetState on button click

import 'package:flutter/material.dart';

class TestS extends StatefulWidget {
  final String? name;
  const TestS({
    Key? key,
    this.name,
  }) : super(key: key);

  @override
  State<TestS> createState() => _TestSState();
}

class _TestSState extends State<TestS> {
  int count = 0;

  TextStyle? fontControl() {
    if (count == 1) {
      return TextStyle(fontSize: 100);
    }
    return TextStyle(fontSize: 10   count.toDouble()); //default
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(onPressed: () {
        count  ;
        setState(() {});
      }),
      body: Text(
        widget.name ?? "default value",
        style: fontControl(),
      ),
    );
  }
}

CodePudding user response:

You can't do it like that. What you can do is having a private mutable property name _textStyle that should change each time the count variable change.

If I take the flutter counter app example, you will have something like that

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  late TextStyle _textStyle = TextStyle(fontSize: 10.0   _counter);

  void _incrementCounter() {
    setState(() {
      _counter  ;
      if (_counter > 100) {
        _textStyle = const TextStyle(fontSize: 100);
      } else {
        _textStyle = TextStyle(fontSize: 10.0   _counter);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '$_counter',
              style: _textStyle,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}
  • Related