视频地址:html
https://www.bilibili.com/video/av39709290/?p=4数组
博客地址:app
https://jspang.com/post/flutterDemo.html#toc-7d1less
学习若是使用一个动态的widget代替以前写的那几个静态的widgetjsp
新建文件:each_view.dartide
快捷键:stful生成动态的widget函数
定义内部使用的变量:如下划线开头的post
String _title;这个title是从上一个页面传过来的
咱们在构造函数内初始化一下学习
下面咱们依然return Scaffold脚手架ui
bottom_appBar_demo.dart引入咱们的Each_View.dart
作一个数组,和索引。
用数组来变换咱们页面里面的样式
有了变量之后,咱们须要初始化一下,重写咱们的初始化状态方法initState()
点击中间的按钮的时候增长响应事件:
这里用咱们的路由的方式
Navigator.of(context)
of里面是咱们的上下文
而后用push。push里面就是咱们的Material路由了,而后里面是构造器build。这里也是调用咱们动态的页面EachView
点击后就跳转了咱们的EachView传递了的参数New Page
两边的两个按钮点击的时候 咱们不是直接跳转到EachVIew页面。而是在中间页面去动态的切换。咱们只须要变化的它的状态就是它的State就能够了
而后设置咱们脚手架的body为内置的_eachView数组内根据索引显示的widget组件
预览页面,若是出错了 须要从新flutter run一下。看视屏的评论说用大写R也能够。
R是大更新,r是小更新
我用大写的R更新了下 貌似还真能够!!
import 'package:flutter/material.dart'; import 'bottom_appBar_demo.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.lightBlue,//里面定义了不少的主题,这里使用亮蓝色 ), home:BottomAppBarDemo() ); } }
import 'package:flutter/material.dart'; import 'each_view.dart'; class BottomAppBarDemo extends StatefulWidget { final Widget child; BottomAppBarDemo({Key key, this.child}) : super(key: key); _BottomAppBarDemoState createState() => _BottomAppBarDemoState(); } class _BottomAppBarDemoState extends State<BottomAppBarDemo> { List<Widget> _eachView; int _index=0; @override void initState(){ _eachView=List(); _eachView ..add(EachView('Home')) ..add(EachView('WJW')); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( body: _eachView[_index], floatingActionButton: FloatingActionButton( onPressed: (){ Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext context){ return EachView('New Page'); })); }, tooltip: 'WJW', child: Icon( Icons.add, color: Colors.white, ), ), floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, bottomNavigationBar: BottomAppBar( color: Colors.lightBlue, shape: CircularNotchedRectangle(), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceAround, children: <Widget>[ IconButton( icon: Icon(Icons.home), color: Colors.white, onPressed: (){ setState(() { _index=0; }); }, ), IconButton( icon: Icon(Icons.alarm_on), color: Colors.white, onPressed: (){ setState(() { _index=1; }); }, ) ], ), ), ); } }
import 'package:flutter/material.dart'; class EachView extends StatefulWidget { String _title; EachView(this._title); @override _EachViewState createState() => _EachViewState(); } class _EachViewState extends State<EachView> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(widget._title),), body: Center(child: Text(widget._title),), ); } }