git@h5.yoqi.me 1 year ago
parent
commit
d7120ce36a

+ 1 - 0
.devcontainer/Dockerfile

@@ -0,0 +1 @@
+FROM jianboy/flutter-dev-container:2.10.5

+ 45 - 0
.devcontainer/devcontainer.json

@@ -0,0 +1,45 @@
+// java8 + android env
+// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
+// https://github.com/microsoft/vscode-dev-containers/tree/v0.233.0/containers/java-8
+{
+    "name": "Java 8",
+    "build": {
+        "dockerfile": "Dockerfile",
+        "args": {
+            // Use the VARIANT arg to pick a Debian OS version: buster, bullseye
+            // Use bullseye when running on local arm64/Apple Silicon.
+            "VARIANT": "buster",
+            // Options
+            "INSTALL_MAVEN": "true",
+            "INSTALL_GRADLE": "true",
+            "NODE_VERSION": "lts/*"
+        }
+    },
+    // Set *default* container specific settings.json values on container create.
+    "settings": {
+        "java.home": "/docker-java-home",
+        "java.import.gradle.java.home": "/usr/local/sdkman/candidates/java/current",
+        "java.configuration.runtimes": [
+            {
+                "default": true,
+                "name": "JavaSE-1.8",
+                "path": "/usr/local/sdkman/candidates/java/current"
+            }
+        ]
+    },
+    // Add the IDs of extensions you want installed when the container is created.
+    "extensions": [
+        "vscjava.vscode-java-pack",
+        "dart-code.dart-code",
+        "dart-code.flutter"
+    ],
+    // Use 'forwardPorts' to make a list of ports inside the container available locally.
+    // "forwardPorts": [],
+    // Use 'postCreateCommand' to run commands after the container is created.
+    // "postCreateCommand": "java -version",
+    // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
+    "remoteUser": "vscode",
+    "features": {
+        "docker-in-docker": "latest"
+    }
+}

+ 66 - 0
.gitpod.Dockerfile

@@ -0,0 +1,66 @@
+FROM gitpod/workspace-full-vnc
+SHELL ["/bin/bash", "-c"]
+
+ENV ANDROID_HOME=/home/gitpod/androidsdk \
+    FLUTTER_VERSION=2.10.5-stable
+
+# Install dart
+USER root
+RUN curl -fsSL https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
+    && curl -fsSL https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list \
+    && install-packages build-essential dart libkrb5-dev gcc make gradle android-tools-adb android-tools-fastboot
+
+# Install flutter
+USER gitpod
+RUN cd /home/gitpod \
+    && wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}.tar.xz \
+    && tar -xvf flutter*.tar.xz \
+    && rm -f flutter*.tar.xz
+
+RUN flutter/bin/flutter precache
+RUN echo 'export PATH="$PATH:/home/gitpod/flutter/bin"' >> /home/gitpod/.bashrc
+
+# Install Open JDK
+USER gitpod
+RUN bash -c ". /home/gitpod/.sdkman/bin/sdkman-init.sh && \
+    sdk install java 11.0.16-amzn && \
+    sdk default java 11.0.16-amzn"
+
+# Install SDK Manager
+USER gitpod
+RUN  wget https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip \
+    && mkdir -p $ANDROID_HOME/cmdline-tools/latest \
+    && unzip commandlinetools-linux-*.zip -d $ANDROID_HOME \
+    && rm -f commandlinetools-linux-*.zip \
+    && mv $ANDROID_HOME/cmdline-tools/bin $ANDROID_HOME/cmdline-tools/latest \
+    && mv $ANDROID_HOME/cmdline-tools/lib $ANDROID_HOME/cmdline-tools/latest
+
+RUN echo "export ANDROID_HOME=$ANDROID_HOME" >> /home/gitpod/.bashrc \
+    && echo 'export PATH=$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/cmdline-tools/bin:$ANDROID_HOME/platform-tools:$PATH' >> /home/gitpod/.bashrc
+
+# Install Android Image version 30
+USER gitpod
+RUN yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-30" "emulator"
+RUN yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "system-images;android-30;google_apis;x86_64"
+RUN echo no | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n avd28 -k "system-images;android-30;google_apis;x86_64"
+
+
+# Install Google Chrome
+USER root
+RUN apt-get update \
+  && apt-get install -y apt-transport-https \
+  && curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
+  && echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \
+  && apt-get update \
+  && sudo apt-get install -y google-chrome-stable
+
+# misc deps
+RUN apt-get install -y \
+  libasound2-dev \
+  libgtk-3-dev \
+  libnss3-dev \
+  fonts-noto \
+  fonts-noto-cjk
+
+# For Qt WebEngine on docker
+ENV QTWEBENGINE_DISABLE_SANDBOX 1

