【问题标题】:Set state method not updating the value设置状态方法不更新值
【发布时间】:2022-01-23 20:28:25
【问题描述】:

我无法让_onPageChanged 工作。我在 PageView.builder onPageChanged: _onPageChanged, 上使用它。每当我手动将 _currentPage 更改为例如 1 时,一切都很好。这里有什么问题?

class Onboarding extends StatefulWidget {
  const Onboarding({Key? key}) : super(key: key);

  @override
  State<Onboarding> createState() => _OnboardingState();

}
class _OnboardingState extends State<Onboarding> {
  @override
  Widget build(BuildContext context) {

  int _currentPage = 0;

  final PageController _pageController = PageController(
    initialPage: 0
  );

   @override
   void dispose() {
     super.dispose();
      _pageController.dispose();
    }

    @override
    void initState() {
      super.initState();
      _currentPage++;
    }

    void _onPageChanged(int index) {
      setState(() {
        _currentPage = index;
      });
    }

    return SafeArea(
     ...code

【问题讨论】:

    标签: flutter


    【解决方案1】:

    将此代码从构建方法中取出到状态中。

    int _currentPage = 0;
    
    final PageController _pageController = PageController(
        initialPage: 0
      );
    
       @override
       void dispose() {
         super.dispose();
          _pageController.dispose();
        }
    
        @override
        void initState() {
          super.initState();
          _currentPage++;
        }
    
        void _onPageChanged(int index) {
          setState(() {
            _currentPage = index;
          });
        }
    

    像这样:

        class Onboarding extends StatefulWidget {
          const Onboarding({Key? key}) : super(key: key);
        
          @override
          State<Onboarding> createState() => _OnboardingState();
        
        }
        class _OnboardingState extends State<Onboarding> {
         int _currentPage = 0;
        
         final PageController _pageController = PageController(
            initialPage: 0
         );
        
         @override
         void initState() {
            super.initState();
            _currentPage++;
         }
        
         void _onPageChanged(int index) {
          setState(() {
                _currentPage = index;
          });
         }
        
        @override
        Widget build(BuildContext context) {
        return SafeArea(
             ...code;
        }
      @override
      void dispose() {
         super.dispose();
         _pageController.dispose();
      }
    

    【讨论】:

      猜你喜欢
      • 2021-05-26
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多