您现在的位置是:主页 > news > 中国建材网站/网络销售的好处和意义

中国建材网站/网络销售的好处和意义

admin2025/4/29 12:32:31news

简介中国建材网站,网络销售的好处和意义,开个公司做购物网站,网站正在建设中html5前言 本文着眼于搭建一个瀑布流布局的简化版Flutter应用,Joe大叔将从应用创建、插件引入、页面布局三个方面,给朋友们展示瀑布流的布局方式。既此,我们接着往下看。文末有GitHub项目地址 一、瀑布流是什么? 瀑布流又称瀑布流式布…

中国建材网站,网络销售的好处和意义,开个公司做购物网站,网站正在建设中html5前言 本文着眼于搭建一个瀑布流布局的简化版Flutter应用,Joe大叔将从应用创建、插件引入、页面布局三个方面,给朋友们展示瀑布流的布局方式。既此,我们接着往下看。文末有GitHub项目地址 一、瀑布流是什么? 瀑布流又称瀑布流式布…

前言

本文着眼于搭建一个瀑布流布局的简化版Flutter应用,Joe大叔将从应用创建、插件引入、页面布局三个方面,给朋友们展示瀑布流的布局方式。既此,我们接着往下看。文末有GitHub项目地址




一、瀑布流是什么?

瀑布流又称瀑布流式布局,是比较流行的一种网站页面布局方式。视觉表现为参差不齐的多栏布局。即多行等宽元素排列,后面的元素依次添加到其后,等宽不等高,根据图片原比例缩放直至宽度达到我们的要求,依次按照规则放入指定位置。

案例如下图:




二、创建瀑布流应用



1.新建应用

1.1创建过程不再赘述,可以参照Flutter中文网按步骤操作

1.2在lib目录下,创建一个名为pages的目录,在pages里继续新建两个dart文件,分别命名为home_page.dart(首页)、mine_page.dart(我的)。

再创建一个名为Tools的目录,在Tools里新建名为full_screen_image_page.dart的文件,此为图片详情页。

在lib根目录新建一个名为index_page.dart文件,此为页面管理页。

最终目录结构如下图:



2.配置底部导航栏

2.1开始配置底部导航栏,需要在index_page.dart里进行配置

2.2引入home_page、mine_page:

import 'package:flutter/material.dart';
import 'pages/home_page.dart';
import 'pages/mine_page.dart';

2.3配置底部导航栏按钮数组:

class _IndexPageState extends State<IndexPage> {// 底部导航按钮数组final List<BottomNavigationBarItem> bottomTabs = [BottomNavigationBarItem(icon: Icon(Icons.home),label: '首页'),BottomNavigationBarItem(icon: Icon(Icons.person),label: '我的')];
}

2.4创建容器数组等变量:

// 模块容器数组final List tabPages = [HomePage(), MinePage()];// 当前选择indexint currentIndex = 0;// 当前页var currentPage;@overridevoid initState() {// TODO: implement initStatecurrentPage = tabPages[currentIndex];super.initState();}

2.5在build方法中,配置bottomNavigationBar:

@overrideWidget build(BuildContext context) {// TODO: implement buildreturn Scaffold(bottomNavigationBar: BottomNavigationBar(currentIndex: currentIndex,backgroundColor: Colors.white,type: BottomNavigationBarType.fixed,items: bottomTabs,onTap: (idx) {// 必须实现setState方法setState(() {currentIndex = idx;currentPage = tabPages[idx];});},),appBar: new AppBar(backgroundColor: Colors.white,title: Text(bottomTabs[currentIndex].label.toString(),style: TextStyle(color: Colors.black,),),centerTitle: true,elevation: .5,),body: currentPage,);}

3.引入布局插件

3.1首先定位到pubspec.yaml中,并在适当位置添加要引入的插件,瀑布流插件名为flutter_staggered_grid_view,之后运行pub get即可

dependencies:flutter:sdk: flutterflutter_staggered_grid_view:cached_network_image: ^2.2.0+1

3.2前往home_page.dart并引入文件

import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:cached_network_image/cached_network_image.dart';

4.页面搭建

4.1在home_page.dart里使用瀑布流插件

4.1.1定义瀑布流子项的Widget

// 瀑布流每个子项Widget itemWidget(context, int index) {String imgPath = imgList[index];return new Material(elevation: 8.0,borderRadius: new BorderRadius.all(new Radius.circular(8.0),),child: new InkWell(child: new Hero(tag: imgPath,child: CachedNetworkImage(imageUrl: imgPath,fit: BoxFit.fitWidth,)),onTap: () {},),);}

4.1.2实现build方法,图片数组根据自己需求放入图片地址即可

class HomePage extends StatelessWidget {// 图片数组final List imgList = [];@overrideWidget build(BuildContext context) {return Scaffold(body: new StaggeredGridView.countBuilder(padding: EdgeInsets.all(8.0),crossAxisCount: 4,itemCount: imgList.length,itemBuilder: (context, i) {return itemWidget(context, i);},staggeredTileBuilder: (int index) =>new StaggeredTile.count(2, index == 0 ? 2.5 : 3),mainAxisSpacing: 8.0,crossAxisSpacing: 8.0,),);}
}

4.1.3在full_screen_image_page.dart中完善图片详情页

import 'package:flutter/material.dart';// 图片详情页class FullScreenImagePage extends StatefulWidget {final String imageUrl;final int curentIndex;const FullScreenImagePage({key, required this.imageUrl, required this.curentIndex}) : super(key: key);@override_FullScreenImagePageState createState() {return _FullScreenImagePageState();}}class _FullScreenImagePageState extends State<FullScreenImagePage> {@overridevoid initState() {// TODO: implement initStatesuper.initState();}@overridevoid dispose() {// TODO: implement disposesuper.dispose();}@overrideWidget build(BuildContext context) {// TODO: implement buildreturn Scaffold(appBar: new AppBar(title: Text('图片${widget.curentIndex+1}',style: TextStyle(color: Colors.black,),),centerTitle: true,backgroundColor: Colors.white,iconTheme: IconThemeData(color: Colors.black),),body: Container(margin: EdgeInsets.all(20.0),child: Image.network(widget.imageUrl, fit: BoxFit.fitWidth,),),);}
}

4.1.4最后在main.dart应用入口处创建IndexPage的实例

import 'package:flutter/material.dart';
// 导入index_page.dart
import 'index_page.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(debugShowCheckedModeBanner: false,// 调用IndexPage()方法,填充组件home: IndexPage(),theme: new ThemeData(primaryColor: Colors.blue),);}
}



总结

经过我们一番不懈的努力,总算是完成了瀑布流布局的应用。Flutter中万物皆组件,瀑布流布局也可以自己来编写,但是会比较复杂。这里我们直接采用flutter_staggered_grid_view插件完成布局,大大提升了开发效率。本期有关Flutter的介绍到此结束了,我们下期再见!GitHub项目地址​​​​​​​