+ 75 - 0
.gitpod.yml

@@ -0,0 +1,75 @@
+image:
+  file: .gitpod.Dockerfile
+tasks:
+  - before: sudo mount -t tmpfs shm -osize=4096m /dev/shm
+  - init: |
+      flutter channel beta
+      flutter upgrade
+
+      # flutter config --enable-web
+      flutter config --android-sdk /home/gitpod/androidsdk
+      yes | flutter doctor --android-licenses
+
+      # flutter doctor
+
+      # flutter pub get
+
+      # flutter build -v bundle
+      # flutter build -v web
+      # flutter build -v appbundle
+      # flutter build -v apk
+      
+  # - command: |
+  #     # Gitpod is not able to run emulators within a worspace at this stage as
+  #     # Google Kubernetes Engine does not support Nested Virtualization.
+  #     #
+  #     # If running Gitpod on your own infrastructure or via the Dockerfile locally
+  #     # on infrastructure that exposes vmx or svm then this command will launch
+  #     # the emulator.
+  #     #
+  #     # $ emulator -avd avd28 -no-audio -no-window 
+  #     #
+  #     # Until this restriction is mitigated you can run native mobile apps in your
+  #     # browser via https://appetize.io/
+
+  #     if [[ -z "$APPETIZE_API_TOKEN" ]]; then
+  #         echo "Appetize API token not set. Run:"
+  #         echo ""
+  #         echo "    gp env APPETIZE_API_TOKEN=your_token"
+  #         echo ""
+  #         echo "and restart this workspace in order to get an app preview."
+  #         echo ""
+  #         echo "Request your token here: https://appetize.io/docs#request-api-token"
+  #     else
+  #         curl -sS --http1.1 "https://$APPETIZE_API_TOKEN@api.appetize.io/v1/apps/$APPETIZE_PUBLICKEY" \
+  #             -F "file=@/workspace/template-flutter/build/app/outputs/flutter-apk/app.apk" \
+  #             -F platform=android \
+  #             -F "buttonText=Start App" \
+  #             -F "postSessionButtonText=Start App" \
+  #             > .appetize.json
+
+  #         APPETIZE_PUBLICKEY=$(jq -r .publicKey .appetize.json)
+  #         gp env "APPETIZE_PUBLICKEY=$APPETIZE_PUBLICKEY"
+  #         export APPETIZE_PUBLICKEY
+
+  #         python -m webbrowser "https://appetize.io/embed/$APPETIZE_PUBLICKEY?device=pixel4&autoplay=true"
+  #     fi
+
+  #     flutter devices
+    
+  #     flutter run --web-port 8080
+
+
+ports:
+  - port: 5900
+    onOpen: ignore
+    # vnc
+  - port: 6080
+    onOpen: open-preview
+    # flutter
+  - port: 8080
+    onOpen: open-preview
+
+vscode:
+  extensions:
+    - dart-code.flutter

+ 3 - 3
lib/views/cartpage/bottom_summary.dart

@@ -12,7 +12,7 @@ class BottomCartSummary extends StatelessWidget {
       padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0),
       height: 60.0,
       child:
