手机游戏www.15153.com_太阳城www.7111j.com
消费主体的转变带来了消费观念与习惯的改变,线上线下融合的消费方式成为主流,消费者对于新技术、新服务更有尝试的意愿,对于个性、环保、品质需求不断增加,对家装行业提出更高的要求。
这个道理明白以后,对于执行层面的很多决定肯定会有指导作用。
民进党当局企图靠污蔑抹黑撼动国际社会坚持一个中国的大势,是绝不可能得逞的。
美国时间7月19日,美国《财富》杂志公布最新一期世界五百强榜单,兖矿集团以营收294.74亿美元荣登榜单第399位。
你可以把它想成是为整个社区打开电源,让他们吃晚饭、看《权力的游戏》(Game of Thrones),然后关掉电源,然后为另一个想玩电子游戏的社区打开电源。
可以肯定的是,在今后飞书的商业化过程中,会把字节跳动的组织管理方式当作一项核心卖点,这显然比单纯卖软件更加吸引客户。
贝因美把约3000个工厂工人、约1500家代理商、约15000个门店导购与约8万家分销门店都集成在一个统一的通讯录中。
作为合伙人,你会感到压力,怕自己做的不好影响大家。
拼多多:发债啦 @新浪科技【拼多多拟发行8.75亿美元可转债,将继续重投农产品】北京时间9月24凌晨,拼多多宣布拟发行8.75亿美元可转换优先债券。
需要说明的是,我-查看或编辑个人主页并非唯一的社交功能开通渠道。
此外,利程坊每年还会举办Hello Future Summit的主题峰会,邀请百余位创新领域的代表,包括大企业的高管、专家学者、创新企业的领导人、KOL等,对于不同的主题进行高密度的分享和交流。
var default_decoration = BoxDecoration( border: Border.all(width: 3, color: Colors.deepOrange), borderRadius: BorderRadius.all( Radius.circular(5), )); ... ... child: Container( margin: EdgeInsets.all(8), decoration: default_decoration, child: widget.child, )); 最后给大家一个完整的最新的技术方案的例子代码: 先绘制欢迎页,效果图如下: 代码如下: // 启动欢迎页 import dart:async; import package:flutter/material.dart; import package:flutter/services.dart; import ui/tv_page.dart; void main => runApp(MyApp); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { SystemChrome.setEnabledSystemUIOverlays([]); // 强制横屏 SystemChrome.setPreferredOrientations([ DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight ]); return MaterialApp( title: Flutter TV, debugShowCheckedModeBanner: false, theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage, ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState => _MyHomePageState; } class _MyHomePageState extends State<MyHomePage> { Timer timer; @override void initState { startTimeout; super.initState; } @override Widget build(BuildContext context) { return Scaffold( primary: true, backgroundColor: Colors.black54, body: Center( child: Text( 芒果TV, style: TextStyle( fontSize: 50, color: Colors.deepOrange, fontWeight: FontWeight.normal), ), ), ); } _toPage { Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (context) => TVPage), (route) => route == null, ); } //倒计时处理 static const timeout = const Duration(seconds: 3); startTimeout { timer = Timer(timeout, handleTimeout); return timer; } void handleTimeout { _toPage; } @override void dispose { if (timer != null) { timer.cancel; timer = null; } super.dispose; } } 应用首页,效果图如下: 代码如下: // 应用首页 import dart:async; import package:flutter/material.dart; import package:flutter/services.dart; import package:flutter_tv/utils/time_utils.dart; import package:flutter_tv/widgets/tv_widget.dart; import home_page.dart; import list_page.dart; class TVPage extends StatefulWidget { @override State<StatefulWidget> createState { SystemChrome.setEnabledSystemUIOverlays([]); // 强制横屏 SystemChrome.setPreferredOrientations( [DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]); return TVPageState; } } class TVPageState extends State<TVPage> with SingleTickerProviderStateMixin { TabController _tabController; Timer timer; var timeString = TimeUtils.getTime; bool init = false; FocusNode focusNodeB0 = FocusNode; FocusNode focusNodeB1 = FocusNode; @override void initState { super.initState; //initialIndex为初始选中第几个,length为数量 _tabController = TabController(initialIndex: 0, length: 8, vsync: this); // 监听 _tabController.addListener( { switch (_tabController.index) { case 0: break; case 1: break; } }); focusNodeB0.addListener( { if (focusNodeB0.hasFocus) { setState( { _tabController.animateTo(0); }); } }); focusNodeB1.addListener( { if (focusNodeB1.hasFocus) { setState( { _tabController.animateTo(1); }); } }); } @override Widget build(BuildContext context) { return Container( color: Colors.black87, padding: EdgeInsets.all(30), child: Scaffold( appBar: AppBar( backgroundColor: Colors.black87, leading: Icon( Icons.live_tv, color: Colors.deepOrange, size: 50, ), title: Text( 芒果TV, style: TextStyle( fontSize: 30, color: Colors.white, fontStyle: FontStyle.italic), ), primary: true, actions: <Widget>[ FlatButton( child: Text( $timeString, style: TextStyle(color: Colors.white), ), ), ], // 设置TabBar bottom: TabBar( controller: _tabController, indicatorColor: Colors.deepOrange, labelColor: Colors.deepOrange, unselectedLabelColor: Colors.white, tabs: <Widget>[ Tab( child: TVWidget( hasDecoration: false, focusChange: (hasFocus) { if (hasFocus) { setState( { _tabController.animateTo(0); }); } }, child: Text( 首页, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), requestFocus: true, ), ), Tab( child: TVWidget( hasDecoration: false, focusChange: (hasFocus) { if (hasFocus) { setState( { _tabController.animateTo(1); }); } }, child: Text( 精选, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), )), Tab( child: TVWidget( hasDecoration: false, focusChange: (hasFocus) { if (hasFocus) { setState( { _tabController.animateTo(2); }); } }, onclick: { print(点击); }, child: Text( 国产, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), )), Tab( child: TVWidget( hasDecoration: false, focusChange: (hasFocus) { if (hasFocus) { setState( { _tabController.animateTo(3); }); } }, child: Text( 欧美, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), )), Tab( child: TVWidget( hasDecoration: false, focusChange: (hasFocus) { if (hasFocus) { setState( { _tabController.animateTo(4); }); } }, child: Text( 日漫, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), ), ), Tab( child: TVWidget( hasDecoration: false, focusChange: (hasFocus) { if (hasFocus) { setState( { _tabController.animateTo(5); }); } }, child: Text( 亲子, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), ), ), Tab( child: TVWidget( hasDecoration: false, focusChange: (hasFocus) { if (hasFocus) { setState( { _tabController.animateTo(6); }); } }, child: Text( 少综, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), ), ), Tab( child: TVWidget( focusChange: (hasFocus) { if (hasFocus) { setState( { _tabController.animateTo(7); }); } }, hasDecoration: false, child: Text( 分类, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), ), ), ], ), ), body: TabBarView( controller: _tabController, children: <Widget>[ HomePage, ListPage, HomePage, ListPage, HomePage, ListPage, HomePage, ListPage, ], ), ), ); } startTimeout { timer = Timer.periodic(Duration(minutes: 1), (t) { setState( { timeString = TimeUtils.getTime; }); }); } @override void dispose { if (timer != null) { timer.cancel; timer == null; } super.dispose; } } // TAB页面中的其中一个页面,其他类似 import package:flutter/material.dart; import package:flutter/widgets.dart; import package:flutter_tv/widgets/tv_widget.dart; class HomePage extends StatefulWidget { const HomePage({ Key key, @required this.index, }) : super(key: key); final int index; @override State<StatefulWidget> createState { return HomePageState; } } class HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin { @override void initState { super.initState; } @override Widget build(BuildContext context) { return Container( color: Colors.black87, child: Row( children: <Widget>[ Flexible( child: Column( children: <Widget>[ _buildItem(0), _buildItem(1), _buildItem(2), ], ), flex: 1, ), Flexible( child: Column( children: <Widget>[ _buildImageItem(3, 2), Expanded( flex: 1, child: Row( children: <Widget>[ _buildImageItem(4, 1), _buildImageItem(5, 1), ], )), ], ), flex: 4, ), Flexible( child: Column( children: <Widget>[ _buildImageItem(6, 2), _buildImageItem(7, 1), ], ), flex: 2, ), Flexible( child: Column( children: <Widget>[ _buildImageItem(8, 2), _buildImageItem(9, 1), ], ), flex: 2, ), ], ), ); } _buildItem(int index) { return Expanded( child: TVWidget( focusChange: (hasfocus) {}, child: Container( width: MediaQuery.of(context).size.width, child: GestureDetector( child: Card( elevation: 5, margin: EdgeInsets.all(0), color: _colors.elementAt(index), child: Container( child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ _icons.elementAt(index), _title.elementAt(index), ], ), ), ), onTap: { _click(index); }, ), )), flex: 1, ); } _buildImageItem(int index, int flex) { return Expanded( child: TVWidget( child: Container( width: MediaQuery.of(context).size.width, child: GestureDetector( child: Card( elevation: 5, margin: EdgeInsets.all(0), color: _colors.elementAt(index), child: Container( child: Stack( alignment: Alignment.bottomLeft, children: <Widget>[ ClipRRect( child: Image.asset( _images.elementAt(index), fit: BoxFit.fill, width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height, ), borderRadius: BorderRadius.all( Radius.circular(5), ), ), Container( width: MediaQuery.of(context).size.width, child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ _title.elementAt(index), index == 3 ? _des.elementAt(index) : SizedBox( height: 0, ), ], ), color: _colors.elementAt(index).withAlpha(240), padding: EdgeInsets.all(5), ), ], ), ), ), onTap: { _click(index); }, ), ), focusChange: (hasfocus) {}, ), flex: flex, ); } void _click(int index) { switch (index) { case 0: break; case 4: // Navigator.push(context, MaterialPageRoute(builder: (context) { // return AboutPage; // })); break; } } List<Icon> _icons = [ Icon( Icons.search, size: 38, color: Colors.white, ), Icon( Icons.history, size: 38, color: Colors.white, ), Icon( Icons.event, size: 38, color: Colors.white, ), Icon( Icons.share, size: 38, color: Colors.deepPurpleAccent, ), Icon( Icons.error_outline, size: 38, color: Colors.orange, ), Icon( Icons.settings, size: 38, color: Colors.red, ) ]; List<String> _images = [ assets/htpy.jpg, assets/htpy.jpg, assets/htpy.jpg, assets/htpy.jpg, assets/agzz.jpg, assets/amypj.jpg, assets/hmjz.jpg, assets/dxflqm.jpg, assets/lifeandpi.jpg, assets/nanasqc.jpg, ]; List<Color> _colors = [ Colors.red, Colors.orange, Colors.green, Colors.red, Colors.orange, Colors.green, Colors.orange, Colors.orange, Colors.orange, Colors.orange, ]; List<Text> _title = [ Text( 搜索, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( 历史, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( 专题, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( 环太平洋, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( 阿甘正传, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( 傲慢与偏见, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( 黑猫警长, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( 当幸福来敲门, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( Life Or PI, style: TextStyle(color: Colors.white, fontSize: 18), ), Text( 哪啊哪啊神去村, style: TextStyle(color: Colors.white, fontSize: 18), ), ]; List<Text> _des = [ Text( 非常好看的电影, style: TextStyle(color: Colors.white, fontSize: 12), ), Text( 设置密码锁, style: TextStyle(color: Colors.white, fontSize: 12), ), Text( 吐槽反馈你的想法, style: TextStyle(color: Color.fromRGBO(162, 162, 162, 1), fontSize: 16), ), Text( 非常好看的电影, style: TextStyle(color: Colors.white, fontSize: 12), ), Text( 版本信息, style: TextStyle(color: Color.fromRGBO(162, 162, 162, 1), fontSize: 16), ), Text( 系统相关设置, style: TextStyle(color: Color.fromRGBO(162, 162, 162, 1), fontSize: 16), ), Text( 系统相关设置, style: TextStyle(color: Color.fromRGBO(162, 162, 162, 1), fontSize: 16), ), ]; @override // TODO: implement wantKeepAlive bool get wantKeepAlive => true; } 封装的核心类: // 封装的核心焦点处理类 import package:flutter/material.dart; import package:flutter/services.dart; import package:flutter/widgets.dart; class TVWidget extends StatefulWidget { TVWidget( {Key key, @required this.child, @required this.focusChange, @required this.onclick, @required this.decoration, @required this.hasDecoration = true, @required this.requestFocus = false}) : super(key: key); Widget child; onFocusChange focusChange; onClick onclick; bool requestFocus; BoxDecoration decoration; bool hasDecoration; @override State<StatefulWidget> createState { return TVWidgetState; } } typedef void onFocusChange(bool hasFocus); typedef void onClick; class TVWidgetState extends State<TVWidget> { FocusNode _focusNode; bool init = false; var default_decoration = BoxDecoration( border: Border.all(width: 3, color: Colors.deepOrange), borderRadius: BorderRadius.all( Radius.circular(5), )); var decoration = null; @override void initState { super.initState; _focusNode = FocusNode; _focusNode.addListener( { if (widget.focusChange != null) { widget.focusChange(_focusNode.hasFocus); } if (_focusNode.hasFocus) { setState( { if (widget.hasDecoration) { decoration = widget.decoration == null ? default_decoration : widget.decoration; } }); } else { setState( { decoration = null; }); } }); } @override Widget build(BuildContext context) { if (widget.requestFocus && !init) { FocusScope.of(context).requestFocus(_focusNode); init = true; } return RawKeyboardListener( focusNode: _focusNode, onKey: (event) { if (event is RawKeyDownEvent && event.data is RawKeyEventDataAndroid) { RawKeyDownEvent rawKeyDownEvent = event; RawKeyEventDataAndroid rawKeyEventDataAndroid = rawKeyDownEvent.data; print(keyCode: ${rawKeyEventDataAndroid.keyCode}); switch (rawKeyEventDataAndroid.keyCode) { case 19: //KEY_UP // DefaultFocusTraversal.of(context).inDirection( // FocusScope.of(context).focusedChild, TraversalDirection.up); FocusScope.of(context) .focusInDirection(TraversalDirection.up); break; case 20: //KEY_DOWN FocusScope.of(context) .focusInDirection(TraversalDirection.down); break; case 21: //KEY_LEFT // FocusScope.of(context).requestFocus(focusNodeB0); FocusScope.of(context) .focusInDirection(TraversalDirection.left); // 手动指定下一个焦点 // FocusScope.of(context).requestFocus(focusNode); break; case 22: //KEY_RIGHT // FocusScope.of(context).requestFocus(focusNodeB1); FocusScope.of(context) .focusInDirection(TraversalDirection.right); // DefaultFocusTraversal.of(context) // .inDirection(_focusNode, TraversalDirection.right); // if(_focusNode.nextFocus){ // FocusScope.of(context) // .focusInDirection(TraversalDirection.right); // } break; case 23: //KEY_CENTER widget.onclick; break; case 66: //KEY_ENTER widget.onclick; break; default: break; } } }, child: Container( margin: EdgeInsets.all(8), decoration: decoration, child: widget.child, )); } } 好了,关于Flutter TV开发就讲解这么多。
只是觉得声音和以前不一样了,我们有一种兴奋感,国家要搞建设了,我们能够使劲好好干活了。
《意见》指出,革命文物凝结着中国共产党的光荣历史,展现了近代以来中国人民英勇奋斗的壮丽篇章,是革命文化的物质载体,是激发爱国热情、振奋民族精神的深厚滋养,是中国共产党团结带领中国人民不忘初心、继续前进的力量源泉。要从巩固党的执政地位、筑牢意识形态阵地的战略高度,从坚定“四个自信”的战略高度,充分认识加强新时代革命文物工作的重大意义。
使用ARM芯片,对笔记本产品的意义何在? 中国早期的PC用户,大多都有自己攒机玩心爱游戏的经历,仙剑奇侠传、帝国时代、红色警戒以及极品飞车……这些诞生了快20年的经典游戏,现在还被怀旧的玩家拿出来重温下,即使是最新的Windows 10,依然可以运行这些化石级的游戏。
乐信方面的财报却更强调金融科技收入给平台创造的价值,根据乐信方面的财报数据显示,整个2018年,乐信金融科技收入超过20亿元人民币,同比增幅达到惊人的448%。
停电范围:沈阳市浑南新区(东陵区)汪家街道、上佰村、沈阳丽格铝业有限公司(双电源此路电源)、沈水合金厂、沈阳泰盈筑路工程材料有限公司
据悉,第一批确认加入的投资联盟会员包括微光创投、愉悦资本、创世伙伴资本、达晨创投、创享投资、靖亚资本、昆仲资本、天善资本、58 产业基金、富海中小企业发展基金、真格基金、璀璨资本、浩方创投、宏太投资、非凡资本、分享投资、德迅投资、格致产业、青松基金、微众银行加速器、南极圈等。