Bài 05: Xây dựng ứng dụng FoodApp

Bài 05: Xây dựng ứng dụng FoodApp

  

Tạo dự án mới tên foodapp:

-     trong file main.dart sửa lại mã nguồn như sau:
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Food App with Navigation',
        theme: ThemeData(
        primarySwatch: Colors.blue,
        ),
        home: Scaffold(
        body: Center(
            child: Text('Food App with Navigation', style: TextStyle(fontSize: 20),),
        ),
        ),
    );
    }
}

-    Tạo thư mục models ngang hàng thư mục main.dart.
-    Tạo thư mục fake_data.dart ngang hàng thư mục main.dart.
import 'package:flutter/material.dart';
import './models/category.dart';
const FAKE_CATEGORIES = const [
    Category(id: 1, content: 'Japanese\'s Foods', color: Colors.deepOrange),
    Category(id: 2, content: 'Pizza', color: Colors.teal),
    Category(id: 3, content: 'Humburgers', color: Colors.cyanAccent),
];
-    Trong thư mục models  tạo file Category.dart
import 'package:flutter/material.dart';
class Category {
    //this is called "model"
    final int id;
    final String content;
    final Color color;
    const Category({
    @required this.id,
    @required this.content,
    this.color});
}
-   Tạo thư mục  categories_page.dart ngang hàng thư mục main.dart
import 'package:flutter/material.dart';
class CategoriesPage extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    // TODO: implement build
    return GridView(
        children: <Widget>[

        ],
        gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
            maxCrossAxisExtent: 300,
            childAspectRatio: 3/2,
            crossAxisSpacing: 10,
            mainAxisSpacing: 10
        ),
    );
    }
}

Hiển thị các món ăn

-    Vào file main.dart 
import 'package:flutter/material.dart';
import 'package:foodapp/categories_page.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Food App with Navigation',
        theme: ThemeData(
        primarySwatch: Colors.cyan,
        ),
        home: Scaffold(
        appBar: AppBar(
            centerTitle: true,
            title: Text('Food\'s categories'),
        ),
        body: CategoriesPage(
        ),
        ),
    );
    }
}
-    Vào file category_item.dart
import 'package:flutter/material.dart';
import './models/category.dart';
class CategoryItem extends StatelessWidget{
    Category category;
    CategoryItem({required this.category});
    @override
    Widget build(BuildContext context) {
    // TODO: implement build
    Color _color = this.category.color;
    return Container(
    child: Container(
        child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
            Text(
                this.category.content,
                style: TextStyle(
                    fontSize: 20,
                    fontWeight: FontWeight.bold,
                    color: Colors.white,
                )
            ),
            ],
        ),
        decoration: BoxDecoration(
        gradient: LinearGradient(
            colors:[
            _color.withOpacity(0.8),
            _color
            ],
            begin: Alignment.topRight,
            end: Alignment.bottomLeft
        ),
        color: _color,
        borderRadius: BorderRadius.circular(12)
        ),
    ),
    );
    }
}
-    Vào file fake_data.dart
import 'package:flutter/material.dart';
import './models/category.dart';
const FAKE_CATEGORIES = const [
    Category(id: 1, content: 'Japanese\'s Foods', color: Colors.deepOrange),
    Category(id: 2, content: 'Pizza', color: Colors.teal),
    Category(id: 3, content: 'Humburgers', color: Colors.pink),
    Category(id: 4, content: 'Italian', color: Colors.blueAccent),
    Category(id: 5, content: 'Milk & Yoghurt', color: Colors.deepPurple),
    Category(id: 6, content: 'Vegetables', color: Colors.green),
    Category(id: 7, content: 'Fruits', color: Colors.redAccent),
    Category(id: 8, content: 'VietNamese\'s Foods', color: Colors.deepOrange),
    Category(id: 9, content: 'Pizza hải sản', color: Colors.teal),
    Category(id: 10, content: 'Humburgers ', color: Colors.pink),
    Category(id: 11, content: 'Italian', color: Colors.blueAccent),
    Category(id: 12, content: 'Milk & Yoghurt', color: Colors.deepPurple),
    Category(id: 13, content: 'Vegetables', color: Colors.green),
    Category(id: 14, content: 'Fruits', color: Colors.redAccent),
];
-    Vào file category.dart
import 'package:flutter/material.dart';
class Category {
    //this is called "model"
    final int id;
    final String content;
    final Color color;
    const Category({
    required this.id,
    required this.content,
    required this.color
    });
}
-    Vào file  categories_page.dart
import 'package:flutter/material.dart';
import 'package:foodapp/category_item.dart';
import 'package:foodapp/fake_data.dart';
class CategoriesPage extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    // TODO: implement build
    return GridView(
        padding: EdgeInsets.all(12),
        children: FAKE_CATEGORIES.map((eachCategory)=>CategoryItem(category: eachCategory)).toList(),

        gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
            maxCrossAxisExtent: 300,
            childAspectRatio: 3/2,
            crossAxisSpacing: 10,
            mainAxisSpacing: 10
        ),
    );
    }
}
-     Build app lên điện thoại :

