Flutter Cupertino (iOS风格) Widgets


https://flutterchina.club/widgets/cupertino/

 

Building a Cupertino app with Flutter

Build a version of the Shrine shopping app (used in the Material Design codelabs) using the Cupertino package to create an iOS style look and feel. Create multiple tabs and navigate between them. Use the provider package to manage state between screens.

 

https://github.com/googlecodelabs/flutter-cupertino-store

 

示例

name: cupertino_store
description: A new Flutter application.

version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2
  intl: ^0.15.7
  provider: ^2.0.0+1
  shrine_images: ^1.0.0

dev_dependencies:
  pedantic: ^1.4.0
  flutter_test:
    sdk: 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:
  - packages/shrine_images/0-0.jpg
  - packages/shrine_images/1-0.jpg
  - packages/shrine_images/2-0.jpg
  - packages/shrine_images/3-0.jpg
  - packages/shrine_images/4-0.jpg
  - packages/shrine_images/5-0.jpg
  - packages/shrine_images/6-0.jpg
  - packages/shrine_images/7-0.jpg
  - packages/shrine_images/8-0.jpg
  - packages/shrine_images/9-0.jpg
  - packages/shrine_images/10-0.jpg
  - packages/shrine_images/11-0.jpg
  - packages/shrine_images/12-0.jpg
  - packages/shrine_images/13-0.jpg
  - packages/shrine_images/14-0.jpg
  - packages/shrine_images/15-0.jpg
  - packages/shrine_images/16-0.jpg
  - packages/shrine_images/17-0.jpg
  - packages/shrine_images/18-0.jpg
  - packages/shrine_images/19-0.jpg
  - packages/shrine_images/20-0.jpg
  - packages/shrine_images/21-0.jpg
  - packages/shrine_images/22-0.jpg
  - packages/shrine_images/23-0.jpg
  - packages/shrine_images/24-0.jpg
  - packages/shrine_images/25-0.jpg
  - packages/shrine_images/26-0.jpg
  - packages/shrine_images/27-0.jpg
  - packages/shrine_images/28-0.jpg
  - packages/shrine_images/29-0.jpg
  - packages/shrine_images/30-0.jpg
  - packages/shrine_images/31-0.jpg
  - packages/shrine_images/32-0.jpg
  - packages/shrine_images/33-0.jpg
  - packages/shrine_images/34-0.jpg
  - packages/shrine_images/35-0.jpg
  - packages/shrine_images/36-0.jpg
  - packages/shrine_images/37-0.jpg

  # 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:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.dev/custom-fonts/#from-packages
View Code

 

main.dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';

import 'app.dart';
import 'model/app_state_model.dart';

void main() {
  // This app is designed only to work vertically, so we limit
  // orientations to portrait up and down.
  SystemChrome.setPreferredOrientations(
      [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);

  return runApp(
    ChangeNotifierProvider<AppStateModel>(
      builder: (context) => AppStateModel()..loadProducts(),
      child: CupertinoStoreApp(),
    ),
  );
}

 

app.dart

import 'package:flutter/cupertino.dart';
import 'product_list_tab.dart';   // NEW
import 'search_tab.dart';         // NEW
import 'shopping_cart_tab.dart';  // NEW

class CupertinoStoreApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      home: CupertinoStoreHomePage(),
    );
  }
}

class CupertinoStoreHomePage extends StatelessWidget {
  _createNavBarItem(IconData icon, String title) {
    return BottomNavigationBarItem(icon: Icon(icon), title: Text(title));
  }

  @override
  Widget build(BuildContext context) {
    return CupertinoTabScaffold(
      tabBar: CupertinoTabBar(
        items: <BottomNavigationBarItem>[
          _createNavBarItem(CupertinoIcons.home, 'Products'),
          _createNavBarItem(CupertinoIcons.search, 'Search'),
          _createNavBarItem(CupertinoIcons.shopping_cart, 'Cart'),
        ],
      ),
      // ignore: missing_return
      tabBuilder: (_, index) {
        switch (index) {
          case 0:
            return CupertinoTabView(builder: (context) {
              return CupertinoPageScaffold(
                child: ProductListTab(),
              );
            });
          case 1:
            return CupertinoTabView(builder: (context) {
              return CupertinoPageScaffold(
                child: SearchTab(),
              );
            });
          case 2:
            return CupertinoTabView(builder: (context) {
              return CupertinoPageScaffold(
                child: ShoppingCartTab(),
              );
            });
        }
      },
    );
  }
}

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM