Ответы пользователя по тегу Flutter
  • Как кастомизировать gridview flutter?

    @Holyboom
    junior fullstack
    я юзаю этот пакет flutter_staggered_grid_view.
    глянь там , там реализовать такое просто.
    Ответ написан
    Комментировать
  • Flutter как сделать секундомер так чтобы он работал в фоне, когда приложение переключилось на другой экран?

    @Holyboom Автор вопроса
    junior fullstack
    Короче запилил глобальный сервис с таймером и отдельно просто прикрутил AndroidAlarmManager чтобы он следил за открытием закрытием приложения .

    Пока что выглядит так
    Сам сервис

    class TimerService extends ChangeNotifier {
          Stopwatch _watch = Stopwatch();
          var _timer;
     
          Duration get currentDuration => _currentDuration;
          Duration _currentDuration = Duration.zero;
         bool get isRunning => _timer != null;
    
         TimerService() {
            _watch = Stopwatch();
         }
    
        String get getTime => getDisplayTime(_currentDuration.inMilliseconds);
    
         static String getDisplayTime(){
         //перевод человеко читаемый вид(если кому надо пишите скину код) 
         }
    
        void _onTick(Timer timer) {
          _currentDuration = _watch.elapsed;
          print(_currentDuration);
          // notify all listening widgets
          notifyListeners();
        }
    
        void start() {
           if (_timer != null) return;
           _timer = null;
           _timer = Timer.periodic(Duration(seconds: 1), _onTick);
           _watch.start();
           notifyListeners();
        }
    
        void stop() {
          _timer?.cancel();
          _watch.stop();
          _currentDuration = _watch.elapsed;
          notifyListeners();
        }
    
        void reset() {
          stop();
          _watch.reset();
          _currentDuration = Duration.zero;
          notifyListeners();
        }
        }
    
         class TimerServiceProvider extends InheritedWidget {
           const TimerServiceProvider({Key? key, required this.service, required Widget 
           child})
            : super(key: key, child: child);
     
          final TimerService service;
    
          @override
          bool updateShouldNotify(TimerServiceProvider old) => service != old.service;
        }


    и слушатель

    AnimatedBuilder(
                                    animation: globalsVars.timerServ,
                                    builder: (context, child) {
                                      return Column(
                                        mainAxisAlignment: MainAxisAlignment.center,
                                        children: <Widget>[
                                      Container(
                                          padding: EdgeInsets.only(top: 5 , left: 12),
                                          decoration: (selectedButton == key)
                                              ? BoxDecoration(
                                            border: Border.all(
                                              color: Colors.white10,
                                              width: 2,
                                            ),
                                            borderRadius: BorderRadius.circular(5),
                                          )
                                              : null,
                                          child:  Text(
                                            '${globalsVars.timerServ.getTime}',
                                            style: GoogleFonts.roboto(
                                                textStyle: TextStyle(
                                                  color: Colors.red,
                                                  fontWeight: FontWeight.w700,
                                                  fontSize: 16.sp,
                                                )),
                                          ))
                                        ],
                                      );
                                    },
                                  ),


    Пока что более элегантного решения не придумал ... так что если у кого есть мысли буду рад вашему мнению
    Ответ написан
    Комментировать