iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 6
0

開始增加商品列表之外的其他頁面

lib
- pages - home.dart
        - product.dart
- main.dart
- products.dart
  1. pages/home.dart
import 'package:flutter/material.dart';

import '../product_manager.dart';

class HomePage extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return  Scaffold( 
                appBar: AppBar( 
                  title : Text('商品列表')
                ),
                body: ProductManager(startingProduct : 'test')
              );
    }
}
  1. main.dart
import 'package:flutter/material.dart'; 

import './pages/home.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget{
  @override
  Widget build(BuildContext context) { 
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.deepOrange,
        accentColor: Colors.deepPurple
      ),
      home : HomePage() //首頁拆去其他檔案了
    ); 
  }
}
  1. products.dart
import './pages/product.dart';
...
  Widget _buildProductItem(BuildContext context, int index) {
  //上一篇有提到,若陣列長度大於零,才會跑這個function渲染出卡片
    return Card(
      child: Column(
        children: <Widget>[
          Image.asset('assets/food.jpg'),
          Text(products[index]),
          ButtonBar( //增加一個buttonBar
            alignment: MainAxisAlignment.center, 
            //主軸對齊:垂直置中 
            children: <Widget>[
              FlatButton(
              //扁平化按鈕
                child: Text('Details'),
                //按鈕文字
                onPressed: () => Navigator.push(
                //按下去以後,把新的一頁蓋到目前頁面上
                      context,
                      //舊的資訊先傳進來
                      MaterialPageRoute(
                      //傳一個route組件進來
                        builder: (BuildContext context) => ProductPage(),
                        //建好後,切到剛剛引入的productPage()
                      ),
                    ),
              )
            ],
          )
        ],
      ),
    );
  }
...
  1. product.dart
import 'package:flutter/material.dart';

class ProductPage extends StatelessWidget{
  @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar( 
          title : Text('商品細節')
        ),
        //新的一頁的title
        body: Center(
          //置中
          child: Column(
            children: <Widget>[
              Text('Details'),
              RaisedButton(
                child: Text('Back'),
                onPressed: () => Navigator.pop(context),
                //pop會把剛剛蓋過去的,又pop上來(目前app狀態context要傳進去)
              )
            ]
          ),
        )
      );
    }
}
  1. 實際操作狀況如下
    參考此gif

主題來源:
Learn Flutter & Dart to Build iOS & Android Apps


上一篇
規劃檔案結構與state2 - product_control和products
下一篇
Map資料格式(很像JS的Object)
系列文
使用flutter建構Android和iOs APP25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
eric19740521
iT邦新手 1 級 ‧ 2020-09-17 04:08:45

https://ithelp.ithome.com.tw/upload/images/20200917/20013294rjBbtczCfj.jpg

請問我照範例做??
程式出錯在ProductPage(),
它說沒有定義!!!
我找過文章,沒看到 ProductPage()的程式碼??

我要留言

立即登入留言