liuyuqi-dellpc 11 months ago
parent
commit
8f2de3d3e3

+ 3 - 0
.vscode/settings.json

@@ -0,0 +1,3 @@
+{
+    "commentTranslate.hover.enabled": true
+}

+ 4 - 9
README.md

@@ -1,16 +1,11 @@
 # awesome_login_page
 
-A new Flutter project.
+login page
 
-## Getting Started
 
-This project is a starting point for a Flutter application.
+## Reference
+
+参考项目: https://github.com/ajay-prabhakar/awesome-flutter-ui.git
 
-A few resources to get you started if this is your first Flutter project:
 
-- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
-- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
 
-For help getting started with Flutter development, view the
-[online documentation](https://docs.flutter.dev/), which offers tutorials,
-samples, guidance on mobile development, and a full API reference.

+ 2 - 2
android/app/build.gradle

@@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
-    compileSdkVersion flutter.compileSdkVersion
+    compileSdkVersion 33
     ndkVersion flutter.ndkVersion
 
     compileOptions {
@@ -40,7 +40,7 @@ android {
         // You can update the following values to match your application needs.
         // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
         minSdkVersion flutter.minSdkVersion
-        targetSdkVersion flutter.targetSdkVersion
+        targetSdkVersion 33
         versionCode flutterVersionCode.toInteger()
         versionName flutterVersionName
     }

+ 8 - 0
android/app/src/main/AndroidManifest.xml

@@ -1,5 +1,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="me.yoqi.flutter.awesome_login_page">
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
+
+    
    <application
         android:label="awesome_login_page"
         android:name="${applicationName}"

+ 2 - 2
android/build.gradle

@@ -6,7 +6,7 @@ buildscript {
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:7.2.0'
+        classpath 'com.android.tools.build:gradle:7.2.2'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
     }
 }
@@ -26,6 +26,6 @@ subprojects {
     project.evaluationDependsOn(':app')
 }
 
-task clean(type: Delete) {
+tasks.register("clean", Delete) {
     delete rootProject.buildDir
 }

+ 1 - 1
android/gradle/wrapper/gradle-wrapper.properties

@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip

File diff suppressed because it is too large
+ 0 - 0
assets/icons/barbecue.svg


BIN
assets/images/virus.png


+ 7 - 0
lib/dao/user_dao.dart

@@ -0,0 +1,7 @@
+import 'package:awesome_login_page/models/user_model.dart';
+
+class UserDao {
+  Future<UserModel> login(int id) async {
+    return UserModel(username: "zhangsan", password: "12356");
+  }
+}

+ 1 - 0
lib/l10n/intl_en.arb

@@ -0,0 +1 @@
+{}

+ 1 - 0
lib/l10n/intl_zh_CN.arb

@@ -0,0 +1 @@
+{}

+ 25 - 98
lib/main.dart

@@ -1,7 +1,23 @@
+import 'dart:io';
+
+import 'package:awesome_login_page/models/config.dart';
+import 'package:awesome_login_page/routes.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
 
+/// Description: enter point
+/// Time       : 05/11/2023 Thursday
+/// Author     : liuyuqi.gov@msn.cn
 void main() {
+  WidgetsFlutterBinding.ensureInitialized();
+
   runApp(const MyApp());
+
+  if (Platform.isAndroid) {
+    SystemUiOverlayStyle systemUiOverlayStyle =
+        const SystemUiOverlayStyle(statusBarColor: Colors.transparent);
+    SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
+  }
 }
 
 class MyApp extends StatelessWidget {
@@ -11,105 +27,16 @@ class MyApp extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     return MaterialApp(
-      title: 'Flutter Demo',
+      title: 'login demo',
+      debugShowCheckedModeBanner: false,
       theme: ThemeData(
-        // This is the theme of your application.
-        //
-        // Try running your application with "flutter run". You'll see the
-        // application has a blue toolbar. Then, without quitting the app, try
-        // changing the primarySwatch below to Colors.green and then invoke
-        // "hot reload" (press "r" in the console where you ran "flutter run",
-        // or simply save your changes to "hot reload" in a Flutter IDE).
-        // Notice that the counter didn't reset back to zero; the application
-        // is not restarted.
-        primarySwatch: Colors.blue,
-      ),
-      home: const MyHomePage(title: 'Flutter Demo Home Page'),
-    );
-  }
-}
-
-class MyHomePage extends StatefulWidget {
-  const MyHomePage({super.key, required this.title});
-
-  // This widget is the home page of your application. It is stateful, meaning
-  // that it has a State object (defined below) that contains fields that affect
-  // how it looks.
-
-  // This class is the configuration for the state. It holds the values (in this
-  // case the title) provided by the parent (in this case the App widget) and
-  // used by the build method of the State. Fields in a Widget subclass are
-  // always marked "final".
-
-  final String title;
-
-  @override
-  State<MyHomePage> createState() => _MyHomePageState();
-}
-
-class _MyHomePageState extends State<MyHomePage> {
-  int _counter = 0;
-
-  void _incrementCounter() {
-    setState(() {
-      // This call to setState tells the Flutter framework that something has
-      // changed in this State, which causes it to rerun the build method below
-      // so that the display can reflect the updated values. If we changed
-      // _counter without calling setState(), then the build method would not be
-      // called again, and so nothing would appear to happen.
-      _counter++;
-    });
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    // This method is rerun every time setState is called, for instance as done
-    // by the _incrementCounter method above.
-    //
-    // The Flutter framework has been optimized to make rerunning build methods
-    // fast, so that you can just rebuild anything that needs updating rather
-    // than having to individually change instances of widgets.
-    return Scaffold(
-      appBar: AppBar(
-        // Here we take the value from the MyHomePage object that was created by
-        // the App.build method, and use it to set our appbar title.
-        title: Text(widget.title),
-      ),
-      body: Center(
-        // Center is a layout widget. It takes a single child and positions it
-        // in the middle of the parent.
-        child: Column(
-          // Column is also a layout widget. It takes a list of children and
-          // arranges them vertically. By default, it sizes itself to fit its
-          // children horizontally, and tries to be as tall as its parent.
-          //
-          // Invoke "debug painting" (press "p" in the console, choose the
-          // "Toggle Debug Paint" action from the Flutter Inspector in Android
-          // Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
-          // to see the wireframe for each widget.
-          //
-          // Column has various properties to control how it sizes itself and
-          // how it positions its children. Here we use mainAxisAlignment to
-          // center the children vertically; the main axis here is the vertical
-          // axis because Columns are vertical (the cross axis would be
-          // horizontal).
-          mainAxisAlignment: MainAxisAlignment.center,
-          children: <Widget>[
-            const Text(
-              'You have pushed the button this many times:',
-            ),
-            Text(
-              '$_counter',
-              style: Theme.of(context).textTheme.headlineMedium,
-            ),
-          ],
-        ),
-      ),
-      floatingActionButton: FloatingActionButton(
-        onPressed: _incrementCounter,
-        tooltip: 'Increment',
-        child: const Icon(Icons.add),
-      ), // This trailing comma makes auto-formatting nicer for build methods.
+          primarySwatch: Colors.blue,
+          scaffoldBackgroundColor: Config.kBackgroundColor,
+          textTheme: const TextTheme(
+            bodyLarge: TextStyle(color: Config.kBodyTextColor),
+          )),
+      initialRoute: Routes.login,
+      onGenerateRoute: Routes.onGenerateRoute,
     );
   }
 }

