mirror of
https://github.com/nostrlabs-io/zap-stream-flutter.git
synced 2025-06-18 20:57:14 +00:00
17
lib/app.dart
17
lib/app.dart
@ -76,7 +76,7 @@ void runZapStream() {
|
|||||||
if (state.extra is StreamEvent) {
|
if (state.extra is StreamEvent) {
|
||||||
return StreamPage(stream: state.extra as StreamEvent);
|
return StreamPage(stream: state.extra as StreamEvent);
|
||||||
} else {
|
} else {
|
||||||
throw UnimplementedError();
|
return StreamPage.loader(state.pathParameters["id"]!);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -119,6 +119,21 @@ void runZapStream() {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
GoRoute(
|
||||||
|
path: "/:id",
|
||||||
|
redirect: (context, state) {
|
||||||
|
final id = state.pathParameters["id"]!;
|
||||||
|
if (id.startsWith("naddr1") ||
|
||||||
|
id.startsWith("nevent1") ||
|
||||||
|
id.startsWith("note1")) {
|
||||||
|
return "/e/$id";
|
||||||
|
} else if (id.startsWith("npub1") ||
|
||||||
|
id.startsWith("nprofile1")) {
|
||||||
|
return "/p/$id";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'dart:developer' as developer;
|
import 'dart:developer' as developer;
|
||||||
|
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:ndk/ndk.dart';
|
import 'package:ndk/ndk.dart';
|
||||||
@ -24,6 +25,30 @@ class StreamPage extends StatefulWidget {
|
|||||||
|
|
||||||
const StreamPage({super.key, required this.stream});
|
const StreamPage({super.key, required this.stream});
|
||||||
|
|
||||||
|
static Widget loader(String id) {
|
||||||
|
final entity = decodeBech32ToTLVEntity(id);
|
||||||
|
return RxFilter<Nip01Event>(
|
||||||
|
Key("stream-loader:$id"),
|
||||||
|
filters: [entity.toFilter()],
|
||||||
|
builder: (context, state) {
|
||||||
|
final stream = state?.firstWhereOrNull(
|
||||||
|
(e) => e.getDtag() == entity.specialUtf8,
|
||||||
|
);
|
||||||
|
if (stream != null) {
|
||||||
|
return StreamPage(stream: StreamEvent(stream));
|
||||||
|
} else {
|
||||||
|
return Center(
|
||||||
|
child: SizedBox(
|
||||||
|
width: 40,
|
||||||
|
height: 40,
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<StatefulWidget> createState() => _StreamPage();
|
State<StatefulWidget> createState() => _StreamPage();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user