- vừa được xem lúc

Tạo màn giới thiệu ứng dụng với flutter

0 0 22

Người đăng: Phan Van Manh

Theo Viblo Asia

Hầu hết các ứng dụng hiện nay đều có một màn hình giới thiệu, nó chỉ được mở lên khi ứng dụng được khởi chạy lần đầu tiên. Điều này được sử dụng để cung cấp cho người dùng ý tưởng về nội dung của ứng dụng, cách sử dụng ứng dụng hoặc chỉ để chào hỏi người dùng. Làm điều này là một nhiệm vụ không khó đối với các nhà phát triển trung cấp nhưng đối với các newbies, nó có vẻ là một nhiệm vụ khó khăn để có được kết quả mong muốn. Đừng lo lắng, tôi đã thực hiện việc lướt web thay cho bạn và cuối cùng, bạn sẽ có màn hình giới thiệu một lần của riêng mình cho ứng dụng của bạn !! Bài viết này giả định rằng bạn đã cài đặt Flagship và đã quen thuộc với các tuyến push. Vì vậy, không cần giới thiệu thêm, chúng ta hãy bắt đầu !!

1. Lý thuyết

Trước khi đi sâu vào mã, tôi muốn cho mọi người biết chúng tôi sẽ làm gì. Bất cứ khi nào người dùng cài đặt ứng dụng lần đầu tiên, chúng tôi sẽ thị màn hình giới thiệu về ứng dụng (sử dụng cách này là một phương pháp hay vì bạn có thể hiển thị trình tải thay vì màn hình trắng trong khi bạn đang tìm nạp dữ liệu hoặc thực hiện một số bước ban đầu để thiết lập ứng dụng) sẽ lưu trữ một boolean 'đã thấy' trong bộ nhớ cục bộ của thiết bị và đặt giá trị của nó thành true sau khi thực hiện việc này, nó sẽ quyết định có hiển thị màn giới thiệu hay không. Giờ đây, bất cứ khi nào người dùng mở ứng dụng, chúng tôi sẽ kiểm tra giá trị của từ ‘saw’ và đúng như vậy, chúng tôi sẽ không đẩy đến màn hình giới thiệu !!! (Khi người dùng xóa bộ nhớ của ứng dụng, màn hình giới thiệu sẽ được đẩy vào thời điểm khởi động vì thuộc tính "saw" sẽ bị xóa) Để truy cập bộ nhớ cục bộ của thiết bị, chúng tôi sẽ sử dụng shared_preferences, đây là cách tiêu chuẩn hóa để truy cập bộ nhớ của thiết bị bằng cách sử dụng flaming. Đơn giản phải không? Ohk, chúng ta hãy chuyển sang mã !!

2 Coding

Đây là tiện ích MaterialApp của chúng tôi, ở đây chúng tôi đã định nghĩa InitialRoute là SplashScreen.id (được định nghĩa là một biến tĩnh trong SplashScreen.dart), đây là màn hình đầu tiên sẽ được thị khi ứng dụng tải và nó sẽ quyết định sẽ đi tới màn hình nào tiếp theo và tìm nạp dữ liệu và kiểm tra ủy quyền !!

Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData.light().copyWith( primaryColor: Colors.amberAccent, buttonColor: Colors.black), initialRoute: SplashScreen.id, routes: { IntroScreen.id: (context) => IntroScreen(), SplashScreen.id: (context) => SplashScreen(), WelcomeScreen.id: (context) => WelcomeScreen(), ChatScreen.id: (context) => ChatScreen(), LoginScreen.id: (context) => LoginScreen(), RegistrationScreen.id: (context) => RegistrationScreen() }, ); }

Trong tiện ích SplashScreen, chúng ta có hai phương thức checkFirstScreen và _handleStartScreen. Cái sau được gọi trong initState, sau đó gọi hàm cũ sau khi kiểm tra xem bool có tồn tại hay không.

class SplashScreen extends StatefulWidget { static const String id = "/splashScreen"; @override _Splash createState() => _Splash();
} class _Splash extends State<SplashScreen> { Future checkFirstSeen() async { SharedPreferences prefs = await SharedPreferences.getInstance(); bool _seen = (prefs.getBool('seen') ?? false); if (_seen) { _handleStartScreen(); } else { await prefs.setBool('seen', true); Navigator.pushNamed(context, IntroScreen.id); } } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: CircularProgressIndicator(), ), ); } @override void initState() { super.initState(); checkFirstSeen(); } Future<void> _handleStartScreen() async { Auth _auth = Auth(); if (await _auth.isLoggedIn()) { Navigator.popAndPushNamed(context, ChatScreen.id); } else { Navigator.popAndPushNamed(context, WelcomeScreen.id); } }
}

Trong khi initState đang thực hiện nhiệm vụ kiểm tra trạng thái xác thực và quyết định có hiển thị IntroScreen hay không, chúng tôi hiển thị CircularProgressIndicator thay vì màn hình trắng, điều này giúp cải thiện trải nghiệm người dùng.

Như vậy ban đã có màn intro của riêng mình rồi !!!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 254

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 189

- vừa được xem lúc

Flutter Animation: Creating medium’s clap animation in flutte Part II

Trong phần 1 mình đã giới thiệu với các bạn cơ bản về Animation trong Flutter. Score Widget Size Animation.

0 0 53

- vừa được xem lúc

Flutter - GetX - Using GetConnect to handle API request (Part 4)

Giới thiệu. Xin chào các bạn, lại là mình với series về GetX và Flutter.

0 0 322

- vừa được xem lúc

StatefulWidget và StatelessWidget trong Flutter

I. Mở đầu. Khi các bạn build một ứng dụng với Flutter thì Widgets là thứ không thể thiếu đúng không ạ. Và 2 loại Widget không thể thiếu đó là StatefullWidget và StatelessWidget.

0 0 130

- vừa được xem lúc

Tìm hiểu về Riverpod - Provider nhưng không hắn :v

Trong Flutter có rất nhiều các quản lý state: Provider, Bloc, GetX, Redux,... khó mà nói cái nào tốt hơn cái nào. Tuy nhiên nếu bạn đã làm quen với Provider thì không ngại để tìm hiểu thêm về Riverpod. Một bản nâng cấp của Provider. Nếu bạn để ý thì cái tên "Riverpod" là các chữ cái của "Provider" đ

0 0 50