有人会用flutter模仿完成微信里面的视频号的页面,包括我关注的视频号和分享和朋友点赞的视频号吗?
帮忙做一下😭😭
1、自定义编辑框是继承自StatefulWidget,与StatelessWidget的区别在于,参考https://flutterchina.club/widgets-intro/。
Flutter中文官网的原话是:
在编写应用程序时,通常会创建新的widget,这些widget是无状态的StatelessWidget
或者是有状态的StatefulWidget
, 具体的选择取决于您的widget是否需要管理一些状态。widget的主要工作是实现一个build
函数,用以构建自身。一个widget通常由一些较低级别widget组成。Flutter框架将依次构建这些widget,直到构建到最底层的子widget时,这些最低层的widget通常为RenderObject
,它会计算并描述widget的几何形状。
例如:基础的基础 Widget(Text 、Row、Column、Stack、Container等)在build中实现继承自StatelessWidget。
例如:使用 Material 组件,在build中构建布局,build函数的类可以继承自StatelessWidget
例如:处理手势操作,在build中构建手势操作布局,build函数的类可以继承自StatelessWidget
今天我遇到的问题就是与根据用户输入改变widget有关。
2、每次手动触发,一旦调用就会触发函数build,随便完成了情况文本的操作:
setState(() {
进行文本数据改变操作
});
3、自定义编辑框BindCardTextFiled代码块:
inputText 用来清空文本
fieldCallBack 用来回传文本框变化后最终的值
final ITextFieldCallBack fieldCallBack;
final String inputText;
BindCardTextFiled({
................................
this.inputText,
this.fieldCallBack,
................................
}) : assert(maxLines == null || maxLines > 0),
assert(maxLength == null || maxLength > 0),
keyboardType = maxLines == 1 ? keyboardType : ITextInputType.multiline,
super(key: key);
每次触发setState函数后,去清空编辑框的值
@override
Widget build(BuildContext context) {
..................................
if(widget.inputText==null){
_inputText="";
}
..................................
}
编辑的值进行手动清空或者输入后回传去改变变量
大概的意思就是:手动触发输入文本去改变值然后回传到固定的变量值中,自动触发删除编辑框的值时将固定值清空然后完成编辑框值的清空。
- 您还可以看一下 卢召韦老师的Flutter布局实战网易新闻客户端课程中的 侧滑面板点击事件完成,账号设置页面及全局弹窗功能实现小节, 巩固相关知识点
- 以下回答由chatgpt基于相关博客总结生成:
我可以为您提供一些指导和示例代码,来帮助您使用Flutter进行微信视频页面的模仿。下面是一些具体的步骤和代码片段:
创建一个新的Flutter项目,并在pubspec.yaml中导入必要的依赖项,例如dio和cached_network_image.
创建一个新的视频列表页,使用ListView.builder,在列表中展示视频缩略图和标题。
ListView.builder( itemBuilder: (context, index) { return GestureDetector( onTap: () { // 点击视频进入详情页 }, child: Column( children: [ Image.network( 'https://example.com/video_thumbnail_$index.jpg', width: double.infinity, height: 200, fit: BoxFit.cover, ), Text( '视频标题 $index', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), ), ], ), ); }, itemCount: 20, ),
- 创建一个视频详情页,显示视频的详细信息和评论。您可以使用类似的方式创建视频详情页布局。
Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.network( 'https://example.com/video_thumbnail.jpg', width: double.infinity, height: 300, fit: BoxFit.cover, ), Text( '视频标题', style: TextStyle( fontSize: 24, fontWeight: FontWeight.bold, ), ), SizedBox(height: 16), Row( children: [ Icon(Icons.favorite_border), SizedBox(width: 8), Text('122'), SizedBox(width: 16), Icon(Icons.message), SizedBox(width: 8), Text('32'), ], ), SizedBox(height: 16), Text( '视频描述信息', style: TextStyle( fontSize: 16, color: Colors.grey, ), ), SizedBox(height: 16), // 展示评论列表 ], ),
- 您可以使用一个侧边栏来展示您关注的视频号,但是请注意要为您的应用程序添加一个许可证,如前面提到的。
class VideoPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('视频'), ), body: // 视频列表页, drawer: Drawer( child: ListView( children: [ UserAccountsDrawerHeader( accountName: Text('用户名'), accountEmail: Text('邮箱地址'), currentAccountPicture: CircleAvatar( backgroundImage: NetworkImage( 'https://example.com/user_avatar.jpg', ), ), ), ListTile( leading: Icon(Icons.person), title: Text('个人信息'), ), ListTile( leading: Icon(Icons.favorite), title: Text('关注的视频号'), onTap: () { // 跳转到关注的视频号页面 }, ), // 其它侧边栏菜单项 ], ), ), ); } }
- 如果您想要展示 "分享" 和 "点赞",您可以使用类似下面的方式创建一个底部导航栏。
class VideoPage extends StatefulWidget { @override _VideoPageState createState() => _VideoPageState(); } class _VideoPageState extends State<VideoPage> { int _currentIndex = 0; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('视频'), ), body: // 视频列表页, bottomNavigationBar: BottomNavigationBar( currentIndex: _currentIndex, onTap: (index) { setState(() { _currentIndex = index; }); }, items: [ BottomNavigationBarItem( icon: Icon(Icons.favorite_border), label: '点赞', ), BottomNavigationBarItem( icon: Icon(Icons.share), label: '分享', ), ], ), ); } }
这些代码片段只是为您提供了一些思路和指导,如果您有更具体的问题或者需要更多的帮助和示例代码,可以在评论区或者其它社区提出。