You can create blank rows for a gallery.
I use this in multiple apps, usually to create a repeating table type effect.
You need to used Clearcollect at first (I use this on a button that navigates me to the screen I want)
This creates a collection for you where you can define the columns.

In this example Date: "" Creates a column called Date which has a blank entry.
The collection then looks like this

Then on my next page I have a gallery with it's datasource as the collection you've created.

Use whatever inputs you need to enter the data required.
To save the data entered to the collection and create a new blank line I have the below code assigned to the OnSelect property of my save icon.
Patch(
colExpense,
ThisItem,
{
ItemNumber: Value(itemnumber.Text),
Date: Text(DatePicker1.SelectedDate,"[$-en-US]dd/mm/yyyy"),
Description: Description.Text,
InternalExternal:InternalExternal.SelectedText.Value,
ExpenseType:ExpenseType.SelectedText.Value,
NetAmount:NetAmount.Text,
TotalAmount:Total.Text,
VAT:VAT.Text,
ExpenseNo:Last('Expenses Header').ID,
appCurrentRow:false
}
);
Collect(
colExpense,
{
ItemNumber:Sum(CountRows(colExpense)+1),
Date: "",
Description: "",
InternalExternal:"",
ExpenseType:"",
NetAmount:"",
TotalAmount:"",
VAT:"",
ExpenseNo:Last('Expenses Header').ID,
appCurrentRow:true
}
)
This patches the current row's data to the blank line and creates a new blank line for you.
You then use a ForAll statement to upload each line of your collection to your SP list - mine is assigned to the OnSuccess property of a form I use alongside this.
ForAll(
colExpense,
If(
!IsBlank(Description),
Patch(
ExpenseLine,
Defaults(ExpenseLine),
{
Title: varUserName,
Description: Description,
'Internal/External': InternalExternal,
Date: Date,
ExpenseType: ExpenseType,
Net: NetAmount,
VAT: VAT,
Total: TotalAmount,
ExpenseNo:Last('Expenses Header').ID
}
)
)
)
*The !IsBlank stops the empty line being uploaded to SP