-          Row(crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[
+          Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
         Checkbox(
             value: cartProvide.allCheckedState,
             onChanged: (checkState) {
@@ -27,10 +27,10 @@ class BottomCartSummary extends StatelessWidget {
                 child: Column(
                   crossAxisAlignment: CrossAxisAlignment.end,
                   mainAxisAlignment: MainAxisAlignment.center,
-                  children: <Widget>[
+                  children: [
                     Row(
                       mainAxisAlignment: MainAxisAlignment.end,
-                      children: <Widget>[
+                      children: [
                         Text('合计:',
                             style:
                                 TextStyle(color: Colors.black, fontSize: 18.0)),

+ 1 - 1
lib/views/cartpage/cart_count.dart

@@ -21,7 +21,7 @@ class CartCountWidget extends StatelessWidget {
       ),
       child: Row(
         crossAxisAlignment: CrossAxisAlignment.center,
-        children: <Widget>[
+        children: [
           // 减值操作,数量为 1 停止
           Expanded(
             child: InkWell(

+ 1 - 1
lib/views/cartpage/empty_cart.dart

@@ -10,7 +10,7 @@ class EmptyShoppingCart extends StatelessWidget {
       alignment: Alignment.center,
       child: Column(
         mainAxisAlignment: MainAxisAlignment.center,
-        children: <Widget>[
+        children: [
           DecoratedBox(
               decoration:
                   ShapeDecoration(shape: CircleBorder(), color: Colors.black12),

+ 5 - 5
lib/views/cartpage/shopping_cart_list.dart

@@ -16,7 +16,7 @@ class ShoppingCartList extends StatelessWidget {
       padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0),
       child: Row(
         mainAxisAlignment: MainAxisAlignment.spaceBetween,
-        children: <Widget>[
+        children: [
           Text(
             '共${cartProvide.allCheckedCount}件商品',
             style: TextStyle(color: Colors.black),
@@ -33,7 +33,7 @@ class ShoppingCartList extends StatelessWidget {
   /// 前置部分,checkbox image
   Widget _leadingPart(ShoppingCartModel entity) {
     return Row(
-      children: <Widget>[
+      children: [
         Checkbox(
             value: entity.isChecked,
             onChanged: (checkState) {
@@ -63,7 +63,7 @@ class ShoppingCartList extends StatelessWidget {
         child: Column(
           mainAxisAlignment: MainAxisAlignment.spaceBetween,
           crossAxisAlignment: CrossAxisAlignment.start,
-          children: <Widget>[
+          children: [
             Text(
               entity.goodsName,
               style: TextStyle(color: Colors.black, fontSize: 16.0),
@@ -86,7 +86,7 @@ class ShoppingCartList extends StatelessWidget {
   Widget _trailingPart(ShoppingCartModel entity) {
     return Column(
       crossAxisAlignment: CrossAxisAlignment.end,
-      children: <Widget>[
+      children: [
         Text(
           '¥${(entity.count * entity.price).toStringAsFixed(2)}',
           style: TextStyle(color: Colors.black, fontSize: 16.0),
@@ -116,7 +116,7 @@ class ShoppingCartList extends StatelessWidget {
               color: Colors.white,
               padding: const EdgeInsets.all(12.0),
               child: Row(
-                children: <Widget>[
+                children: [
                   _leadingPart(cartProvide.shopCarts[index]),
                   _middlePart(cartProvide.shopCarts[index]),
                   _trailingPart(cartProvide.shopCarts[index])

+ 5 - 5
lib/views/category_page.dart

@@ -150,7 +150,7 @@ class _CategoryPageState extends State<CategoryPage> {
         alignment: Alignment.center,
         color: Colors.white,
         child: Column(
-          children: <Widget>[
+          children: [
             Image.network(info.image,
                 width: MediaQuery.of(context).size.width * 0.4,
                 height: MediaQuery.of(context).size.width * 0.4),
@@ -160,7 +160,7 @@ class _CategoryPageState extends State<CategoryPage> {
             Row(
                 mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                 crossAxisAlignment: CrossAxisAlignment.end,
-                children: <Widget>[
+                children: [
                   Text('¥${info.presentPrice}',
                       style: TextStyle(fontSize: 14.0)),
                   Text('¥${info.oriPrice}',
@@ -179,7 +179,7 @@ class _CategoryPageState extends State<CategoryPage> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(title: Text('商品分类'), centerTitle: true),
-      body: Row(children: <Widget>[
+      body: Row(children: [
         // 左侧栏
         Container(
           width: 100.0,
@@ -195,7 +195,7 @@ class _CategoryPageState extends State<CategoryPage> {
         // 右侧栏
         Expanded(
             child: Column(
-          children: <Widget>[
+          children: [
             // 头部导航
             Provide<SubCategoryProvide>(
               builder: (_, child, subCategories) => Container(
@@ -220,7 +220,7 @@ class _CategoryPageState extends State<CategoryPage> {
                         ? Center(
                             child: Column(
                                 mainAxisAlignment: MainAxisAlignment.center,
-                                children: <Widget>[
+                                children: [
                                   Image.asset('images/empty.png',
                                       width: 60.0, height: 60.0),
                                   Text('啊哦...目前未找到该分类下的商品'),

+ 1 - 1
lib/views/deatilspage/goods_comments.dart

@@ -31,7 +31,7 @@ class GoodsComments extends StatelessWidget {
                             child: Column(
                               mainAxisAlignment: MainAxisAlignment.center,
                               crossAxisAlignment: CrossAxisAlignment.start,
-                              children: <Widget>[
+                              children: [
                                 Text(
                                     '${_detail.goodComments[index].userName}'), // 评论者昵称
                                 Text(

+ 5 - 5
lib/views/deatilspage/goods_handler.dart

@@ -14,7 +14,7 @@ class GoodsHandler extends StatelessWidget {
   Widget _countOperator(CartCountProvide cartCount) {
     return Row(
       crossAxisAlignment: CrossAxisAlignment.center,
-      children: <Widget>[
+      children: [
         Expanded(
           child: InkWell(
             onTap:
@@ -67,10 +67,10 @@ class GoodsHandler extends StatelessWidget {
               child: Column(
                 crossAxisAlignment: CrossAxisAlignment.start,
                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                children: <Widget>[
+                children: [
                   Text('购买数量',
                       style: TextStyle(color: Colors.black, fontSize: 12.0)),
-                  Row(children: <Widget>[
+                  Row(children: [
                     Container(
                       width: 120.0,
                       height: 30.0,
@@ -110,11 +110,11 @@ class GoodsHandler extends StatelessWidget {
         height: 60.0,
         child: Card(
           margin: const EdgeInsets.all(0.0),
-          child: Row(children: <Widget>[
+          child: Row(children: [
             // 购物车按钮
             Stack(
               alignment: Alignment.topRight,
-              children: <Widget>[
+              children: [
                 IconButton(
                     icon: Icon(CupertinoIcons.shopping_cart,
                         size: 32.0, color: Colors.pink),

+ 3 - 3
lib/views/deatilspage/sliver_header_bar.dart

@@ -66,12 +66,12 @@ class HeaderFlex extends StatelessWidget {
         color: Colors.white,
         height: expandedHeight,
         child: Column(
-          children: <Widget>[
+          children: [
             Image.network(_detail.goodInfo.image1, height: 340), // 图片
             Column(
               mainAxisAlignment: MainAxisAlignment.center,
               crossAxisAlignment: CrossAxisAlignment.start,
-              children: <Widget>[
+              children: [
                 // 商品名
                 Padding(
                   padding:
@@ -93,7 +93,7 @@ class HeaderFlex extends StatelessWidget {
                       const EdgeInsets.only(top: 8.0, left: 12.0, right: 12.0),
                   child: Row(
                       crossAxisAlignment: CrossAxisAlignment.end,
-                      children: <Widget>[
+                      children: [
                         Text('¥${_detail.goodInfo.presentPrice}',
                             style:
                                 TextStyle(fontSize: 16.0, color: Colors.red)),

+ 4 - 4
lib/views/homepage/floor_part.dart

@@ -31,9 +31,9 @@ class FloorContent extends StatelessWidget {
   }
 
   Widget _topRow(context) {
-    return Row(children: <Widget>[
+    return Row(children: [
       _goodsImg(floorContent[0], context),
-      Column(children: <Widget>[
+      Column(children: [
         _goodsImg(floorContent[1], context),
         _goodsImg(floorContent[2], context),
       ])
@@ -45,9 +45,9 @@ class FloorContent extends StatelessWidget {
     return SliverToBoxAdapter(
         child: InkWell(
       child: Container(
-        child: Column(children: <Widget>[
+        child: Column(children: [
           _topRow(context),
-          Row(children: <Widget>[
+          Row(children: [
             _goodsImg(floorContent[3], context),
             _goodsImg(floorContent[4], context),
           ])

+ 1 - 1
lib/views/homepage/home_page.dart

@@ -71,7 +71,7 @@ class HomePage extends StatelessWidget {
                     child: Padding(
                       padding: const EdgeInsets.all(4.0),
                       child: Row(
-                        children: <Widget>[
+                        children: [
                           Icon(Icons.location_on,
                               color: Colors.white, size: 12.0),
                           Expanded(

+ 2 - 2
lib/views/homepage/hot_part.dart

@@ -37,12 +37,12 @@ class HotItem extends StatelessWidget {
         padding: const EdgeInsets.all(4.0),
         child: Column(
           mainAxisAlignment: MainAxisAlignment.center,
-          children: <Widget>[
+          children: [
             Image.network(hot.image),
             Text(hot.name, textAlign: TextAlign.center, maxLines: 1),
             Row(
               mainAxisAlignment: MainAxisAlignment.spaceAround,
-              children: <Widget>[
+              children: [
                 Text('¥${hot.mallPrice}'),
                 Text('¥${hot.price}',
                     style: TextStyle(

+ 2 - 2
lib/views/homepage/mall_recommend.dart

@@ -37,7 +37,7 @@ class RecommendWidget extends StatelessWidget {
             color: Colors.white),
         child: Column(
             mainAxisAlignment: MainAxisAlignment.center,
-            children: <Widget>[
+            children: [
               Image.network(recommendList[index].image, height: 120.0),
               Text('¥${recommendList[index].mallPrice}',
                   style: TextStyle(fontSize: 16.0)),
@@ -58,7 +58,7 @@ class RecommendWidget extends StatelessWidget {
         margin: const EdgeInsets.only(top: 6.0),
         child: Column(
             mainAxisAlignment: MainAxisAlignment.center,
-            children: <Widget>[
+            children: [
               _recommendTitle(),
               SizedBox(
                 height: 180.0,

+ 1 - 1
lib/views/mempage/mem_header.dart

@@ -10,7 +10,7 @@ class MemHeader extends StatelessWidget {
         gradient: LinearGradient(colors: [Colors.pink[300], Colors.blue[200]], begin: Alignment.topLeft, end: Alignment.bottomRight),
       ),
       child: Column(
-        children: <Widget>[
+        children: [
           ClipOval(
             child: Image.asset('images/avatar.jpg', width: 100.0, height: 100.0),
           ),

+ 1 - 1
lib/views/mempage/mem_page.dart

@@ -14,7 +14,7 @@ class MemPage extends StatelessWidget {
         centerTitle: true,
       ),
       body: ListView(
-        children: <Widget>[
+        children: [
           MemHeader(),
           MemTile(leading: Icons.border_all, title: "我的订单", action: () {}),
           Divider(height: 2.0, color: Colors.black38),

+ 1 - 1
lib/views/mempage/order_grid.dart

@@ -15,7 +15,7 @@ class OrderGrid extends StatelessWidget {
             (index) => InkWell(
                   child: Column(
                     mainAxisAlignment: MainAxisAlignment.center,
-                    children: <Widget>[Icon(_icons[index]), Padding(padding: const EdgeInsets.all(4.0), child: Text(_titles[index]))],
+                    children: [Icon(_icons[index]), Padding(padding: const EdgeInsets.all(4.0), child: Text(_titles[index]))],
                   ),
                   onTap: () {},
                 )),

+ 1 - 1
lib/views/my_home_page.dart

@@ -26,7 +26,7 @@ class _MyHomePageState extends State<MyHomePage> {
       body: Center(
         child: Column(
           mainAxisAlignment: MainAxisAlignment.center,
-          children: <Widget>[
+          children: [
             Text(
               '您点击+号多次:',
             ),

+ 1 - 1
lib/views/settings_page.dart

@@ -27,7 +27,7 @@ class _SettingsPageState extends State<SettingsPage> {
             title: Text('设置'),
           ),
           body: ListView(
-            children: <Widget>[
+            children: [
               SwitchListTile(
                   activeColor: Colors.pink,
                   title: Text('是否接收通知'),