Cài đặt Theme và tuỳ biến Google Fonts style

Truy cập link sau :        https://fonts.google.com/?query=sh
Tìm hai fonts ưa thích ví dụ Itim và Sunshiney tải về và giải nén ra 
Tạo foder assets => fonts và coppy hai thư mục mới giải nén ra vào thư mục fonts như sau :

-    Vào file main.dart 

import 'dart:ui';

import 'package:flutter/material.dart';
import 'package:foodapp/categories_page.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Food App with Navigation',
        theme: ThemeData(
        primarySwatch: Colors.cyan,
        fontFamily: 'Itim',
        textTheme: ThemeData.light().textTheme.copyWith(
            bodyText1: TextStyle(
            color: Color.fromRGBO(20, 52, 52, 1)
            ),
            bodyText2: TextStyle(
            color: Color.fromRGBO(20, 52, 52, 1)
            ),
            subtitle1: TextStyle(
            fontSize: 25,
            color: Colors.white,
            fontFamily: 'Sunshiney'
            )
        )
        ),
        home: Scaffold(
        appBar: AppBar(
            centerTitle: true,
            title: Text('Food\'s categories'),
        ),
        body: CategoriesPage(
        ),
        ),
    );
    }
}
-    Vào file category_item.dart
import 'package:flutter/material.dart';
import './models/category.dart';
class CategoryItem extends StatelessWidget{
    Category category;
    CategoryItem({required this.category});
    @override
    Widget build(BuildContext context) {
    // TODO: implement build
    Color _color = this.category.color;
    return Container(
    child: Container(
        child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
            Text(
                this.category.content,
                style: Theme.of(context).textTheme.subtitle1
            ),
            ],
        ),
        decoration: BoxDecoration(
        gradient: LinearGradient(
            colors:[
            _color.withOpacity(0.8),
            _color
            ],
            begin: Alignment.topRight,
            end: Alignment.bottomLeft
        ),
        color: _color,
        borderRadius: BorderRadius.circular(12)
        ),
    ),
    );
    }
}

-    Vào file pubspec.yaml:
name: foodapp
description: A new Flutter project.

# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1

environment:
    sdk: ">=2.12.0 <3.0.0"

# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
# consider running `flutter pub upgrade --major-versions`. Alternatively,
# dependencies can be manually updated by changing the version numbers below to
# the latest version available on pub.dev. To see which dependencies have newer
# versions available, run `flutter pub outdated`.
dependencies:
    flutter:
    sdk: flutter


    # The following adds the Cupertino Icons font to your application.
    # Use with the CupertinoIcons class for iOS style icons.
    cupertino_icons: ^1.0.2

dev_dependencies:
    flutter_test:
    sdk: flutter

    # The "flutter_lints" package below contains a set of recommended lints to
    # encourage good coding practices. The lint set provided by the package is
    # activated in the `analysis_options.yaml` file located at the root of your
    # package. See that file for information about deactivating specific lint
    # rules and activating additional ones.
    flutter_lints: ^1.0.0

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter.
flutter:

    # The following line ensures that the Material Icons font is
    # included with your application, so that you can use the icons in
    # the material Icons class.
    uses-material-design: true

    # To add assets to your application, add an assets section, like this:
    # assets:
    #   - images/a_dot_burr.jpeg
    #   - images/a_dot_ham.jpeg

    # An image asset can refer to one or more resolution-specific "variants", see
    # https://flutter.dev/assets-and-images/#resolution-aware.

    # For details regarding adding assets from package dependencies, see
    # https://flutter.dev/assets-and-images/#from-packages

    # To add custom fonts to your application, add a fonts section here,
    # in this "flutter" section. Each entry in this list should have a
    # "family" key with the font family name, and a "fonts" key with a
    # list giving the asset and other descriptors for the font. For
    # example:
    # fonts:
    #   - family: Schyler
    #     fonts:
    #       - asset: fonts/Schyler-Regular.ttf
    #       - asset: fonts/Schyler-Italic.ttf
    #         style: italic
    #   - family: Trajan Pro
    fonts:
    - family: Itim
        fonts:
        - asset: assets/fonts/Itim/Itim-Regular.ttf
            weight: 700
    - family: Sunshiney
        fonts:
        - asset: assets/fonts/Sunshiney/Sunshiney-Regular.ttf
            weight: 500
    #
    # For details regarding fonts from package dependencies,
    # see https://flutter.dev/custom-fonts/#from-packages

-    Build app :

truy cập github xem mã nguồn:

https://github.com/Coder-DLU/flutter

Đăng nhận xét

0 Nhận xét

myadcash