<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>GridView on 首页 | Widegram</title>
    <link>https://widegram.com/categories/gridview/</link>
    <description>Recent content in GridView on 首页 | Widegram</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Wed, 03 Nov 2021 01:52:00 +0000</lastBuildDate><atom:link href="https://widegram.com/categories/gridview/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Flutter GridView简介</title>
      <link>https://widegram.com/2021/11/flutter-gridview/</link>
      <pubDate>Wed, 03 Nov 2021 01:52:00 +0000</pubDate>
      
      <guid>https://widegram.com/2021/11/flutter-gridview/</guid>
      <description>GridView import &amp;#39;package:flutter/material.dart&amp;#39;; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: &amp;#39;Flutter Demo&amp;#39;, theme: ThemeData( primarySwatch: Colors.blue, ), home: const MyHomePage(title: &amp;#39;Flutter Demo Home Page&amp;#39;), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key, required this.title}) : super(key: key); final String title; @override State&amp;lt;MyHomePage&amp;gt; createState() =&amp;gt; _MyHomePageState(); } class _MyHomePageState extends State&amp;lt;MyHomePage&amp;gt; { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.</description>
      <content:encoded><![CDATA[<h3 id="gridview">GridView</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-dart" data-lang="dart"><span style="display:flex;"><span><span style="color:#66d9ef">import</span> <span style="color:#e6db74">&#39;package:flutter/material.dart&#39;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> main() {
</span></span><span style="display:flex;"><span>  runApp(<span style="color:#66d9ef">const</span> MyApp());
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MyApp</span> <span style="color:#66d9ef">extends</span> StatelessWidget {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">const</span> MyApp({Key<span style="color:#f92672">?</span> key}) <span style="color:#f92672">:</span> <span style="color:#66d9ef">super</span>(key: key);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">// This widget is the root of your application.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#960050;background-color:#1e0010">@</span>override
</span></span><span style="display:flex;"><span>  Widget build(BuildContext context) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> MaterialApp(
</span></span><span style="display:flex;"><span>      title: <span style="color:#e6db74">&#39;Flutter Demo&#39;</span>,
</span></span><span style="display:flex;"><span>      theme: ThemeData(
</span></span><span style="display:flex;"><span>        primarySwatch: Colors.blue,
</span></span><span style="display:flex;"><span>      ),
</span></span><span style="display:flex;"><span>      home: <span style="color:#66d9ef">const</span> MyHomePage(title: <span style="color:#e6db74">&#39;Flutter Demo Home Page&#39;</span>),
</span></span><span style="display:flex;"><span>    );
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MyHomePage</span> <span style="color:#66d9ef">extends</span> StatefulWidget {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">const</span> MyHomePage({Key<span style="color:#f92672">?</span> key, <span style="color:#66d9ef">required</span> <span style="color:#66d9ef">this</span>.title}) <span style="color:#f92672">:</span> <span style="color:#66d9ef">super</span>(key: key);
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">final</span> <span style="color:#66d9ef">String</span> title;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#960050;background-color:#1e0010">@</span>override
</span></span><span style="display:flex;"><span>  State<span style="color:#f92672">&lt;</span>MyHomePage<span style="color:#f92672">&gt;</span> createState() <span style="color:#f92672">=&gt;</span> _MyHomePageState();
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">_MyHomePageState</span> <span style="color:#66d9ef">extends</span> State<span style="color:#f92672">&lt;</span>MyHomePage<span style="color:#f92672">&gt;</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#960050;background-color:#1e0010">@</span>override
</span></span><span style="display:flex;"><span>  Widget build(BuildContext context) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> Scaffold(
</span></span><span style="display:flex;"><span>      appBar: AppBar(
</span></span><span style="display:flex;"><span>        title: Text(widget.title),
</span></span><span style="display:flex;"><span>      ),
</span></span><span style="display:flex;"><span>      body: GridView.builder(
</span></span><span style="display:flex;"><span>        gridDelegate: <span style="color:#66d9ef">const</span> SliverGridDelegateWithFixedCrossAxisCount(
</span></span><span style="display:flex;"><span>          crossAxisCount: <span style="color:#ae81ff">4</span>,    <span style="color:#75715e">//一行显示4个
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>          childAspectRatio: <span style="color:#ae81ff">16</span> <span style="color:#f92672">/</span> <span style="color:#ae81ff">9</span>  <span style="color:#75715e">//方块比例
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        ),
</span></span><span style="display:flex;"><span>       itemBuilder: (_, index)<span style="color:#f92672">=&gt;</span>Container(
</span></span><span style="display:flex;"><span>         color: Colors.primaries[index<span style="color:#f92672">%</span>Colors.primaries.length],
</span></span><span style="display:flex;"><span>       )),
</span></span><span style="display:flex;"><span>      floatingActionButton: FloatingActionButton(
</span></span><span style="display:flex;"><span>        onPressed: () {},
</span></span><span style="display:flex;"><span>        tooltip: <span style="color:#e6db74">&#39;Increment&#39;</span>,
</span></span><span style="display:flex;"><span>        child: <span style="color:#66d9ef">const</span> Icon(Icons.add),
</span></span><span style="display:flex;"><span>      ),
</span></span><span style="display:flex;"><span>    );
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><img src="https://i.loli.net/2021/11/03/Lh4lFTVkOwHa7mz.png" alt="截屏2021-11-02 下午10.34.16" style="zoom:25%;" />
<p>​		使用<code>SliverGridDelegateWithFixedCrossAxisCount</code>时，屏幕一行显示的数量已经确定，但是当手机横过来时，就会出现不那么协调的情况，产生了格子的拉伸，而且没有起到显示更多内容的效果：</p>
<img src="https://i.loli.net/2021/11/03/kNI2efp6Bub4KzU.png" alt="截屏2021-11-02 下午10.36.27" style="zoom: 25%;" />
<p>此时我们可以使用<code>SliverGridDelegateWithMaxCrossAxisExtent</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-dart" data-lang="dart"><span style="display:flex;"><span>gridDelegate: <span style="color:#66d9ef">const</span> SliverGridDelegateWithMaxCrossAxisExtent(
</span></span><span style="display:flex;"><span>  maxCrossAxisExtent: <span style="color:#ae81ff">100</span>,    <span style="color:#75715e">//一个方块最多显示100像素
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  childAspectRatio: <span style="color:#ae81ff">16</span> <span style="color:#f92672">/</span> <span style="color:#ae81ff">9</span>,  <span style="color:#75715e">//方块比例
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  mainAxisSpacing: <span style="color:#ae81ff">4.0</span>,     <span style="color:#75715e">//主轴间距
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  crossAxisSpacing: <span style="color:#ae81ff">2.0</span>     <span style="color:#75715e">//副轴间距
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">//这里也可以写成GridView.extent，直接指定maxCrossAxisExtent属性，可惜的是这样就不支持动态懒加载（builder）了
</span></span></span></code></pre></div><img src="https://i.loli.net/2021/11/03/szP7UiAMVwN6CLd.png" alt="截屏2021-11-02 下午10.45.10" style="zoom:25%;" />
]]></content:encoded>
    </item>
    
  </channel>
</rss>