+ 36 - 0
lib/models/config.dart

@@ -0,0 +1,36 @@
+import 'package:flutter/material.dart';
+
+class Config {
+  // Colors
+  static const kBackgroundColor = Color(0xFFFEFEFE);
+  static const kTitleTextColor = Color(0xFF303030);
+  static const kBodyTextColor = Color(0xFF4B4B4B);
+  static const kTextLightColor = Color(0xFF959595);
+  static const kInfectedColor = Color(0xFFFF8748);
+  static const kDeathColor = Color(0xFFFF4848);
+  static const kRecovercolor = Color(0xFF36C12C);
+  static const kPrimaryColor = Color(0xFF3382CC);
+  static final kShadowColor = const Color(0xFFB7B7B7).withOpacity(.16);
+  static final kActiveShadowColor = const Color(0xFF4056C6).withOpacity(.15);
+  static final kFaceBookColor = const Color(0xFF102397);
+  static final kGoogleColor = const Color(0xFFff4f38);
+// Text Style
+  static const kHeadingTextStyle = TextStyle(
+    fontSize: 22,
+    fontWeight: FontWeight.w600,
+  );
+
+  static const kSubTextStyle = TextStyle(fontSize: 16, color: kTextLightColor);
+
+  static const kTitleTextstyle = TextStyle(
+    fontSize: 18,
+    color: kTitleTextColor,
+    fontWeight: FontWeight.bold,
+  );
+}
+
+class CustomIcons {
+  static const IconData facebook = IconData(0xe901, fontFamily: "CustomIcons");
+  static const IconData googlePlus =
+      IconData(0xe902, fontFamily: "CustomIcons");
+}

