Browse Source

fix error

liuyuqi-dellpc 1 year ago
parent
commit
6e659d1ecb

+ 14 - 14
lib/generated/intl/messages_all.dart

@@ -11,6 +11,7 @@
 
 import 'dart:async';
 
+import 'package:flutter/foundation.dart';
 import 'package:intl/intl.dart';
 import 'package:intl/message_lookup_by_library.dart';
 import 'package:intl/src/intl_helpers.dart';
@@ -20,11 +21,11 @@ import 'messages_zh.dart' as messages_zh;
 
 typedef Future<dynamic> LibraryLoader();
 Map<String, LibraryLoader> _deferredLibraries = {
-  'en': () => Future.value(null),
-  'zh': () => Future.value(null),
+  'en': () => new SynchronousFuture(null),
+  'zh': () => new SynchronousFuture(null),
 };
 
-MessageLookupByLibrary _findExact(String localeName) {
+MessageLookupByLibrary? _findExact(String localeName) {
   switch (localeName) {
     case 'en':
       return messages_en.messages;
@@ -36,19 +37,18 @@ MessageLookupByLibrary _findExact(String localeName) {
 }
 
 /// User programs should call this before using [localeName] for messages.
-Future<bool> initializeMessages(String localeName) async {
+Future<bool> initializeMessages(String localeName) {
   var availableLocale = Intl.verifiedLocale(
-    localeName,
-    (locale) => _deferredLibraries[locale] != null,
-    onFailure: (_) => null);
+      localeName, (locale) => _deferredLibraries[locale] != null,
+      onFailure: (_) => null);
   if (availableLocale == null) {
-    return Future.value(false);
+    return new SynchronousFuture(false);
   }
   var lib = _deferredLibraries[availableLocale];
-  await (lib == null ? Future.value(false) : lib());
-  initializeInternalMessageLookup(() => CompositeMessageLookup());
+  lib == null ? new SynchronousFuture(false) : lib();
+  initializeInternalMessageLookup(() => new CompositeMessageLookup());
   messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor);
-  return Future.value(true);
+  return new SynchronousFuture(true);
 }
 
 bool _messagesExistFor(String locale) {
@@ -59,9 +59,9 @@ bool _messagesExistFor(String locale) {
   }
 }
 
-MessageLookupByLibrary _findGeneratedMessagesFor(String locale) {
-  var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor,
-      onFailure: (_) => null);
+MessageLookupByLibrary? _findGeneratedMessagesFor(String locale) {
+  var actualLocale =
+      Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null);
   if (actualLocale == null) return null;
   return _findExact(actualLocale);
 }

+ 13 - 10
lib/generated/intl/messages_en.dart

@@ -7,12 +7,13 @@
 // ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
 // ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
 // ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
-// ignore_for_file:unused_import, file_names
+// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes
+// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes
 
 import 'package:intl/intl.dart';
 import 'package:intl/message_lookup_by_library.dart';
 
-final messages = MessageLookup();
+final messages = new MessageLookup();
 
 typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
 
@@ -20,12 +21,14 @@ class MessageLookup extends MessageLookupByLibrary {
   String get localeName => 'en';
 
   final messages = _notInlinedMessages(_notInlinedMessages);
-  static _notInlinedMessages(_) => <String, Function> {
-    "btnNewGame" : MessageLookupByLibrary.simpleMessage("Game"),
-    "labelBest" : MessageLookupByLibrary.simpleMessage("BEST"),
-    "labelScore" : MessageLookupByLibrary.simpleMessage("SCORE"),
-    "titleName" : MessageLookupByLibrary.simpleMessage("2048"),
-    "titleWelDesc" : MessageLookupByLibrary.simpleMessage("Join and get to the 2048 tile!"),
-    "titleWelcome" : MessageLookupByLibrary.simpleMessage("Play 2048 Game flutter")
-  };
+  static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
+        "btnNewGame": MessageLookupByLibrary.simpleMessage("New Game"),
+        "labelBest": MessageLookupByLibrary.simpleMessage("BEST"),
+        "labelScore": MessageLookupByLibrary.simpleMessage("SCORE"),
+        "titleName": MessageLookupByLibrary.simpleMessage("2048"),
+        "titleWelDesc": MessageLookupByLibrary.simpleMessage(
+            "Join and get to the 2048 tile!"),
+        "titleWelcome":
+            MessageLookupByLibrary.simpleMessage("Play 2048 Game flutter")
+      };
 }

