文章用来记录特点和运用方法,避免之后忘掉,能够过来查找。

BottomNavigationBar

创建方法

class _TabbarsState extends State<Tabbars> {
  late int currentIndex = 0;
  final List list = [    SSLHome(),    SSLCategory(),    SSLSetting()  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('这是主页'),
      ),
      //设置当时界面
      body: list[currentIndex],
      //设置底部tabBar
      bottomNavigationBar: BottomNavigationBar(
        //设置当时的下标.设置好之后会动态改动
        currentIndex: currentIndex,
        //点击事情
        onTap: (int index){
          //想要动态更新当时界面必须运用setState更新数据
          setState(() {
            currentIndex = index;
          });
        },
        //大小
        iconSize: 36,
        //选中之后的色彩
        fixedColor: Colors.red,
        //设置按钮的称号和图标
        items: const [
          BottomNavigationBarItem(icon: Icon(Icons.home),label: '主页'),
          BottomNavigationBarItem(icon: Icon(Icons.category),label: '分类'),
          BottomNavigationBarItem(icon: Icon(Icons.settings),label: '设置'),
        ],
      ),
    );
  }
}

路由,也便是iOS中的界面跳转。

路由分为两种,1、普通路由,2、命名路由。

普通路由

Navigator.of(context).push(
  MaterialPageRoute(builder: (context)=> SSLSearch(title: '这是查找界面',))
);

只需求吧上述代码中的 SSLSearch(title: ‘这是查找界面’,) 替换成你的组件(页面)即可。很简单。

既然有push 那么一定有pop。

Navigator.of(context).pop();

命名路由

命名路由不传值。能够这样运用。

首先在App入口处,注册路由。

main() {
  runApp(new MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: const Tabbars(),
      title: '这是主页',
      //在这里注册命名路由
      routes: {
        '/search':(context)=>SSLSearch(),
      },
    );
  }
}

如上 吧 SSLSearch()替换成你的页面即可(这种跳转怎样传值暂时不知道)

然后

Navigator.of(context).pushNamed('/search');

调用以上代码就能够跳转到指定界面。

但实际情况界面跳转经常需求传值例如产品列表跳转到产品概况,需求传递productId。

命名路由传值的方法。

继续运用routes特点注册路由。

class MyApp extends StatelessWidget {
  var routes = {
    '/search': (context) => SSLSearch(),
  };
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: const Tabbars(),
      title: '这是主页',
      //在这里注册命名路由
      routes: routes,
    );
  }
}

然后在跳转的当地传值

Navigator.of(context).pushNamed('/search',arguments:"这是一个标题arguments");

接纳值通过 ModalRoute.of(context)!.settings.arguments。

class SSLSearch extends StatefulWidget {
  @override
  State<SSLSearch> createState() => _SSLSearchState();
}
class _SSLSearchState extends State<SSLSearch> {
  String title = "";
  @override
  Widget build(BuildContext context) {
    //接纳值
    title = ModalRoute.of(context)!.settings.arguments as String;
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Text('adas'),
        onPressed: (){
          Navigator.of(context).pop();
        },
      ),
      appBar: AppBar(
        title: Text(title),
      ),
      body: Text('查找界面'),
      backgroundColor: Colors.blue,
    );
  }
}