+ 1 - 0
lib/models/theme.dart

@@ -0,0 +1 @@
+class Theme {}

+ 18 - 0
lib/models/user_model.dart

@@ -0,0 +1,18 @@
+class UserModel {
+  String username = "";
+  String password = "";
+
+  UserModel({required this.username, required this.password});
+
+  UserModel.fromJson(Map<String, dynamic> json) {
+    username = json['username'];
+    password = json['password'];
+  }
+
+  Map<String, dynamic> toJson() {
+    final Map<String, dynamic> data = <String, dynamic>{};
+    data['username'] = username;
+    data['password'] = password;
+    return data;
+  }
+}

+ 24 - 0
lib/pages/home_page.dart

@@ -0,0 +1,24 @@
+import 'package:flutter/material.dart';
+
+/// Description: home page
+/// Time       : 05/11/2023 Thursday
+/// Author     : liuyuqi.gov@msn.cn
+class HomePage extends StatefulWidget {
+  const HomePage({super.key});
+
+  @override
+  State<HomePage> createState() => _HomePageState();
+}
+
+class _HomePageState extends State<HomePage> {
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        actions: [],
+        title: Text("xxx"),
+      ),
+      body: Text("x"),
+    );
+  }
+}

+ 191 - 0
lib/pages/login_page.dart

@@ -0,0 +1,191 @@
+import 'package:awesome_login_page/models/config.dart';
+import 'package:awesome_login_page/views/login_card.dart';
+import 'package:awesome_login_page/views/my_header.dart';
+import 'package:awesome_login_page/views/social_icon.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+
+class LoginPage extends StatefulWidget {
+  const LoginPage({super.key});
+
+  @override
+  State<LoginPage> createState() => _LoginPageState();
+}
+
+class _LoginPageState extends State<LoginPage> {
+  final ScrollController _scrollController = ScrollController();
+  double offset = 0;
+  bool _isSelected = false;
+
+  @override
+  Widget build(BuildContext context) {
+    ScreenUtil.init(context,
+        designSize: const Size(750, 1334), scaleByHeight: true);
+
+    return Scaffold(
+      body: SingleChildScrollView(
+        controller: _scrollController,
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            MyHeader(
+              image: "assets/icons/barbecue.svg",
+              textTop: "Order and",
+              textBottom: "Get to door steps",
+              offset: offset,
+            ),
+            Padding(
+              padding: const EdgeInsets.symmetric(horizontal: 20),
+              child: Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    CardLogin(),
+                    SizedBox(
+                      height: 20.h,
+                    ),
+                    Row(
+                      children: [
+                        SizedBox(
+                          width: 12.w,
+                        ),
+                        GestureDetector(
+                          onTap: _radio,
+                          child: buildRadioButton(_isSelected),
+                        ),
+                        const SizedBox(
+                          width: 8,
+                        ),
+                        Text(
+                          "Remmeber me",
+                          style: TextStyle(fontSize: 12.sp),
+                        ),
+                      ],
+                    ),
+                    InkWell(
+                      child: Container(
+                        child: Material(
+                          color: Colors.transparent,
+                          child: InkWell(
+                              onTap: () {},
+                              child: const Center(
+                                child: Text(
+                                  "SIGNIN",
+                                  style: TextStyle(
+                                      color: Colors.white,
+                                      fontSize: 18,
+                                      letterSpacing: 1),
+                                ),
+                              )),
+                        ),
+                      ),
+                    ),
+                    SizedBox(
+                      height: 40.h,
+                    ),
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.center,
+                      children: [
+                        buildHorizontalLine(),
+                        Text(
+                          "Social Login",
+                          style: TextStyle(fontSize: 16.sp),
+                        ),
+                        buildHorizontalLine(),
+                      ],
+                    ),
+                    const SizedBox(
+                      height: 40,
+                    ),
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.center,
+                      children: [
+                        SocialIcon(
+                          color: Config.kFaceBookColor,
+                          icon: CustomIcons.facebook,
+                          press: () {
+                            facebookLoign();
+                          },
+                        ),
+                        SocialIcon(
+                            color: Config.kGoogleColor,
+                            icon: CustomIcons.googlePlus,
+                            press: () {
+                              googleLogin();
+                            })
+                      ],
+                    ),
+                    SizedBox(
+                      height: 30.h,
+                    ),
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.center,
+                      children: [
+                        const Text(
+                          "New User? ",
+                          style: TextStyle(fontSize: 18),
+                        ),
+                        InkWell(
+                          onTap: () {
+                            signup();
+                          },
+                          child: const Text(
+                            "SignUp",
+                            style: TextStyle(color: Color(0xFF5d74e3)),
+                          ),
+                        )
+                      ],
+                    )
+                  ]),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  /// 选中和取消选中
+  void _radio() {
+    setState(() {
+      _isSelected = !_isSelected;
+    });
+  }
+
+  /// 自定义选中按钮
+  /// isSelected 是否选中
+  Widget buildRadioButton(bool isSelected) {
+    return Container(
+        height: 16,
+        width: 16,
+        padding: const EdgeInsets.all(2),
+        decoration: BoxDecoration(
+            shape: BoxShape.circle,
+            border: Border.all(width: 2, color: Colors.blue)),
+        child: isSelected
+            ? Container(
+                width: double.infinity,
+                height: double.infinity,
+                decoration:
+                    const BoxDecoration(shape: BoxShape.circle, color: Colors.blue))
+            : Container());
+  }
+
+  /// 自定义横线
+  Widget buildHorizontalLine() {
+    return Padding(
+        padding: EdgeInsets.symmetric(horizontal: 16.w),
+        child: Container(
+          width: 120.w,
+          height: 1.0,
+          color: Colors.black26.withOpacity(.2),
+        ));
+  }
+
+  /// register
+  void signup() {}
+
+  /// facebook login
+  void facebookLoign() {}
+
+  /// google login
+  void googleLogin() {}
+}