+ 12 - 10
lib/generated/intl/messages_zh.dart

@@ -7,12 +7,13 @@
 // ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
 // ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
 // ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
-// ignore_for_file:unused_import, file_names
+// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes
+// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes
 
 import 'package:intl/intl.dart';
 import 'package:intl/message_lookup_by_library.dart';
 
-final messages = MessageLookup();
+final messages = new MessageLookup();
 
 typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
 
@@ -20,12 +21,13 @@ class MessageLookup extends MessageLookupByLibrary {
   String get localeName => 'zh';
 
   final messages = _notInlinedMessages(_notInlinedMessages);
-  static _notInlinedMessages(_) => <String, Function> {
-    "btnNewGame" : MessageLookupByLibrary.simpleMessage("重新开始"),
-    "labelBest" : MessageLookupByLibrary.simpleMessage("最高得分"),
-    "labelScore" : MessageLookupByLibrary.simpleMessage("本次得分"),
-    "titleName" : MessageLookupByLibrary.simpleMessage("2048"),
-    "titleWelDesc" : MessageLookupByLibrary.simpleMessage("欢迎使用2048小游戏。"),
-    "titleWelcome" : MessageLookupByLibrary.simpleMessage("Play 2048 Game flutter")
-  };
+  static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
+        "btnNewGame": MessageLookupByLibrary.simpleMessage("重新开始"),
+        "labelBest": MessageLookupByLibrary.simpleMessage("最高得分"),
+        "labelScore": MessageLookupByLibrary.simpleMessage("本次得分"),
+        "titleName": MessageLookupByLibrary.simpleMessage("2048"),
+        "titleWelDesc": MessageLookupByLibrary.simpleMessage("欢迎使用2048小游戏。"),
+        "titleWelcome":
+            MessageLookupByLibrary.simpleMessage("Play 2048 Game flutter")
+      };
 }

+ 33 - 20
lib/generated/l10n.dart

@@ -10,28 +10,43 @@ import 'intl/messages_all.dart';
 
 // ignore_for_file: non_constant_identifier_names, lines_longer_than_80_chars
 // ignore_for_file: join_return_with_assignment, prefer_final_in_for_each
-// ignore_for_file: avoid_redundant_argument_values
+// ignore_for_file: avoid_redundant_argument_values, avoid_escaping_inner_quotes
 
 class S {
   S();
-  
-  static S current;
-  
-  static const AppLocalizationDelegate delegate =
-    AppLocalizationDelegate();
+
+  static S? _current;
+
+  static S get current {
+    assert(_current != null,
+        'No instance of S was loaded. Try to initialize the S delegate before accessing S.current.');
+    return _current!;
+  }
+
+  static const AppLocalizationDelegate delegate = AppLocalizationDelegate();
 
   static Future<S> load(Locale locale) {
-    final name = (locale.countryCode?.isEmpty ?? false) ? locale.languageCode : locale.toString();
-    final localeName = Intl.canonicalizedLocale(name); 
+    final name = (locale.countryCode?.isEmpty ?? false)
+        ? locale.languageCode
+        : locale.toString();
+    final localeName = Intl.canonicalizedLocale(name);
     return initializeMessages(localeName).then((_) {
       Intl.defaultLocale = localeName;
-      S.current = S();
-      
-      return S.current;
+      final instance = S();
+      S._current = instance;
+
+      return instance;
     });
-  } 
+  }
 
   static S of(BuildContext context) {
+    final instance = S.maybeOf(context);
+    assert(instance != null,
+        'No instance of S present in the widget tree. Did you add S.delegate in localizationsDelegates?');
+    return instance!;
+  }
+
+  static S? maybeOf(BuildContext context) {
     return Localizations.of<S>(context, S);
   }
 
