Вход в кАналы по ссылке, возможность на них подписаться, отписаться пока нельзя sosi

This commit is contained in:
jganenok
2025-11-27 15:12:30 +07:00
parent 1007a053fd
commit 8991cd5bb8
4 changed files with 584 additions and 58 deletions

View File

@@ -1,5 +1,3 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:gwid/api/api_service.dart';
@@ -36,7 +34,6 @@ class _SearchChannelsScreenState extends State<SearchChannelsScreen> {
_apiSubscription = ApiService.instance.messages.listen((message) {
if (!mounted) return;
if (message['type'] == 'channels_found') {
setState(() {
_isLoading = false;
@@ -65,7 +62,6 @@ class _SearchChannelsScreenState extends State<SearchChannelsScreen> {
);
}
if (message['type'] == 'channels_not_found') {
setState(() {
_isLoading = false;
@@ -171,7 +167,6 @@ class _SearchChannelsScreenState extends State<SearchChannelsScreen> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
@@ -209,7 +204,6 @@ class _SearchChannelsScreenState extends State<SearchChannelsScreen> {
const SizedBox(height: 24),
Text(
'Поисковый запрос',
style: Theme.of(
@@ -300,7 +294,6 @@ class _SearchChannelsScreenState extends State<SearchChannelsScreen> {
),
),
if (_foundChannels.isNotEmpty) ...[
const SizedBox(height: 24),
Text(
@@ -315,7 +308,6 @@ class _SearchChannelsScreenState extends State<SearchChannelsScreen> {
),
],
if (_errorMessage != null) ...[
const SizedBox(height: 24),
Container(
@@ -483,7 +475,6 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
_apiSubscription = ApiService.instance.messages.listen((message) {
if (!mounted) return;
if (message['type'] == 'channel_entered') {
setState(() {
_isLoading = false;
@@ -506,7 +497,6 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
);
}
if (message['type'] == 'channel_subscribed') {
setState(() {
_isLoading = false;
@@ -525,7 +515,6 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
);
}
if (message['type'] == 'channel_error') {
setState(() {
_isLoading = false;
@@ -561,16 +550,14 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
});
}
String _extractChannelLink(String inputLink) {
final link = inputLink.trim();
String link = inputLink.trim();
if (link.startsWith('https://max.ru/') || link.startsWith('max.ru/')) {
return link;
// Поддержка формата @https://max.ru/...
if (link.startsWith('@')) {
link = link.substring(1).trim();
}
return link;
}
@@ -675,7 +662,6 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
@@ -772,7 +758,6 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
const SizedBox(height: 24),
Column(
children: [
SizedBox(
@@ -820,7 +805,6 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
],
),
if (_webAppUrl != null) ...[
const SizedBox(height: 24),
Container(
@@ -858,7 +842,6 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
width: double.infinity,
child: ElevatedButton.icon(
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: const Text(
@@ -889,7 +872,6 @@ class _ChannelDetailsScreenState extends State<ChannelDetailsScreen> {
),
],
if (_errorMessage != null) ...[
const SizedBox(height: 24),
Container(