@@ -4,9 +4,12 @@ import android.content.Intent
44import soy.iko.opencode.ui.components.showToast
55import androidx.compose.foundation.horizontalScroll
66import androidx.compose.foundation.layout.Box
7+import androidx.compose.foundation.layout.Column
78import androidx.compose.foundation.layout.Row
9+import androidx.compose.foundation.layout.Spacer
810import androidx.compose.foundation.layout.fillMaxSize
911import androidx.compose.foundation.layout.padding
12+import androidx.compose.foundation.layout.size
1013import androidx.compose.foundation.layout.width
1114import androidx.compose.foundation.lazy.LazyColumn
1215import androidx.compose.foundation.lazy.itemsIndexed
@@ -23,6 +26,7 @@ import androidx.compose.material3.IconButton
2326import androidx.compose.material3.MaterialTheme
2427import androidx.compose.material3.Scaffold
2528import androidx.compose.material3.Text
29+import androidx.compose.material3.TextButton
2630import androidx.compose.material3.TopAppBar
2731import androidx.compose.runtime.Composable
2832import androidx.compose.runtime.getValue
@@ -99,11 +103,19 @@ fun FileViewScreen(
99103 Modifier.align(Alignment.Center).semantics { contentDescription = loadingLabel },
100104 )
101105 }
102− state.error != null -> Text(
103− state.error ?: "",
106+ state.error != null -> Column(
104107 modifier = Modifier.align(Alignment.Center).padding(24.dp),
105− color = MaterialTheme.colorScheme.error,
106− )
108+ horizontalAlignment = Alignment.CenterHorizontally,
109+ ) {
110+ Text(
111+ state.error ?: "",
112+ color = MaterialTheme.colorScheme.error,
113+ )
114+ Spacer(Modifier.size(12.dp))
115+ TextButton(onClick = { vm.reload() }) {
116+ Text(stringResource(R.string.retry))
117+ }
118+ }
107119 state.content?.isBinary == true -> Text(
108120 stringResource(R.string.binary_file),
109121 modifier = Modifier.align(Alignment.Center).padding(24.dp),