【问题标题】:PageView throws '_positions.isNotEmpty': ScrollController not attached to any scroll viewsPageView 抛出“_positions.isNotEmpty”:ScrollController 未附加到任何滚动视图
【发布时间】:2019-10-30 13:27:14
【问题描述】:

我正在尝试通过 Flutter 中的页面控制器更改活动页面索引,使用 Bloc 模式及其抛出“'_positions.isNotEmpty': ScrollController not attach to any scroll views.”。

这是我的代码:

欢迎向导屏幕:

import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:fluttertest/blocs/wizard/bloc/bloc.dart';
import 'package:fluttertest/screens/wizardsteps/joincongregation.dart';
import 'package:fluttertest/screens/wizardsteps/welcometomapman.dart';

class WelcomeWizardScreen extends StatefulWidget {
  @override
  _WelcomeWizardScreenState createState() => _WelcomeWizardScreenState();
}

class _WelcomeWizardScreenState extends State<WelcomeWizardScreen> {
  final WizardBloc wizardBloc = WizardBloc();

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return BlocProvider(
      builder: (BuildContext context) => WizardBloc(),
      child: PageView(
        children: <Widget>[WelcomeToMapMan(), JoinCongregation()],
        controller: wizardBloc.pageController,

      ),
    );
  }
}

向导块:

import 'package:bloc/bloc.dart';
import 'package:flutter/widgets.dart';
import 'wizard_state.dart';

import 'wizard_event.dart';

class WizardBloc extends Bloc<WizardEvent, WizardState> {
  int activeStep = 0;
  final PageController pageController = PageController(initialPage: 0, keepPage: false, viewportFraction: 0.4);
  @override
  WizardState get initialState => WelcomeToMapManState();


  @override
  Stream<WizardState> mapEventToState(
    WizardEvent event,
  ) async* {

    if (event is ChangePage)
    {

   pageController.jumpToPage(event.pageIndex);


    }
    // TODO: Add Logic
  }


  Stream<WizardState> _mapJoinCongregationToState() async* {


  }
}

PageView 中的一个屏幕:

class JoinCongregation extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final WizardBloc _wizardBloc = BlocProvider.of<WizardBloc>(context);
    // TODO: implement build
    return Column(
      children: <Widget>[
        Center(
          child: Text("this is step 2"),
        ),
        RaisedButton(
          child: Text("back to step 1"),
          onPressed: () => {_wizardBloc.dispatch(ChangePage(0))},
        )
      ],
    );
  }
}

当调用 PageViewController 更改页面时,它似乎没有“附加”到 PageView,但它正确初始化(在正确的页面索引上)。

我该如何解决这个问题?我对 Flutter 还很陌生。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您不应该在 bloc 中创建 PageController,因为 bloc 不应与 UI 耦合(理论上您应该能够在 Flutter 和 AngularDart 之间重用您的 bloc)。请参阅https://github.com/felangel/bloc/issues/18 了解如何完成此操作的示例。

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 2021-06-24
      • 2019-02-06
      • 2019-02-17
      • 1970-01-01
      • 2020-07-13
      • 2020-01-27
      • 1970-01-01
      • 2019-02-09
      相关资源
      最近更新 更多