Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
RomReed

Роман Александрович

JavaScript, Flutter, ReactNative, Redux, Firebase
  • 348
    вклад
  • 14
    вопросов
  • 474
    ответа
  • 51%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как использовать одно соединение socket.io?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    import 'package:socket_io_client/socket_io_client.dart' as IO;
    
    class SocketManager {
      static final SocketManager _instance = SocketManager._internal();
      factory SocketManager() => _instance;
    
      IO.Socket? _socket;
    
      SocketManager._internal();
    
      // Метод для создания или получения экземпляра соединения
      IO.Socket get socket {
        if (_socket == null) {
          _socket = IO.io('https://your_socket_server_url');
        }
        return _socket!;
      }
    }


    import 'package:flutter/material.dart';
    import 'package:your_project_name/socket_manager.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: FirstPage(),
        );
      }
    }
    
    class FirstPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // Получение соединения Socket.IO
        final socket = SocketManager().socket;
    
        return Scaffold(
          appBar: AppBar(title: Text('First Page')),
          body: Center(
            child: ElevatedButton(
              onPressed: () {
                // Подключение к Socket.IO серверу
                socket.connect();
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => SecondPage()),
                );
              },
              child: Text('Go to Second Page'),
            ),
          ),
        );
      }
    }
    
    class SecondPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // Получение соединения Socket.IO
        final socket = SocketManager().socket;
    
        return Scaffold(
          appBar: AppBar(title: Text('Second Page')),
          body: Center(
            child: ElevatedButton(
              onPressed: () {
                // Отключение от Socket.IO сервера
                socket.disconnect();
                Navigator.pop(context);
              },
              child: Text('Go back to First Page'),
            ),
          ),
        );
      }
    }


    В приведенном примере был применен паттерн Singleton (Одиночка). Паттерн Singleton обеспечивает, чтобы класс имел только один экземпляр и предоставляет глобальную точку доступа к этому экземпляру. Это позволяет обеспечить, чтобы все клиенты обращались к одному и тому же экземпляру класса и избежать создания дубликатов объектов.

    В классе SocketManager используется приватный конструктор (SocketManager._internal()) и фабричный метод (factory SocketManager() => _instance) для создания единственного экземпляра класса. При первом вызове SocketManager() создается только один экземпляр SocketManager, и все последующие вызовы будут возвращать этот же экземпляр. Таким образом, гарантируется, что у нас есть только один объект для управления соединением IO.Socket, и этот объект доступен глобально через SocketManager().socket.
    Ответ написан 20 июл.
    1 комментарий
    1 комментарий
  • Как сделать анимированную кнопку play/pouse для плеера без фона со скруглёнными углами?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    import 'package:flutter/material.dart';
    
    class PlayPauseButton extends StatefulWidget {
      final bool isPlaying;
      final VoidCallback onPressed;
    
      PlayPauseButton({required this.isPlaying, required this.onPressed});
    
      @override
      _PlayPauseButtonState createState() => _PlayPauseButtonState();
    }
    
    class _PlayPauseButtonState extends State<PlayPauseButton> with SingleTickerProviderStateMixin {
      late AnimationController _animationController;
      late Animation<double> _animation;
    
      @override
      void initState() {
        super.initState();
        _animationController = AnimationController(
          duration: Duration(milliseconds: 300),
          vsync: this,
        );
        _animation = Tween<double>(begin: 0.0, end: 1.0).animate(_animationController);
      }
    
      @override
      void dispose() {
        _animationController.dispose();
        super.dispose();
      }
    
      @override
      void didUpdateWidget(covariant PlayPauseButton oldWidget) {
        super.didUpdateWidget(oldWidget);
        if (widget.isPlaying) {
          _animationController.forward();
        } else {
          _animationController.reverse();
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return GestureDetector(
          onTap: widget.onPressed,
          child: Container(
            width: 50,
            height: 50,
            decoration: BoxDecoration(
              shape: BoxShape.circle,
              color: Colors.transparent,
            ),
            child: Stack(
              children: [
                Center(
                  child: Container(
                    width: 40,
                    height: 40,
                    decoration: BoxDecoration(
                      shape: BoxShape.circle,
                      color: Colors.black,
                    ),
                  ),
                ),
                Center(
                  child: ScaleTransition(
                    scale: _animation,
                    child: Icon(
                      widget.isPlaying ? Icons.pause : Icons.play_arrow,
                      size: 30,
                      color: Colors.white,
                    ),
                  ),
                ),
              ],
            ),
          ),
        );
      }
    }
    Ответ написан 06 июл.
    Комментировать
    Комментировать
  • Как вызвать метод из generic в dart?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    так?
    abstract class Model {
      List<String> getFields();
    }
    
    class Data extends Model {
      late final int field1;
      late final int field2;
      
      Data({required this.field1, required this.field2});
    
      @override
      List<String> getFields() {
        return ["field1", "field2"];
      }
    }
    
    class Table<T extends Model> {
      final List<T> dataList;
      late List<String> fieldList;
      
      Table({required this.dataList, required T instance}) {
        if (dataList.isEmpty) {
          fieldList = instance.getFields();
        } else {
          fieldList = dataList.first.getFields();
        }
      }
    }
    Ответ написан 30 июн.
    3 комментария
    3 комментария
  • Как из асинхронной функции вернуть не Future объект?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    class MyApp extends StatefulWidget {
      @override
      State<MyApp> createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      bool? isLoggedIn;
    
      Future<void> checkLoggedIn() async {
        final SharedPreferences prefs = await SharedPreferences.getInstance();
        bool? isLoggedIn = prefs.getBool('isLogin');
    
        this.setState(() {
          isLoggedIn = isLoggedIn;
        });
      }
    
      @override
      void initState() {
        super.initState();
        Future.microtask(() async => await checkLoggedIn());
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'MY APP',
          debugShowCheckedModeBanner: false,
          scrollBehavior: MyCustomScrollBehavior(),
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: SingleChildScrollView(child:
                isLoggedIn != null?
                        isLoggedIn! 
                            ? Main()
                            : Login()
                        : OpenScreen()
            ),
          ),
        );
      }
    }
    Ответ написан 26 июн.
    Комментировать
    Комментировать
  • Можно ли заменить javascript языком dart/flutter?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Могу только выразить своё мнение. Работал с реакт js react native а потом пересел на флаттер и жить мне стало чуточку легче. Дарт мне показался на много приятнее чем js. Как глоток свежего воздуха. А типизация вопще сказка) если ищите замену js то попробуйте флаттер
    Ответ написан 19 июн.
    5 комментариев
    5 комментариев
  • SIP в React Native + Expo?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Добрый день. Был у меня проект в котором была SIP телефония и надо было ее реализовать в react-native. Как щас помню того франкенштена под андройд получилось запустить одно библу а под ios какой то форк от другой. Работало это ужасно стремно. Там очень много подводных камней, особено с отображением звонка на ios. Еще тогда сделал для себя вывод что sip если писать то только нативно под котлином и свифтом.
    Ответ написан 05 нояб. 2022
    3 комментария
    3 комментария
  • React native expo vs quasar framework для мобильной разработки?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Flutter
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • Как верно обработать данные?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    void main(){
      List<Map<String,dynamic>> list = [{"Id":11,"Name":"Balance"},{"Id":9,"Name":"Elsom"},{"Id":10,"Name":"Megapay"},{"Id":8,"Name":"O!Деньги"}];
    
      var choosName = 'Elsom';
      
      var item = list.firstWhere((item)=>item['Name']==choosName);
      
      print('id ${item['Id']}');
    }
    Ответ написан более года назад
    4 комментария
    4 комментария
  • Как выглядят промисы у дарта?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Вот документация
    https://dart.dev/guides/libraries/futures-error-ha...
    и вот это посмотрите
    https://dart.dev/codelabs/async-await
    Промисы используются для работы с асинхронными функциями.
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Почему функция не видет переменную контроллера текста?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Так должно заработать. Почитайте про область видимости.
    import 'package:flutter/material.dart';
    import 'package:flutter_/style.dart';
    
    class Registration extends StatefulWidget {
      @override
      State<Registration> createState() => _Registration();
    }
    
    class _Registration extends State<Registration> {
    
       final _nameController = TextEditingController();
        final _passwordController = TextEditingController();
    
      Widget button(text, linc) {
        return ElevatedButton(
          style: ElevatedButton.styleFrom(
              primary: s.buttonColor, minimumSize: Size(2500, 70)),
          onPressed: () {
            Navigator.pushNamed(context, linc);
            submitForm();
          },
          child: Text("${text}", style: TextStyle(color: Colors.white)),
        );
      }
    
      @override
      Widget build(BuildContext context) {
     
        return Scaffold(
            backgroundColor: s.backgroundColor,
            appBar: AppBar(
              centerTitle: true,
              backgroundColor: s.appBarColor,
              title: Text("Регистрация", style: TextStyle(color: Colors.white)),
            ),
            body: Center(
              child: Container(
                  padding: EdgeInsets.symmetric(horizontal: 100, vertical: 100),
                  child: Column(
                    children: [
                      Icon(
                        Icons.watch_later,
                        color: s.buttonColor,
                        size: 150,
                      ),
                      SizedBox(
                        height: 50,
                      ),
                      TextFormField(
                        controller: _nameController,
                        decoration: InputDecoration(labelText: "Имя пользователя"),
                      ),
                      TextFormField(
                        controller: _passwordController,
                        decoration: InputDecoration(labelText: "Пароль"),
                      ),
                      SizedBox(
                        height: 50,
                      ),
                      button("Зарегистрироваться", "/home_page_schedule")
                    ],
                  )),
            ));
      }
    
      void submitForm() {
        print("Name ${_nameController.text}");
      }
    }
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • Air m1 16/512 или Pro 14" M1Pro 16/512 для разработки?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Андройд штука очень прожерливая. По этому лучше брать по максимому мощности.
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Можно ли инициализировать контроллер через Get.put в main?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    main() {
    Get.put(JobListController());
    Get.put(NavigationBarController());
    }
    Ответ написан более года назад
    Комментировать
    Комментировать
  • При получение данных с сессии и вывода текста type 'Future' is not a subtype of type 'String' in type cast?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    String? token = FlutterSession().get("token");
    Text(token??'empty token', style: const TextStyle(
    color: Colors.blue,
    fontSize: 30,
    fontWeight: FontWeight.bold,
    ),),
    вот так попробуйте
    Ответ написан более года назад
    2 комментария
    2 комментария
  • Платежная система на react-native?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Гугл и эпл пэй. Более универсальных нет. Есть ещё stripe но она только по заморским странам.
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Что использовать Kotlin Multiplatform или Flutter?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    В не зависимости от того что вы выберете вам нужен будет мак. Советую flutter только потому что он дольше на рынке мультиплатформенных приложений.
    Ответ написан более года назад
    3 комментария
    3 комментария
  • Как решить проблему в React Navigation при связи с Expo SDK?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Я бы сделал eject и попробовал установить навигацию не из экспо а взять другой пакет
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Что не так react native fetch?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Ну первое что надо сделать это попробовать засунуть токен не в url а в header. Второе попробовать отключить cors или через Google chrome extension или через сам Google chrome( погуглить как это делать там ничего сложного). Ну и конечно если есть доступ к апи разработчику то стоит его спросить.
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как в React-Native получить разрешение на использование файловой системы в ios?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    я думаю что он сохраняет либо в MediaLibrary или в PhotoLibrary.

    IMPORTANT: when using ExternalStorageDirectoryPath it's necessary to request permissions (on Android) to read and write on the external storage, here an example: React Native Offical Doc из доки react-native-fs
    Ответ написан более двух лет назад
    3 комментария
    3 комментария
  • Как настроить систему для кроссплатформенной сборки?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Вы правы на счет хакинтоша. Еще вариант это виртуальная машина с маком. Если только сделать билд и залить его в эпл стор то это лучший вариант. Приложение заливается из под xcode поэтому мак ос маст хэв.
    Ответ написан более двух лет назад
    2 комментария
    2 комментария
  • Как можно реализовать локальные уведомления в React Native?

    RomReed
    Роман Александрович @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    помню как использовал вот эту https://github.com/zo0r/react-native-push-notification
    и как вариант https://wix.github.io/react-native-notifications/d...
    на эмуляторе пуш нотификация не работает. Проверьте есть ли у приложения разрешение на посылку нотификации.
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • Следующие →
Самые активные сегодня
  • Rsa97
    Rsa97
    • 6 ответов
    • 0 вопросов
  • Антон Банников
    • 5 ответов
    • 0 вопросов
  • pindschik
    pindschik
    • 4 ответа
    • 0 вопросов
  • AshBlade
    Сергей Соловьев
    • 4 ответа
    • 0 вопросов
  • Mike_Ro
    Михаил Р.
    • 4 ответа
    • 0 вопросов
  • mayton2019
    • 4 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации