Làm cách nào để mở tệp html trong chế độ xem web trong trạng thái rung?
Với plugin WebView Flutter, bạn có thể thêm tiện ích WebView vào ứng dụng Flutter trên Android hoặc iOS của mình. Trên iOS, tiện ích WebView được hỗ trợ bởi WKWebView, trong khi trên Android, tiện ích WebView được hỗ trợ bởi WebView. Plugin có thể hiển thị các tiện ích Flutter qua chế độ xem web. Vì vậy, ví dụ, có thể hiển thị menu thả xuống trên chế độ xem web Show
Những gì bạn sẽ xây dựngTrong phòng thí nghiệm lập trình này, bạn sẽ từng bước xây dựng một ứng dụng dành cho thiết bị di động có WebView bằng Flutter SDK. ứng dụng của bạn sẽ
Bạn sẽ học được gìTrong phòng thí nghiệm lập trình này, bạn sẽ học cách sử dụng plugin 3 theo nhiều cách khác nhau, bao gồm
Những gì bạn cần
2. Thiết lập môi trường phát triển Flutter của bạnBạn cần hai phần mềm để hoàn thành phòng thí nghiệm này—SDK Flutter và trình chỉnh sửa Bạn có thể chạy codelab bằng bất kỳ thiết bị nào trong số này
3. Bắt đầuBắt đầu với FlutterCó nhiều cách để tạo một dự án Flutter mới, với cả Android Studio và Visual Studio Code đều cung cấp công cụ cho tác vụ này. Làm theo các quy trình được liên kết để tạo dự án hoặc thực hiện các lệnh sau trong thiết bị đầu cuối dòng lệnh tiện dụng $ flutter create webview_in_flutter Creating project webview_in_flutter... [Listing of created files elided] Wrote 81 files. All done! In order to run your application, type: $ cd webview_in_flutter $ flutter run Your application code is in webview_in_flutter\lib\main.dart. Thêm plugin WebView Flutter làm phụ thuộcDễ dàng thêm khả năng bổ sung vào ứng dụng Flutter bằng các gói Pub. Trong phòng thí nghiệm mã này, bạn sẽ thêm plugin 3 vào dự án của mình. Chạy các lệnh sau trong terminal 1Nếu bạn kiểm tra pubspec của bạn. yaml, bây giờ bạn sẽ thấy nó có một dòng trong phần phụ thuộc cho plugin 3Định cấu hình Android minSDKĐể sử dụng plugin 3 trên Android, bạn cần đặt 9 thành 19 hoặc 20, tùy thuộc vào Chế độ xem nền tảng Android mà bạn muốn sử dụng. Thông tin thêm về Chế độ xem nền tảng Android có thể được tìm thấy trên. Sửa đổi tệp 51 của bạn như sauAndroid/ứng dụng/xây dựng. phân lớp 64. Thêm tiện ích WebView vào Ứng dụng FlutterTrong bước này, bạn sẽ thêm một 7 vào ứng dụng của mình. WebView được lưu trữ chế độ xem gốc và bạn với tư cách là nhà phát triển ứng dụng có lựa chọn về cách lưu trữ các chế độ xem gốc này trong ứng dụng của mình. Trên Android, bạn có thể lựa chọn giữa Màn hình ảo, hiện là mặc định cho Android và Bố cục kết hợp. Tuy nhiên, iOS luôn sử dụng thành phần Kết hợpĐể thảo luận sâu hơn về sự khác biệt giữa Màn hình ảo và Thành phần kết hợp, vui lòng đọc qua tài liệu về Lưu trữ chế độ xem Android và iOS gốc trong ứng dụng Flutter của bạn với Chế độ xem nền tảng Đặt một Webview trên màn hìnhThay thế nội dung của 53 bằng nội dung sauthư viện/chính. phi tiêu
Chạy ứng dụng này trên iOS hoặc Android sẽ hiển thị WebView dưới dạng cửa sổ trình duyệt tràn đầy đủ trên thiết bị của bạn, điều đó có nghĩa là trình duyệt được hiển thị trên thiết bị của bạn ở chế độ toàn màn hình mà không có bất kỳ dạng đường viền hoặc lề nào. Khi bạn cuộn, bạn sẽ nhận thấy các phần của trang có thể trông hơi lạ. Điều này là do JavaScript hiện đang bị vô hiệu hóa và hiển thị rung. nhà phát triển yêu cầu JavaScript đúng cách Kích hoạt bố cục kết hợpNếu bạn muốn sử dụng chế độ Bố cục kết hợp cho thiết bị Android, bạn có thể làm như vậy với một vài sửa đổi nhỏ. Sửa đổi 53 của bạn như sauthư viện/chính. phi tiêu
Đừng quên thay đổi 55 trong 56 thành 19 khi bạn muốn sử dụng Chế độ xem nền tảng thành phần kết hợpChạy ứng dụngChạy ứng dụng Flutter trong iOS hoặc Android để xem Webview hiển thị rung. trang web của nhà phát triển. Hoặc chạy ứng dụng trong trình giả lập Android hoặc trình giả lập iOS. Vui lòng thay thế URL WebView ban đầu bằng ví dụ như trang web của riêng bạn 5Giả sử rằng bạn có trình giả lập hoặc trình mô phỏng thích hợp đang chạy hoặc một thiết bị vật lý được đính kèm, sau khi biên dịch và triển khai ứng dụng cho thiết bị của mình, bạn sẽ thấy nội dung như sau 5. Lắng nghe các sự kiện tải trangTiện ích 7 cung cấp một số sự kiện tiến trình tải trang mà ứng dụng của bạn có thể lắng nghe. Trong chu kỳ tải trang 7, có ba sự kiện tải trang khác nhau được kích hoạt. 59, 80 và 81. Trong bước này, bạn sẽ triển khai chỉ báo tải trang. Như một phần thưởng, điều này sẽ cho thấy rằng bạn có thể hiển thị nội dung Flutter trên khu vực nội dung 7Thêm sự kiện tải trang vào ứng dụng của bạnTạo một tệp nguồn mới tại 83 và điền vào đó nội dung saulib/src/web_view_stack. phi tiêu 8Mã này đã bao bọc tiện ích con 7 trong một 85, phủ lên một cách có điều kiện 7 bằng một 87 khi phần trăm tải trang nhỏ hơn 100%. Vì điều này liên quan đến trạng thái chương trình thay đổi theo thời gian, bạn đã lưu trữ trạng thái này trong lớp 88 được liên kết với lớp 89Để sử dụng tiện ích 90 mới này, hãy sửa đổi lib/main của bạn. phi tiêu như sau 9Khi bạn chạy ứng dụng, tùy thuộc vào điều kiện mạng của bạn và liệu trình duyệt có lưu trang bạn đang điều hướng tới vào bộ nhớ cache hay không, bạn sẽ thấy chỉ báo tải trang được phủ lên trên khu vực nội dung 76. Làm việc với WebViewControllerTruy cập WebViewController từ WebView WidgetTiện ích 7 cho phép điều khiển theo chương trình với một 0. Bộ điều khiển này được cung cấp sau khi xây dựng tiện ích con 7 thông qua một cuộc gọi lại. Bản chất không đồng bộ của tính khả dụng của bộ điều khiển này khiến nó trở thành ứng cử viên chính cho lớp 95 không đồng bộ của DartCó thể bạn quan tâmCập nhật 83 như saulib/src/web_view_stack. phi tiêu 7Tiện ích 90 hiện xuất bản bộ điều khiển được tạo không đồng bộ bằng cách sử dụng 98. Đây là một giải pháp thay thế có trọng lượng nhẹ hơn để tạo đối số chức năng gọi lại để cung cấp bộ điều khiển cho phần còn lại của ứng dụngChế tạo điều khiển điều hướngCó một 7 đang hoạt động là một chuyện, nhưng khả năng điều hướng tới lui trong lịch sử trang và tải lại trang sẽ là một tập hợp các bổ sung hữu ích. Rất may, với 0, bạn có thể thêm chức năng này vào ứng dụng của mìnhTạo một tệp nguồn mới tại 71 và điền vào đó như saulib/src/navigation_controls. phi tiêu 3Tiện ích này sử dụng tiện ích 72 để tự sơn lại một cách thích hợp khi bộ điều khiển khả dụng. Trong khi đợi bộ điều khiển khả dụng, một hàng gồm ba biểu tượng được hiển thị, nhưng khi bộ điều khiển xuất hiện, nó sẽ được thay thế bằng một 73 trong số các 74 bằng các trình xử lý 75 sử dụng 76 để triển khai chức năng của chúngThêm điều khiển điều hướng vào AppBarVới 90 được cập nhật và 78 mới được chế tạo trong tay, giờ là lúc để bạn kết hợp tất cả lại với nhau trong một 79 được cập nhật. Trước đây, bạn đã biết cách sử dụng 95, nhưng không biết nó được tạo ở đâu. Với 79 ở gần đầu cây Widget trong ứng dụng này, bạn nên tạo nó ở cấp độ nàyCập nhật tệp 53 như sauthư viện/chính. phi tiêu 10Chạy ứng dụng sẽ hiển thị một trang web có các điều khiển 7. Theo dõi điều hướng với NavigationDelegate 7 cung cấp cho ứng dụng của bạn một 34 cho phép ứng dụng của bạn theo dõi và kiểm soát điều hướng trang của tiện ích con 7. Khi điều hướng được bắt đầu bởi 36 chẳng hạn khi người dùng nhấp vào liên kết, thì 1 được gọi. Cuộc gọi lại 1 có thể được sử dụng để kiểm soát xem 7 có tiếp tục điều hướng hay khôngĐăng ký một NavigationDelegate tùy chỉnhTrong bước này, bạn sẽ đăng ký gọi lại 1 để chặn điều hướng đến YouTube. com. Lưu ý, việc triển khai đơn giản này cũng chặn nội dung YouTube nội tuyến, xuất hiện trong các trang tài liệu API Flutter khác nhauCập nhật 83 như saulib/src/web_view_stack. phi tiêu 11Trong bước tiếp theo, bạn sẽ thêm một mục menu để cho phép kiểm tra 1 của mình bằng cách sử dụng lớp 0. Nó được để lại như một bài tập cho người đọc để tăng cường logic của lệnh gọi lại để chỉ chặn điều hướng toàn trang tới YouTube. com và vẫn cho phép nội dung YouTube nội tuyến trong tài liệu API8. Thêm nút menu vào AppBarTrong vài bước tiếp theo, bạn sẽ tạo một nút menu trong tiện ích con 104 được sử dụng để đánh giá JavaScript, gọi các kênh JavaScript và quản lý cookie. Tất cả trong tất cả, một menu thực sự hữu íchTạo một tệp nguồn mới tại 105 và điền vào đó như saulib/src/menu. phi tiêu 12Khi người dùng chọn tùy chọn menu Điều hướng đến YouTube, phương thức 107 của 0 được thực thi. Điều hướng này sẽ bị chặn bởi lệnh gọi lại 108 mà bạn đã tạo ở bước trướcĐể thêm menu vào màn hình của 79, hãy sửa đổi 53 như sauthư viện/chính. phi tiêu 13Chạy ứng dụng của bạn và nhấn vào mục menu Điều hướng đến YouTube. Bạn sẽ được chào đón bằng một SnackBar thông báo cho bạn biết rằng bộ điều khiển điều hướng đã chặn điều hướng đến YouTube 9. Đánh giá JavaScript 0 có thể đánh giá các biểu thức JavaScript trong ngữ cảnh của trang hiện tại. Có hai cách khác nhau để đánh giá JavaScript. đối với mã JavaScript không trả về giá trị, hãy sử dụng 112 và đối với mã JavaScript trả về giá trị, hãy sử dụng 113Để bật JavaScript, bạn cần định cấu hình tiện ích con 7 với thuộc tính 115 được đặt thành 116. Theo mặc định, 117 được đặt thành 118Cập nhật lớp 119 bằng cách thêm cài đặt 117 như saulib/src/web_view_stack. phi tiêu 14Giờ đây, 7 có thể thực thi JavaScript, bạn có thể thêm một tùy chọn vào menu để sử dụng phương thức 113Sử dụng Trình chỉnh sửa của bạn hoặc một số bàn phím hoạt động, chuyển đổi lớp Menu thành StatefulWidget. Sửa đổi 105 như saulib/src/menu. phi tiêu 15Khi bạn nhấn vào tùy chọn menu 'Hiển thị tác nhân người dùng', kết quả của việc thực thi biểu thức JavaScript 124 được hiển thị trong một 125. Khi chạy ứng dụng, bạn có thể nhận thấy rằng Flutter. trang dev trông khác. Đây là kết quả của việc chạy với JavaScript được kích hoạt10. Làm việc với Kênh JavaScript 126 cho phép ứng dụng của bạn đăng ký trình xử lý gọi lại trong ngữ cảnh JavaScript của 7 có thể được gọi để truyền giá trị trở lại mã Dart của Ứng dụng. Trong bước này, bạn sẽ đăng ký một kênh 128 sẽ được gọi với kết quả là một 129Cập nhật lớp 90 như saulib/src/web_view_stack. phi tiêu 16Đối với mỗi 126 trong 132, một đối tượng kênh được cung cấp trong ngữ cảnh JavaScript dưới dạng thuộc tính cửa sổ có cùng tên với tên của 133. Sử dụng điều này từ ngữ cảnh JavaScript liên quan đến việc gọi 134 trên JavascriptChannel để gửi một tin nhắn được chuyển đến trình xử lý gọi lại 136 của 126 có tênĐể sử dụng 126 được thêm ở trên, hãy thêm một mục menu khác thực thi một 129 trong ngữ cảnh JavaScript và trả lại kết quả bằng cách sử dụng 128 126Giờ đây, 7 đã biết về 142 của chúng tôi, bạn sẽ thêm một ví dụ để mở rộng ứng dụng hơn nữa. Để làm điều này, hãy thêm một 143 bổ sung vào lớp 144 và thêm chức năng bổ sungCập nhật 145 với tùy chọn menu bổ sung, bằng cách thêm giá trị liệt kê 146 và thêm triển khai cho lớp 144 như saulib/src/menu. phi tiêu 17JavaScript này được thực thi khi người dùng chọn tùy chọn menu Ví dụ về kênh JavaScript 18Mã này gửi yêu cầu 148 tới API Địa chỉ IP Công cộng, trả về địa chỉ IP của thiết bị. Kết quả này được hiển thị trong 128 bằng cách gọi 134 trên 128 12611. Quản lý CookieỨng dụng của bạn có thể quản lý cookie trong lớp 7 bằng cách sử dụng lớp 154. Trong bước này, bạn sẽ hiển thị danh sách cookie, xóa danh sách cookie, xóa cookie và đặt cookie mới. Thêm các mục vào 145 cho từng trường hợp sử dụng cookie như saulib/src/menu. phi tiêu 19Phần còn lại của các thay đổi trong bước này tập trung vào lớp 144, bao gồm việc chuyển đổi lớp 144 từ không trạng thái sang trạng thái. Thay đổi này rất quan trọng vì 144 cần sở hữu 154 và trạng thái có thể thay đổi trong các tiện ích không trạng thái là một sự kết hợp tồiThêm Trình quản lý cookie vào lớp Trạng thái kết quả như sau lib/src/menu. phi tiêu 60Lớp 160 sẽ chứa mã được thêm vào trước đó trong lớp 144, cùng với lớp 154 mới được thêm vào. Trong loạt phần tiếp theo, bạn sẽ thêm các hàm trợ giúp vào 160, đến lượt nó sẽ được gọi bởi các mục menu chưa được thêm vàoNhận danh sách tất cả các cookieBạn sẽ sử dụng JavaScript để lấy danh sách tất cả các cookie. Để đạt được điều này, hãy thêm một phương thức trợ giúp vào cuối lớp 160, được gọi là 165. Sử dụng phương thức 113, phương thức trợ giúp của bạn thực thi 167 trong ngữ cảnh JavaScript, trả về danh sách tất cả các cookieThêm phần sau vào lớp 160lib/src/menu. phi tiêu 61Xóa tất cả cookieĐể xóa tất cả cookie trong WebView, hãy sử dụng phương thức 169 của lớp 154. Phương thức trả về một 171 phân giải thành 172 nếu 154 đã xóa cookie và 174 nếu không có cookie nào để xóaThêm phần sau vào lớp 160lib/src/menu. phi tiêu 62Thêm một cookieViệc thêm cookie có thể được thực hiện bằng cách gọi JavaScript. API được sử dụng để thêm Cookie vào tài liệu JavaScript là Thêm phần sau vào lớp 160lib/src/menu. phi tiêu 63Đặt cookie với CookieManagerCũng có thể đặt cookie bằng Trình quản lý cookie như sau Thêm phần sau vào lớp 160lib/src/menu. phi tiêu 64Xóa cookieXóa cookie liên quan đến việc thêm cookie, với ngày hết hạn được đặt trong quá khứ Thêm phần sau vào lớp 160lib/src/menu. phi tiêu 65Thêm các mục Menu Trình quản lý CookieTất cả những gì còn lại là thêm các tùy chọn menu và kết nối chúng với các phương thức trợ giúp mà bạn vừa thêm. Cập nhật lớp 160 như saulib/src/menu. phi tiêu 66Thực hành CookieManagerĐể sử dụng tất cả chức năng bạn vừa thêm vào ứng dụng, hãy thử các bước sau
12. Tải nội dung Flutter, tệp và chuỗi HTML trong WebViewỨng dụng của bạn có thể tải các tệp HTML bằng các phương pháp khác nhau và hiển thị chúng trong WebView. Trong bước này, bạn sẽ tải nội dung Flutter được chỉ định trong tệp 180, tải tệp nằm ở đường dẫn đã chỉ định và tải trang bằng Chuỗi HTMLNếu bạn muốn tải một tệp nằm ở một đường dẫn cụ thể, bạn sẽ cần thêm 181 vào 180. Đây là một plugin Flutter để tìm các vị trí thường được sử dụng trên hệ thống tệpTrên dòng lệnh, hãy chạy lệnh sau 67Để tải nội dung, chúng tôi cần chỉ định đường dẫn đến nội dung trong 180. Trong 180, thêm các dòng sauquán rượu. khoai mỡ 68Để thêm nội dung vào dự án của bạn, hãy làm theo các bước sau
Sao chép và dán đoạn mã sau vào tệp 190tài sản/www/chỉ mục. html 69cho phong cách. css sử dụng một vài dòng sau để đặt kiểu tiêu đề HTML tài sản/www/phong cách/phong cách. css 0Giờ đây, các nội dung đã được đặt và sẵn sàng sử dụng, bạn có thể triển khai các phương thức cần thiết để tải và hiển thị nội dung Flutter, tệp hoặc Chuỗi HTML Tải tài sản FlutterĐể tải nội dung bạn vừa tạo, tất cả những gì bạn cần làm là gọi phương thức 195 bằng cách sử dụng 0 và cung cấp đường dẫn đến nội dung làm tham số. Thêm phương thức sau vào cuối mã của bạnlib/src/menu. phi tiêu 1Tải tệp cục bộĐể tải tệp trên thiết bị của mình, bạn có thể thêm một phương thức sẽ sử dụng phương thức ________ 1197, một lần nữa bằng cách sử dụng phương thức 0, phương thức này nhận một số ________ 1199 chứa đường dẫn đến tệpTrước tiên, bạn cần tạo một tệp chứa mã HTML. Bạn có thể thực hiện việc này một cách đơn giản bằng cách thêm mã HTML dưới dạng Chuỗi ở đầu mã của mình trong tệp 600 ngay bên dưới phần nhậplib/src/menu. phi tiêu 2Để tạo một 601 và viết Chuỗi HTML vào tệp, bạn sẽ thêm hai phương thức. 602 sẽ tải tệp bằng cách cung cấp đường dẫn dưới dạng Chuỗi được trả về bằng phương thức 603. Thêm các phương thức sau vào mã của bạnlib/src/menu. phi tiêu 3Tải chuỗi HTMLĐể hiển thị một trang bằng cách cung cấp một chuỗi HTML khá đơn giản. 0 có một phương thức mà bạn có thể sử dụng được gọi là 605 nơi bạn có thể cung cấp Chuỗi HTML làm đối số. Sau đó, 7 sẽ hiển thị trang HTML được cung cấp. Thêm phương thức sau vào mã của bạnlib/src/menu. phi tiêu 4Thêm các mục menuGiờ đây, các nội dung đã được thiết lập và sẵn sàng để sử dụng, đồng thời các phương thức với tất cả chức năng đã được tạo, menu có thể được cập nhật. Thêm các mục sau vào 145 enumlib/src/menu. phi tiêu 5Bây giờ enum đã được cập nhật, bạn có thể thêm các tùy chọn menu và kết nối chúng với các phương thức trợ giúp mà bạn vừa thêm. Cập nhật lớp 160 như saulib/src/menu. phi tiêu 6Kiểm tra nội dung, tệp và chuỗi HTML Để kiểm tra xem mã mà bạn vừa triển khai có hoạt động hay không, bạn có thể chạy mã trên thiết bị của mình và nhấp vào một trong các mục menu mới được thêm vào. Lưu ý cách 609 sử dụng 192 mà chúng tôi đã thêm để thay đổi tiêu đề của tệp HTML thành màu xanh lam13. Tất cả đã được làm xongXin chúc mừng. Bạn đã hoàn thành codelab. Bạn có thể tìm thấy mã hoàn chỉnh cho phòng thí nghiệm mã này trong kho phòng thí nghiệm mã |