@@ -85,10 +100,10 @@ class S {
     );
   }
 
-  /// `Game`
+  /// `New Game`
   String get btnNewGame {
     return Intl.message(
-      'Game',
+      'New Game',
       name: 'btnNewGame',
       desc: '',
       args: [],
@@ -114,13 +129,11 @@ class AppLocalizationDelegate extends LocalizationsDelegate<S> {
   bool shouldReload(AppLocalizationDelegate old) => false;
 
   bool _isSupported(Locale locale) {
-    if (locale != null) {
-      for (var supportedLocale in supportedLocales) {
-        if (supportedLocale.languageCode == locale.languageCode) {
-          return true;
-        }
+    for (var supportedLocale in supportedLocales) {
+      if (supportedLocale.languageCode == locale.languageCode) {
+        return true;
       }
     }
     return false;
   }
-}
+}

+ 2 - 2
lib/model/block_info.dart

@@ -10,7 +10,7 @@ class BlockInfo {
   BlockInfo(
       {required this.value,
       required this.current,
-      this.before,
+      required this.before,
       this.myis = true}) {
     if (this.before == null) {
       this.before = this.current;
@@ -21,7 +21,7 @@ class BlockInfo {
 
   int value;
   int current;
-  int? before;
+  int before;
   bool needMove = false;
   bool needCombine = false;
   bool myis = false;

+ 2 - 1
lib/pages/about_page.dart

@@ -4,13 +4,14 @@ import 'package:flutter/material.dart';
 /// Time       : 04/30/2023 Sunday
 /// Author     : liuyuqi.gov@msn.cn
 class AboutPage extends StatefulWidget {
-  AboutPage({Key key}) : super(key: key);
+  AboutPage({Key? key}) : super(key: key);
 
   @override
   _AboutPageState createState() => _AboutPageState();
 }
 
 class _AboutPageState extends State<AboutPage> {
+  
   @override
   Widget build(BuildContext context) {
     return Container(

+ 36 - 8
lib/pages/guide_page.dart

@@ -1,20 +1,48 @@
 import 'package:flutter/material.dart';
+import 'package:flutter_2048/pages/index_page.dart';
+import 'package:intro_slider/intro_slider.dart';
 
 /// Description: 新手引导页
 /// Time       : 04/30/2023 Sunday
 /// Author     : liuyuqi.gov@msn.cn
-class GuidePage extends StatefulWidget {
-  GuidePage({Key? key}) : super(key: key);
+class GuidePage extends StatelessWidget {
+  GuidePage({super.key});
 
-  @override
-  _GuidePageState createState() => _GuidePageState();
-}
+  List<ContentConfig> listContentConfig = [
+    ContentConfig(
+      title: "2048小游戏好玩",
+      description: "点击查看",
+      // pathImage: "assest/image/facebook.jpg",
+      backgroundColor: Color(0xff203152),
+    ),
+    ContentConfig(
+      title: "有趣",
+      description: "点击查看",
+      // pathImage: "assest/image/google.jpg",
+      backgroundColor: Color(0xff203152),
+    ),
+    ContentConfig(
+      title: "不沉迷",
+      description: "点击查看",
+      // pathImage: "assets/image/twitter.jpg",
+      backgroundColor: Color(0xff203152),
+    ),
+  ];
 
-class _GuidePageState extends State<GuidePage> {
   @override
   Widget build(BuildContext context) {
-    return Container(
-      child: ,
+    return IntroSlider(
+      key: UniqueKey(),
+      listContentConfig: listContentConfig,
+      onDonePress: () => onDonePress(context),
+      onSkipPress: () => onDonePress(context),
     );
   }
+
+  /// 完成之后到首页
+  void onDonePress(BuildContext context) {
+    Navigator.push(context, MaterialPageRoute(builder: (context) {
+      return IndexPage();
+    }));
+  }
 }

+ 2 - 7
lib/pages/index_page.dart

@@ -19,12 +19,7 @@ class IndexPage extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     //ScreenUtil 初始化实例
-    ScreenUtil.init(
-        BoxConstraints(
-            maxWidth: MediaQuery.of(context).size.width,
-            maxHeight: MediaQuery.of(context).size.height),
-        designSize: Size(360, 640),
-        orientation: Orientation.portrait); // 竖屏
+    ScreenUtil.init(context, designSize: Size(360, 640)); // 竖屏
 
     return StoreProvider(
       store: Store<GameState>(
@@ -69,4 +64,4 @@ class GameProps {
   bool started;
 
   GameProps({required this.started});
-}
+}

+ 1 - 12
lib/routes.dart

@@ -2,16 +2,5 @@ import 'package:flutter/cupertino.dart';
 
 class Routes {
   static const ROOT = '/';
-
-  static final Router router = Router(
-    routerDelegate: null,
-  );
-  static Routes _instance;
-
-  static Routes get instance {
-    if (_instance == null) {
-      _instance = Routes();
-    }
-    return _instance;
-  }
+  
 }

+ 4 - 4
lib/service/block_factory.dart

@@ -6,10 +6,10 @@ import 'package:flutter_2048/views/block/static_block.dart';
 import 'package:flutter_2048/model/block_info.dart';
 
 class BlockFactory {
-  AnimationController combinController;
-  AnimationController addController;
-  AnimationController moveController;
-  int _mode;
+  late AnimationController combinController;
+  late AnimationController addController;
+  late AnimationController moveController;
+  int _mode = 0;
 
   BlockFactory(TickerProvider provider, int mode) {
     combinController = AnimationController(

+ 11 - 15
lib/store/game_state.dart

@@ -28,6 +28,7 @@ class GameState {
       for (var j = 0; j < mode; j++) {
         var current = i * mode + j;
         row.add(BlockInfo(
+            before: current,
             value: current == block1 || current == block2 ? 2 : 0,
             current: current));
       }
@@ -36,11 +37,7 @@ class GameState {
 
     return GameState(
       mode: mode,
-      status: GameStatus(
-        end: false,
-        scores: 0,
-        total: null,
-      ),
+      status: GameStatus(end: false, scores: 0, total: 0, adds: 0, moves: 0),
       data: newdata,
     );
   }
@@ -55,7 +52,7 @@ class GameState {
     for (var i = 0; i < mode; i++) {
       for (var j = 0; j < mode; j++) {
         var block = getBlock(i, j);
-        block.myis= false;
+        block.myis = false;
         if (block.value == 0) {
           count++;
         }
@@ -137,6 +134,7 @@ class GameState {
           current: data[i][j].current,
           value: data[i][j].value,
           myis: false,
+          before: data[i][j].before,
         ));
       }
       newdata.add(row);
@@ -145,15 +143,13 @@ class GameState {
     return GameState(
       data: newdata,
       mode: this.mode,
-      status: this.status == null
-          ? null
-          : GameStatus(
-              adds: this.status.adds,
-              end: this.status.end,
-              moves: this.status.moves,
-              scores: this.status.scores,
-              total: this.status.total,
-            ),
+      status: GameStatus(
+        adds: this.status.adds,
+        end: this.status.end,
+        moves: this.status.moves,
+        scores: this.status.scores,
+        total: this.status.total,
+      ),
     );
   }
 }

+ 4 - 4
lib/utils/device.dart

@@ -4,7 +4,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 class Device {
   static getRatio(int value) {
     int uiwidth = value is int ? value : 750;
-    return ScreenUtil().uiSize.width / uiwidth;
+    return ScreenUtil().screenWidth / uiwidth;
   }
 
   static getRpx(double value) {
@@ -12,15 +12,15 @@ class Device {
   }
 
   static getBottomPadding() {
-    return ScreenUtil().uiSize.height;
+    return ScreenUtil().screenHeight;
   }
 
   static getTopPadding() {
-    return ScreenUtil().uiSize.height;
+    return ScreenUtil().screenHeight;
   }
 
   static getWidth() {
-    return ScreenUtil().uiSize.width;
+    return ScreenUtil().screenWidth;
   }
 
   static Platform platform = Platform();

+ 9 - 5
lib/views/block/base_block.dart

@@ -3,6 +3,7 @@ import 'package:flutter_2048/store/game_state.dart';
 import 'package:flutter_2048/utils/screen.dart';
 import 'package:flutter_redux/flutter_redux.dart';
 
+/// AnimatedWidget 是一个抽象类,它继承自 StatefulWidget,它的作用是根据监听的动画的变化来刷新 UI。
 abstract class BaseBlock extends AnimatedWidget {
   BaseBlock({Key? key, required Animation animation})
       : super(
@@ -14,10 +15,10 @@ abstract class BaseBlock extends AnimatedWidget {
   Widget build(BuildContext context) {
     return StoreConnector<GameState, BlockProps>(
       converter: (store) => BlockProps(
-            blockWidth: Screen.getBlockWidth(store.state.mode),
-            borderWidth: Screen.getBorderWidth(store.state.mode),
-            mode: store.state.mode,
-          ),
+        blockWidth: Screen.getBlockWidth(store.state.mode),
+        borderWidth: Screen.getBorderWidth(store.state.mode),
+        mode: store.state.mode,
+      ),
       builder: buildBlock,
     );
   }
@@ -34,5 +35,8 @@ class BlockProps {
   double borderWidth;
   int mode;
 
-  BlockProps({required this.blockWidth, required this.borderWidth, required this.mode});
+  BlockProps(
+      {required this.blockWidth,
+      required this.borderWidth,
+      required this.mode});
 }

+ 1 - 1
lib/views/block/combin_block.dart

@@ -23,7 +23,7 @@ class CombinBlock extends BaseBlock {
 
   @override
   Widget buildBlock(BuildContext context, BlockProps props) {
-    Animation<double> animation = listenable;
+    Animation<double> animation = listenable as Animation<double>;
     return Stack(
       fit: StackFit.expand,
       children: [

+ 1 - 1
lib/views/block/move_block.dart

@@ -28,7 +28,7 @@ class MoveBlock extends BaseBlock {
 
   @override
   Widget buildBlock(BuildContext context, BlockProps props) {
-    Animation<double> animation = listenable;
+    Animation<double> animation = listenable as Animation<double>;
     var direction = info.current % mode == info.before % mode ? 1 : 0;
     return Positioned(
       top:

+ 1 - 1
lib/views/block/new_block.dart

@@ -17,7 +17,7 @@ class NewBlock extends BaseBlock {
 
   @override
   Widget buildBlock(BuildContext context, BlockProps props) {
-    Animation<double> animation = listenable;
+    Animation<double> animation = listenable as Animation<double>;
     return Positioned(
       top:
           (info.current ~/ props.mode) * (props.blockWidth + props.borderWidth),

+ 2 - 2
lib/views/number_text.dart

@@ -46,8 +46,8 @@ class NumberText extends StatelessWidget {
       height: size,
       decoration: BoxDecoration(
         color: (this.value ~/ 2048) > 1
-            ? styles[this.value ~/ 2048].background
-            : styles[this.value].background,
+            ? styles[this.value ~/ 2048]!.background
+            : styles[this.value]!.background,
         border: Border.all(color: Colors.transparent, width: 0),
         borderRadius: BorderRadius.circular(5),
       ),

+ 2 - 2
lib/views/playground.dart

@@ -67,9 +67,9 @@ class Playground extends StatelessWidget {
   void onHorizontalDragEnd(DragEndDetails evt, PlaygroundProps props) {
     if (DateTime.now().millisecondsSinceEpoch - props.startTime >
             pressTimeout ||
-        evt.primaryVelocity.abs() < dragLength) return;
+        evt.primaryVelocity!.abs() < dragLength) return;
 
-    if (evt.primaryVelocity > 0) {
+    if (evt.primaryVelocity! > 0) {
       props.onRight();
     } else {
       props.onLeft();

+ 1 - 1
lib/views/scores.dart

@@ -14,7 +14,7 @@ class Scores extends StatelessWidget {
         isEnd: store.state.status.end,
         reset: () {
           gameInit(store, store.state.mode);
-        },
+        }, mode: store.state.mode,
       ),
       // onDidChange: (props) {
       //   if (props.isEnd && props.scores > props.total) {

+ 71 - 26
pubspec.lock

@@ -5,48 +5,47 @@ packages:
     dependency: transitive
     description:
       name: async
+      sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.8.2"
+    version: "2.10.0"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
+      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.1"
   characters:
     dependency: transitive
     description:
       name: characters
+      sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.2.0"
-  charcode:
-    dependency: transitive
-    description:
-      name: charcode
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "1.3.1"
+    version: "1.2.1"
   clock:
     dependency: transitive
     description:
       name: clock
+      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.1.0"
+    version: "1.1.1"
   collection:
     dependency: transitive
     description:
       name: collection
+      sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.16.0"
+    version: "1.17.0"
   cupertino_icons:
     dependency: "direct main"
     description:
       name: cupertino_icons
+      sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.0.5"
@@ -54,6 +53,7 @@ packages:
     dependency: "direct main"
     description:
       name: device_info
+      sha256: f4a8156cb7b7480d969cb734907d18b333c8f0bc0b1ad0b342cdcecf30d62c48
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.3"
@@ -61,6 +61,7 @@ packages:
     dependency: transitive
     description:
       name: device_info_platform_interface
+      sha256: b148e0bf9640145d09a4f8dea96614076f889e7f7f8b5ecab1c7e5c2dbc73c1b
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.1"
@@ -68,13 +69,15 @@ packages:
     dependency: transitive
     description:
       name: fake_async
+      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.3.0"
+    version: "1.3.1"
   ffi:
     dependency: transitive
     description:
       name: ffi
+      sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.1"
@@ -82,6 +85,7 @@ packages:
     dependency: transitive
     description:
       name: file
+      sha256: b69516f2c26a5bcac4eee2e32512e1a5205ab312b3536c1c1227b2b942b5f9ad
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "6.1.2"
@@ -99,6 +103,7 @@ packages:
     dependency: "direct main"
     description:
       name: flutter_redux
+      sha256: "3b20be9e08d0038e1452fbfa1fdb1ea0a7c3738c997734530b3c6d0bb5fcdbdc"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.10.0"
@@ -106,6 +111,7 @@ packages:
     dependency: "direct main"
     description:
       name: flutter_screenutil
+      sha256: "8bc686a9e4db21d7e2c8a1761073f6dee088f3d8284a3ad812825bb398ae85a6"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "5.5.3+2"
@@ -123,48 +129,63 @@ packages:
     dependency: "direct main"
     description:
       name: intl
+      sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.17.0"
+  intro_slider:
+    dependency: "direct main"
+    description:
+      name: intro_slider
+      sha256: c6b3e830b01859446ea008a32d753d302d19805fdf1f775fb857a1e3590aead9
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "4.2.0"
   js:
     dependency: transitive
     description:
       name: js
+      sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.6.4"
+    version: "0.6.5"
   matcher:
     dependency: transitive
     description:
       name: matcher
+      sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.12.11"
+    version: "0.12.13"
   material_color_utilities:
     dependency: transitive
     description:
       name: material_color_utilities
+      sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.1.4"
+    version: "0.2.0"
   meta:
     dependency: transitive
     description:
       name: meta
+      sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.7.0"
+    version: "1.8.0"
   path:
     dependency: transitive
     description:
       name: path
+      sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.8.1"
+    version: "1.8.2"
   path_provider_linux:
     dependency: transitive
     description:
       name: path_provider_linux
+      sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.7"
@@ -172,6 +193,7 @@ packages:
     dependency: transitive
     description:
       name: path_provider_platform_interface
+      sha256: "27dc7a224fcd07444cb5e0e60423ccacea3e13cf00fc5282ac2c918132da931d"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.4"
@@ -179,6 +201,7 @@ packages:
     dependency: transitive
     description:
       name: path_provider_windows
+      sha256: "1cc550ec9881c47cb836f37e4db8f94405bd4e33b63efdd20cb9c7c68be6034b"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.2"
@@ -186,6 +209,7 @@ packages:
     dependency: transitive
     description:
       name: platform
+      sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "3.1.0"
@@ -193,6 +217,7 @@ packages:
     dependency: transitive
     description:
       name: plugin_platform_interface
+      sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.2"
@@ -200,6 +225,7 @@ packages:
     dependency: transitive
     description:
       name: process
+      sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "4.2.4"
@@ -207,6 +233,7 @@ packages:
     dependency: transitive
     description:
       name: redux
+      sha256: "1e86ed5b1a9a717922d0a0ca41f9bf49c1a587d50050e9426fc65b14e85ec4d7"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "5.0.0"
@@ -214,6 +241,7 @@ packages:
     dependency: "direct main"
     description:
       name: redux_thunk
+      sha256: ae7c41b1401f59440d6709741979a06b6e29cf7a2b00ec239149727340a35403
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.4.0"
@@ -221,6 +249,7 @@ packages:
     dependency: "direct main"
     description:
       name: shared_preferences
+      sha256: "76917b7d4b9526b2ba416808a7eb9fb2863c1a09cf63ec85f1453da240fa818a"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.15"
@@ -228,6 +257,7 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_android
+      sha256: "853801ce6ba7429ec4e923e37317f32a57c903de50b8c33ffcfbdb7e6f0dd39c"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.12"
@@ -235,6 +265,7 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_ios
+      sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.1"
@@ -242,6 +273,7 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_linux
+      sha256: "28aefc1261746e7bad3d09799496054beb84e8c4ffcdfed7734e17b4ada459a5"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.1"
@@ -249,6 +281,7 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_macos
+      sha256: fbb94bf296576f49be37a1496d5951796211a8db0aa22cc0d68c46440dad808c
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.4"
@@ -256,6 +289,7 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_platform_interface
+      sha256: "992f0fdc46d0a3c0ac2e5859f2de0e577bbe51f78a77ee8f357cbe626a2ad32d"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.0"
@@ -263,6 +297,7 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_web
+      sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.4"
@@ -270,6 +305,7 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_windows
+      sha256: "97f7ab9a7da96d9cf19581f5de520ceb529548498bd6b5e0ccd02d68a0d15eba"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.1"
@@ -282,55 +318,63 @@ packages:
     dependency: transitive
     description:
       name: source_span
+      sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.8.2"
+    version: "1.9.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
+      sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.10.0"
+    version: "1.11.0"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
+      sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.1"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
+      sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.1.0"
+    version: "1.2.0"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
+      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.2.0"
+    version: "1.2.1"
   test_api:
     dependency: transitive
     description:
       name: test_api
+      sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.4.9"
+    version: "0.4.16"
   vector_math:
     dependency: transitive
     description:
       name: vector_math
+      sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
   win32:
     dependency: transitive
     description:
       name: win32
+      sha256: "6b75ac2ddd42f5c226fdaf4498a2b04071c06f1f2b8f7ab1c3f77cc7f2285ff1"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.7.0"
@@ -338,9 +382,10 @@ packages:
     dependency: transitive
     description:
       name: xdg_directories
+      sha256: "060b6e1c891d956f72b5ac9463466c37cce3fa962a921532fc001e86fe93438e"
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.2.0+1"
 sdks:
-  dart: ">=2.17.6 <3.0.0"
+  dart: ">=2.18.0 <3.0.0"
   flutter: ">=3.0.0"

+ 3 - 1
pubspec.yaml

@@ -18,6 +18,7 @@ dependencies:
   flutter_redux: ^0.10.0 # 状态管理
   redux_thunk: ^0.4.0
   shared_preferences: ^2.0.15
+  intro_slider: ^4.2.0
 
 dev_dependencies:
   flutter_test:
@@ -25,6 +26,7 @@ dev_dependencies:
 
 flutter:
   uses-material-design: true
-
+  generate: true
+  
 flutter_intl:
   enabled: true