flutter微信视频号

有人会用flutter模仿完成微信里面的视频号的页面,包括我关注的视频号和分享和朋友点赞的视频号吗?
帮忙做一下😭😭

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7489038
  • 这篇博客你也可以参考下:flutter中的路由(通过使用路由创建登录界面列表并将信息传递到指定路由)
  • 除此之外, 这篇博客: 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进行微信视频页面的模仿。下面是一些具体的步骤和代码片段:

      1. 创建一个新的Flutter项目,并在pubspec.yaml中导入必要的依赖项,例如dio和cached_network_image.

      2. 创建一个新的视频列表页,使用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,
      ),
      
      1. 创建一个视频详情页,显示视频的详细信息和评论。您可以使用类似的方式创建视频详情页布局。
      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),
          // 展示评论列表
        ],
      ),
      
      1. 您可以使用一个侧边栏来展示您关注的视频号,但是请注意要为您的应用程序添加一个许可证,如前面提到的。
      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: () {
                      // 跳转到关注的视频号页面
                    },
                  ),
                  // 其它侧边栏菜单项
                ],
              ),
            ),
          );
        }
      }
      
      1. 如果您想要展示 "分享" 和 "点赞",您可以使用类似下面的方式创建一个底部导航栏。
      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: '分享',
                ),
              ],
            ),
          );
        }
      }
      

      这些代码片段只是为您提供了一些思路和指导,如果您有更具体的问题或者需要更多的帮助和示例代码,可以在评论区或者其它社区提出。