Home > Back-end >  How to print data to ListTile(title: )?
How to print data to ListTile(title: )?

Time:09-21

I'm new to flutter

How do I print the data from getAge() to ListTile(title: )?

Here's the code:

const Divider(),
      const ListTile(
        leading: Icon(Icons.face),
        title: Text(''),
        subtitle: Text('Age'),
      ),
    ];
    return ListView(children: listTiles);
  }
}

void getAge() {
  final DateTime now = DateTime.now();
  final DateTime birthday = DateTime.parse('1985-8-13');

  final age = now.year -
      birthday.year -
      (now.month > birthday.month
          ? 0
          : now.month == birthday.month
              ? now.day >= birthday.day
                  ? 0
                  : 1
              : 1);
  print(age);
}

Here's the image:

enter image description here

CodePudding user response:

You don't "print" to a Widget. you provide it by making it return from the function. Change your function to

String getAge() {
  final DateTime now = DateTime.now();
  final DateTime birthday = DateTime.parse('1985-8-13');

  final age = now.year -
      birthday.year -
      (now.month > birthday.month
          ? 0
          : now.month == birthday.month
              ? now.day >= birthday.day
                  ? 0
                  : 1
              : 1);
  return age.toString();
}

And then use like

  ListTile(
    leading: Icon(Icons.face),
    title: Text(getAge()),
    subtitle: Text('Age'),
  ),

CodePudding user response:

your first issue is your time format, your month should be 08, then return age from getAge():

String getAge() {//<-- add this
      final DateTime now = DateTime.now();

      final DateTime birthday = DateTime.parse('1985-08-13');//<-- change month to 08

      final age = now.year -
          birthday.year -
          (now.month > birthday.month
              ? 0
              : now.month == birthday.month
                  ? now.day >= birthday.day
                      ? 0
                      : 1
                  : 1);

      print(age);
      return age.toString();//<-- add this
    }

then call it like this, don forgot to remove const before ListTile:

ListTile(
    leading: Icon(Icons.face),
    title: Text(getAge()), //<-- add this
    subtitle: Text('Age'),
),

CodePudding user response:

int intAge = 0; //intialize age here

@override
 void initState() {
  super.initState();
  getAge(); //call in the initState function, it will be called first
}

void getAge() {
  final DateTime now = DateTime.now();
  final DateTime birthday = DateTime.parse('1985-8-13');

  final age = now.year -
      birthday.year -
      (now.month > birthday.month
          ? 0
          : now.month == birthday.month
              ? now.day >= birthday.day
                  ? 0
                  : 1
              : 1);
  intAge = age; //here assign value to intAge
}

const Divider(),
      const ListTile(
        leading: Icon(Icons.face),
        title: Text(intAge.toString()),//change to String
        subtitle: Text('Age'),
      ),
    ];
    return ListView(children: listTiles);
  }
}
  • Related