+ 19 - 0
lib/routes.dart

@@ -0,0 +1,19 @@
+import 'package:awesome_login_page/pages/home_page.dart';
+import 'package:awesome_login_page/pages/login_page.dart';
+import 'package:flutter/material.dart';
+
+class Routes {
+  static const String home = '/';
+  static const String login = '/login';
+
+  static MaterialPageRoute<dynamic> onGenerateRoute(RouteSettings settings) {
+    switch (settings.name) {
+      case home:
+        return MaterialPageRoute(builder: (_) => const HomePage());
+      case login:
+        return MaterialPageRoute(builder: (_) => const LoginPage());
+      default:
+        return MaterialPageRoute(builder: (_) => const LoginPage());
+    }
+  }
+}

+ 68 - 0
lib/views/login_card.dart

@@ -0,0 +1,68 @@
+import 'package:flutter/material.dart';
+
+class CardLogin extends StatelessWidget {
+  bool passwordInvisible = true;
+  CardLogin({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: double.infinity,
+      padding: EdgeInsets.only(bottom: 1),
+      decoration: BoxDecoration(
+        color: Colors.white,
+        borderRadius: BorderRadius.circular(8),
+        boxShadow: [
+          BoxShadow(
+            offset: const Offset(0, 10),
+            blurRadius: 15,
+            color: const Color(0xFFDADADA).withOpacity(0.15),
+          ),
+          BoxShadow(
+            offset: const Offset(0, -10),
+            blurRadius: 10,
+            color: const Color(0xFFDADADA).withOpacity(0.15),
+          ),
+        ],
+      ),
+      child: Padding(
+        padding: EdgeInsets.only(left: 16, right: 16, top: 16),
+        child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
+          Text("Login", style: TextStyle(fontSize: 45, letterSpacing: .6)),
+          SizedBox(
+            height: 30,
+          ),
+          Text(
+            "Username",
+            style: TextStyle(fontSize: 26),
+          ),
+          TextField(
+              decoration: InputDecoration(
+            hintText: "Username",
+            hintStyle: TextStyle(color: Colors.grey, fontSize: 12),
+          )),
+          SizedBox(
+            height: 30,
+          ),
+          Text("Password", style: TextStyle(fontSize: 26)),
+          TextFormField(
+            obscureText: true,
+            decoration: InputDecoration(
+              hintText: "********",
+              hintStyle: TextStyle(color: Colors.grey, fontSize: 12),
+              suffixIcon: IconButton(
+                icon: Icon(passwordInvisible
+                    ? Icons.visibility_off
+                    : Icons.visibility),
+                onPressed: () {},
+              ),
+            ),
+          ),
+          SizedBox(
+            height: 35,
+          )
+        ]),
+      ),
+    );
+  }
+}

