Quoting the documentation:
bool
is_on_floor()const
Returns true if the body collided with the floor on the last call of move_and_slide. Otherwise, returns false. The up_direction and floor_max_angle are used to determine whether a surface is “floor” or not.
Try calling move_and_slide()
then, it should update the is_on_floor()
.