This is a pretty standard assembly syntax and not particular to AArch64.
The general pattern looks like:
(In some assemblers parentheses are used instead of square brackets)
The operation performed is approximately equivalent to the C expression:
In other words, the displacement is added to the value of the register and the resulting value is dereferenced as if it was a pointer. For load instruction (LDR), the memory is read from and the result is stored in the destination register; for the store (STR), the source register’s value is written to the memory at the calculated address.
In case of the SP reference, IDA converted the raw displacement value to a stack variable reference. This is done so it’s easier to track accesses to the same area of the stack frame across the whole function.
While the SP value may change at runtime, the stack variables will be stored at the same offset from it on each run of the program.