+ 111 - 0
lib/views/my_header.dart

@@ -0,0 +1,111 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+
+/// Description: login header
+/// Time       : 05/11/2023 Thursday
+/// Author     : liuyuqi.gov@msn.cn
+class MyHeader extends StatefulWidget {
+  final String image;
+  final String textTop;
+  final String textBottom;
+  final double offset;
+
+  const MyHeader(
+      {super.key,
+      required this.image,
+      required this.textTop,
+      required this.textBottom,
+      required this.offset});
+
+  @override
+  State<MyHeader> createState() => _MyHeaderState();
+}
+
+class _MyHeaderState extends State<MyHeader> {
+  @override
+  Widget build(BuildContext context) {
+    return ClipPath(
+      clipper: MyClipper(offset: widget.offset),
+      child: Container(
+        padding: const EdgeInsets.only(left: 40, top: 50, right: 20),
+        height: 350,
+        width: double.infinity,
+        decoration: const BoxDecoration(
+          gradient: LinearGradient(
+            begin: Alignment.topRight,
+            end: Alignment.bottomLeft,
+            colors: [
+              Color(0xFF3383CD),
+              Color(0xFF11249F),
+            ],
+          ),
+          image: DecorationImage(
+            image: AssetImage("assets/images/virus.png"),
+          ),
+        ),
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.end,
+          children: [
+            const SizedBox(
+              height: 30,
+            ),
+            Expanded(
+              child: Stack(
+                children: [
+                  Positioned(
+                    top: 20 - widget.offset / 2,
+                    left: 0,
+                    child: SvgPicture.asset(
+                      widget.image,
+                      width: 270,
+                      fit: BoxFit.fitWidth,
+                      alignment: Alignment.bottomLeft,
+                    ),
+                  ),
+                  Positioned(
+                    top: 50 - widget.offset / 2,
+                    left: 0,
+                    child: Text(
+                      "${widget.textTop} \n${widget.textBottom}",
+                      style: const TextStyle(
+                        fontSize: 25,
+                        fontWeight: FontWeight.w500,
+                        color: Colors.white,
+                      ),
+                    ),
+                  ),
+                  Container(), // I dont know why it can work without container
+                ],
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+}
+
+/// Description: 自定义形状,弧线
+///
+class MyClipper extends CustomClipper<Path> {
+  /// 偏移量
+  final double offset;
+
+  const MyClipper({required this.offset});
+
+  @override
+  Path getClip(Size size) {
+    var path = Path();
+    path.lineTo(0, size.height * 0.8);
+    path.quadraticBezierTo(
+        size.width / 2, size.height * 0.9, size.width, size.height * 0.8);
+    path.lineTo(size.width, 0);
+    path.close();
+    return path;
+  }
+
+  @override
+  bool shouldReclip(covariant CustomClipper<Path> oldClipper) {
+    return false;
+  }
+}

+ 43 - 0
lib/views/social_icon.dart

@@ -0,0 +1,43 @@
+import 'package:flutter/material.dart';
+
+/// Description: 社交icon
+/// Time       : 05/11/2023 Thursday
+/// Author     : liuyuqi.gov@msn.cn
+class SocialIcon extends StatelessWidget {
+  /// 颜色
+  final Color color;
+
+  /// 图标
+  final IconData icon;
+
+  /// 点击事件
+  final Function press;
+
+  const SocialIcon(
+      {super.key,
+      required this.color,
+      required this.icon,
+      required this.press});
+
+  @override
+  Widget build(BuildContext context) {
+    return Padding(
+      padding: EdgeInsets.only(left: 14),
+      child: Container(
+        width: 45,
+        height: 45,
+        decoration: BoxDecoration(shape: BoxShape.circle, color: color),
+        child: RawMaterialButton(
+          shape: CircleBorder(),
+          onPressed: () {
+            press();
+          },
+          child: Icon(
+            icon,
+            color: Colors.white,
+          ),
+        ),
+      ),
+    );
+  }
+}

+ 95 - 14
pubspec.lock

@@ -1,14 +1,22 @@
 # Generated by pub
 # See https://dart.dev/tools/pub/glossary#lockfile
 packages:
+  args:
+    dependency: transitive
+    description:
+      name: args
+      sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.4.1"
   async:
     dependency: transitive
     description:
       name: async
-      sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
+      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.10.0"
+    version: "2.11.0"
   boolean_selector:
     dependency: transitive
     description:
@@ -21,10 +29,10 @@ packages:
     dependency: transitive
     description:
       name: characters
-      sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
+      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.2.1"
+    version: "1.3.0"
   clock:
     dependency: transitive
     description:
@@ -37,10 +45,10 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+      sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.17.0"
+    version: "1.17.1"
   cupertino_icons:
     dependency: "direct main"
     description:
@@ -70,19 +78,43 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.1"
+  flutter_screenutil:
+    dependency: "direct main"
+    description:
+      name: flutter_screenutil
+      sha256: "0a122936b450324cbdfd51be0819cc6fcebb093eb65585e9cd92263f7a1a8a39"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "5.7.0"
+  flutter_svg:
+    dependency: "direct main"
+    description:
+      name: flutter_svg
+      sha256: f991fdb1533c3caeee0cdc14b04f50f0c3916f0dbcbc05237ccbe4e3c6b93f3f
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.5"
   flutter_test:
     dependency: "direct dev"
     description: flutter
     source: sdk
     version: "0.0.0"
+  intl:
+    dependency: "direct main"
+    description:
+      name: intl
+      sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.17.0"
   js:
     dependency: transitive
     description:
       name: js
-      sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+      sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.6.5"
+    version: "0.6.7"
   lints:
     dependency: transitive
     description:
@@ -95,10 +127,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: c94db23593b89766cda57aab9ac311e3616cf87c6fa4e9749df032f66f30dcb8
+      sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.12.14"
+    version: "0.12.15"
   material_color_utilities:
     dependency: transitive
     description:
@@ -111,10 +143,10 @@ packages:
     dependency: transitive
     description:
       name: meta
-      sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
+      sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.8.0"
+    version: "1.9.1"
   path:
     dependency: transitive
     description:
@@ -123,6 +155,22 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.8.3"
+  path_parsing:
+    dependency: transitive
+    description:
+      name: path_parsing
+      sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.1"
+  petitparser:
+    dependency: transitive
+    description:
+      name: petitparser
+      sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "5.1.0"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -172,10 +220,34 @@ packages:
     dependency: transitive
     description:
       name: test_api
-      sha256: c9282698e2982b6c3817037554e52f99d4daba493e8028f8112a83d68ccd0b12
+      sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.4.17"
+    version: "0.5.1"
+  vector_graphics:
+    dependency: transitive
+    description:
+      name: vector_graphics
+      sha256: ea8d3fc7b2e0f35de38a7465063ecfcf03d8217f7962aa2a6717132cb5d43a79
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.1.5"
+  vector_graphics_codec:
+    dependency: transitive
+    description:
+      name: vector_graphics_codec
+      sha256: a5eaa5d19e123ad4f61c3718ca1ed921c4e6254238d9145f82aa214955d9aced
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.1.5"
+  vector_graphics_compiler:
+    dependency: transitive
+    description:
+      name: vector_graphics_compiler
+      sha256: "15edc42f7eaa478ce854eaf1fbb9062a899c0e4e56e775dd73b7f4709c97c4ca"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.1.5"
   vector_math:
     dependency: transitive
     description:
@@ -184,5 +256,14 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.4"
+  xml:
+    dependency: transitive
+    description:
+      name: xml
+      sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "6.2.2"
 sdks:
   dart: ">=3.0.0-21.0.dev <4.0.0"
+  flutter: ">=3.7.0-0"

+ 10 - 70
pubspec.yaml

@@ -1,90 +1,30 @@
 name: awesome_login_page
 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 is used as CFBundleVersion.
-# Read more about iOS versioning at
-# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-# In Windows, build-name is used as the major, minor, and patch parts
-# of the product and file versions while build-number is used as the build suffix.
 version: 1.0.0+1
 
 environment:
   sdk: '>=3.0.0-21.0.dev <4.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
+  flutter_svg: ^2.0.5
+  flutter_screenutil: ^5.5.4
+  intl: ^0.17.0
 
 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: ^2.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 packages.
 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.
+  generate: true
   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:
-  #       - 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
+  assets:
+    - assets/icons/
+    - assets/images/
+    
+flutter_intl:
+  enabled: true

Some files were not shown because too many files changed in this diff