如何使用网页浏览颤振跳转到另一个页面



您好,如果我按下第一个页面选项卡上的按钮,我尝试跳转到我的第二个页面选项卡。 目前我只知道我的第二个页面小部件的调用路由,但底部导航栏不存在......我不知道如何从我的第一个页面选项卡调用我的父小部件以跳转到第二个页面选项卡。

  class Parent  {
  int bottomSelectedIndex = 0;
  List<BottomNavigationBarItem> buildBottomNavBarItems() {
    return [
      BottomNavigationBarItem(
          icon: new Icon(Icons.home),
          title: new Text('First')
      ),
      BottomNavigationBarItem(
        icon: new Icon(Icons.search),
        title: new Text('Second'),
      ),
    ];
  }
  PageController pageController = PageController(
    initialPage: 0,
    keepPage: true,
  );
  Widget buildPageView() {
    return PageView(
      controller: pageController,
      onPageChanged: (index) {
        pageChanged(index);
      },
      children: <Widget>[
        First(),
        Second(),
      ],
    );
  }
  @override
  void initState() {
    super.initState();
  }
  void pageChanged(int index) {
    setState(() {
      bottomSelectedIndex = index;
    });
  }
  void bottomTapped(int index) {
    setState(() {
      bottomSelectedIndex = index;
      pageController.animateToPage(index, duration: Duration(milliseconds: 500), curve: Curves.ease);
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: buildPageView(),
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: bottomSelectedIndex,
        onTap: (index) {
          bottomTapped(index);
        },
        items: buildBottomNavBarItems(),
      ),
    );
  }
  }

  class first {
        return Container(
    // here a pressbutton for jump to the second widget
        );
    }
----------------------------------------------------------

    class second
        return Container(
        );
    }

你可以使用这个:

void onAddButtonTapped(int index) {
  // use this to animate to the page
  pageController.animateToPage(index);
  // or this to jump to it without animating
  pageController.jumpToPage(index);
}

将函数作为参数传递:

class first {
  final void Function(int) onAddButtonTapped;
        return Container(
// call it here onAddButtonTapped(2);
        );
    }
class Second {
  final void Function(int) onAddButtonTapped;
        return Container(
        );
    }
children: <Widget>[
        First(onAddButtonTapped),
        Second(onAddButtonTapped),
      ],

您可以将回调传递给第一个小部件,并在按下按钮时调用该小部件,以便您可以在父小部件中更改页面。像这样:

import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Test',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Parent(),
    );
  }
}
class Parent extends StatefulWidget {
  @override
  _ParentState createState() => _ParentState();
}
class _ParentState extends State<Parent> {
  int bottomSelectedIndex = 0;
  List<BottomNavigationBarItem> buildBottomNavBarItems() {
    return [
      BottomNavigationBarItem(
          icon: new Icon(Icons.home), title: new Text('First')),
      BottomNavigationBarItem(
        icon: new Icon(Icons.search),
        title: new Text('Second'),
      ),
    ];
  }
  PageController pageController = PageController(
    initialPage: 0,
    keepPage: true,
  );
  Widget buildPageView() {
    return PageView(
      controller: pageController,
      onPageChanged: (index) {
        pageChanged(index);
      },
      children: <Widget>[
        FirstWidget(
          onButtonPressed: () => pageController.animateToPage(
                1,
                duration: Duration(milliseconds: 300),
                curve: Curves.linear,
              ),
        ),
        SecondWidget(),
      ],
    );
  }
  @override
  void initState() {
    super.initState();
  }
  void pageChanged(int index) {
    setState(() {
      bottomSelectedIndex = index;
    });
  }
  void bottomTapped(int index) {
    setState(() {
      bottomSelectedIndex = index;
      pageController.animateToPage(index,
          duration: Duration(milliseconds: 500), curve: Curves.ease);
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Test'),
      ),
      body: buildPageView(),
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: bottomSelectedIndex,
        onTap: (index) {
          bottomTapped(index);
        },
        items: buildBottomNavBarItems(),
      ),
    );
  }
}
class FirstWidget extends StatefulWidget {
  final VoidCallback onButtonPressed;
  FirstWidget({@required this.onButtonPressed});
  @override
  _FirstWidgetState createState() => _FirstWidgetState();
}
class _FirstWidgetState extends State<FirstWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.red,
      child: Center(
        child: FlatButton(
          onPressed: widget.onButtonPressed,
          child: Text('Go to second page'),
        ),
      ),
    );
  }
}

class SecondWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(color: Colors.green);
  }
}

相关内容

  • 没有找到相关文章

最新更新