国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序

這篇具有很好參考價(jià)值的文章主要介紹了如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序

如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序

Jetpack compose 是在 Android 上構(gòu)建 UI 的未來(lái)。

如果您完全不熟悉 android 并且不知道 Jetpack Compose 是什么——它基本上是一種構(gòu)建本機(jī)用戶界面的新方法。
Jetpack compose官方站點(diǎn)

https://developer.android.com/jetpack/compose

在本文中,您將了解如何使用 Jetpack Compose 遵循最佳實(shí)踐進(jìn)行 UI 開(kāi)發(fā)。

我們正在建設(shè)什么
我們將構(gòu)建一個(gè)顯示 Apple Music 專輯列表的應(yīng)用程序。讓我們調(diào)用應(yīng)用程序MyMusic。

從我的github 存儲(chǔ)庫(kù)中,您將學(xué)習(xí)如何:

https://github.com/ibrajix/MyMusic

  1. 使用推薦的方法(啟動(dòng) API)構(gòu)建啟動(dòng)畫(huà)面

https://developer.android.com/guide/topics/ui/splash-screen

  1. 使用各種 UI 可組合項(xiàng),例如行、列、惰性列、動(dòng)畫(huà) API
  2. 將 MVVM 模式與 Jetpack Compose 結(jié)合使用(使用可觀察對(duì)象和狀態(tài)持有者,如 StateFlow)
  3. 使用Room 數(shù)據(jù)庫(kù)從 JSON 文件保存本地?cái)?shù)據(jù)
  4. 在應(yīng)用程序上實(shí)現(xiàn)搜索功能
  5. 使用這個(gè)很棒的庫(kù)實(shí)現(xiàn)帶有過(guò)渡動(dòng)畫(huà)的簡(jiǎn)單導(dǎo)航

https://github.com/raamcosta/compose-destinations

  1. 如何使用這個(gè)很棒的庫(kù)有效地顯示 gif 等圖像

https://github.com/skydoves/Landscapist

為了降低復(fù)雜性,本文重點(diǎn)介紹 UI。

SpashScreen

啟動(dòng)畫(huà)面是在您的應(yīng)用程序內(nèi)容加載之前顯示的內(nèi)容。這是向用戶展示您的品牌形象或徽標(biāo)的一種方式。

如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序

可悲的是,沒(méi)有辦法專門(mén)用 compose 來(lái)實(shí)現(xiàn)當(dāng)前的 splash API。我們?nèi)匀恍枰恍?xml 代碼

  • values/themes.xml下。添加啟動(dòng)畫(huà)面主題
    代碼中注釋了每個(gè)屬性的作用
<!--Parent Theme-->
<style name="Theme.MyMusic" parent="android:Theme.Material.Light.NoActionBar">
   ......
</style>

<!--Splash Screen Theme-->
<style name="Theme.MyMusic.SplashScreen" parent="Theme.SplashScreen">
   <!--splash screen background-->
   <item name="windowSplashScreenBackground">@color/splash_screen_background_color</item>

   <!--splash screen drawable-->
   <item name="windowSplashScreenAnimatedIcon">@drawable/ic_launcher_foreground</item>

   <!--post splash screen - displayed after splash screen-->
   <item name="postSplashScreenTheme">@style/Theme.MyMusic</item>
</style>
  • 確保將主題包含在AndroidManifest.xml root 標(biāo)記中
android:theme="@style/Theme.MyMusic.SplashScreen"

在您的 Launcher Activity 中安裝主題,它應(yīng)該是您的MainActivity.kt

class MainActivity : ComponentActivity()
  .........
super.onCreate(savedInstanceState)
  ......
installSplashScreen()
  • 運(yùn)行該應(yīng)用程序,您的初始屏幕應(yīng)該可以正常工作。

StartSceen

如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序

創(chuàng)建一個(gè)新的composable,命名為StartScreen(代碼路徑 ui/screens/start/StartScreen.kt

@RootNavGraph(start = true)
@Destination(style = StartScreenTransitionAnimation::class)
@Composable
fun StartScreen(
    modifier: Modifier = Modifier,
    navigator: DestinationsNavigator
) {

   ..//we'll build the layout above here

}

@RootNavGraph - 這是我們導(dǎo)航庫(kù)中的一個(gè)注釋,表示這是我們導(dǎo)航圖的起始屏幕。

@Destination - 也是來(lái)自我們導(dǎo)航庫(kù)的注釋,表示這個(gè)組合式是一個(gè)可以讓用戶往返導(dǎo)航的目的地。我們還包括了一個(gè)過(guò)渡動(dòng)畫(huà)的樣式屬性(請(qǐng)查看animations/StartScreenTransition.kt)。

@Modifier - 是傳遞給組合式的參數(shù),用于裝飾組合式(例如,大小、背景等)。

@Navigator - 幫助我們從一個(gè)目的地或屏幕導(dǎo)航到另一個(gè)。

  • 正如您從上面的圖2中可以看到的那樣,卡片被放置在肯伊·威斯特(Kanye West)的圖像上方。
  • 因此,我們將使用一個(gè)Box。
  • Box是一個(gè)UI可組合,可以讓您將項(xiàng)目放置在其他項(xiàng)目之上。

請(qǐng)?jiān)谏厦娴膡…}之間放置以下可組合:

Box(
    modifier = modifier
        .fillMaxSize()
){
.......
}
  • modifier 說(shuō)明該 Box 應(yīng)填充整個(gè)屏幕的大小。
  • 現(xiàn)在,在 Box 內(nèi)部,我們放置我們的卡尼·韋斯特圖片,這是一個(gè) GIF(使用我們的圖像加載庫(kù))。
Box(
    modifier = modifier
        .fillMaxSize()
){

    GlideImage(
        imageModel = R.drawable.kanye
    ) 
    ........
}
  • 接下來(lái),我們需要?jiǎng)?chuàng)建一個(gè)放置在 Kanye 圖片上方的卡片。我們可以使用 Card 組合來(lái)實(shí)現(xiàn)。
Box(
        modifier = modifier
            .fillMaxSize()
    ){

        GlideImage(
            imageModel = R.drawable.kanye
        )

        Card(modifier = modifier
            .fillMaxWidth(0.8F)
            .align(Alignment.BottomCenter)
            .padding(bottom = 50.dp),
            shape = RoundedCornerShape(50.dp),
            backgroundColor = MaterialTheme.colors.secondary
        ) {

          ...........

        }

}
  • 我們指定卡片應(yīng)該在屏幕底部居中,寬度恰好占據(jù)屏幕的 80%,并有 50dp 的 padding。
  • 我們還指定了卡片應(yīng)該有圓角,半徑為 50dp,并具有輔助背景色。
  • 從上圖2中可以看出,紅色箭頭表示物品是從上到下(縱向)排列的。

如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序

  • Column是一個(gè)UI組件,可將其子項(xiàng)垂直排列在一起。
Box(
        modifier = modifier
            .fillMaxSize()
    ){

        GlideImage(
            imageModel = R.drawable.kanye
        )

        Card(modifier = modifier
            .fillMaxWidth(0.8F)
            .align(Alignment.BottomCenter)
            .padding(bottom = 50.dp),
            shape = RoundedCornerShape(50.dp),
            backgroundColor = MaterialTheme.colors.secondary
        ) {

            Column(
                modifier = modifier
                    .padding(bottom = 20.dp),
                verticalArrangement = Arrangement.SpaceEvenly,
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                ...........
            }
            
       }
}
  • 這些修飾符和屬性都是很容易理解的。
  • 我們確保在此列中放置的所有項(xiàng)目從上到下(垂直)均勻分布。
  • 同時(shí),確保項(xiàng)目從左到右(水平)居中。
  • 現(xiàn)在,我們將在列中添加其他 UI 組合件——文本和按鈕。
    開(kāi)始界面的完整代碼如下:
//StartScreen.kt
@RootNavGraph(start = true)
@Destination(style = StartScreenTransitionAnimation::class)
@Composable
fun StartScreen(
    modifier: Modifier = Modifier,
    navigator: DestinationsNavigator
) {

    Box(
        modifier = modifier
            .fillMaxSize()
    ){

        GlideImage(
            imageModel = R.drawable.kanye
        )

        Card(modifier = modifier
            .fillMaxWidth(0.8F)
            .align(Alignment.BottomCenter)
            .padding(bottom = 50.dp),
            shape = RoundedCornerShape(50.dp),
            backgroundColor = MaterialTheme.colors.secondary
        ) {

            Column(
                modifier = modifier
                    .padding(bottom = 20.dp),
                verticalArrangement = Arrangement.SpaceEvenly,
                horizontalAlignment = Alignment.CenterHorizontally
            ) {

                Text(
                    modifier = modifier
                        .padding(30.dp),
                    text = stringResource(id = R.string.explore_your_world_of_music),
                    style = MaterialTheme.typography.h1,
                    textAlign = TextAlign.Center,
                    color = MaterialTheme.colors.onSecondary
                )

                Text(
                    modifier = modifier
                        .padding(horizontal = 30.dp),
                    text = stringResource(id = R.string.see_trending_songs_from_favs),
                    style = MaterialTheme.typography.caption,
                    textAlign = TextAlign.Center,
                    fontSize = 14.sp,
                    color = MaterialTheme.colors.onSecondary
                )

                Button(
                    modifier = modifier
                        .fillMaxWidth(0.6f)
                        .height(80.dp)
                        .padding(top = 8.dp)
                        .align(Alignment.CenterHorizontally)
                        .padding(8.dp),
                    shape = RoundedCornerShape(50.dp),
                    onClick = {
                        navigator.popBackStack()
                        navigator.navigate(HomeScreenDestination)
                    }
                ) {

                    Text(
                        text = stringResource(id =R.string.get_started),
                        style = MaterialTheme.typography.h3
                    )
                    
                }
            }
        }
    }
}
  • 請(qǐng)注意,我們?cè)诎粹o點(diǎn)擊時(shí)使用 onClick lambda 參數(shù)導(dǎo)航到 HomeScreenDestination。
  • 請(qǐng)確保您已經(jīng)創(chuàng)建了 HomeScreen composable,請(qǐng)檢查 ui/screens/home/HomeScreen。
    它應(yīng)該帶有 @Destination 注解。在成功構(gòu)建后,這將自動(dòng)為您創(chuàng)建 HomeScreenDestination 文件。

Home Screen

如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序

  • 您必須已經(jīng)創(chuàng)建了HomeScreen可組合項(xiàng)(檢查ui/screens/home/HomeScreen.kt
  • 主屏幕基本上由從上到下排列的項(xiàng)目組成——垂直(如上面的黑色箭頭所示)
@Destination(style = StartScreenTransitionAnimation::class)
@Composable
fun HomeScreen(
    navigator: DestinationsNavigator,
    albumDatabaseViewModel: AlbumDatabaseViewModel = hiltViewModel()
){
//--> Home screen layout here
}

個(gè)人而言,我喜歡干凈、可重復(fù)使用的代碼。所以,我不會(huì)將整個(gè)主屏幕項(xiàng)目放在此組合中。我們將創(chuàng)建另一個(gè)名為 HomeScreenItems.kt 的組合,并將其放在我們的 HomeScreen 中。

//HomeScreen.kt
@Destination(style = StartScreenTransitionAnimation::class)
@Composable
fun HomeScreen(
    navigator: DestinationsNavigator,
    albumDatabaseViewModel: AlbumDatabaseViewModel = hiltViewModel()
){

.............// Check full code for other variables

    HomeScreenItems(navigator = navigator, albums = albums.value,
        onCardClicked = {
        shouldOpenAlbumDetails = true
        albumUrl = it
    },
        onPopularAlbumClicked = {
           shouldOpenTrendingAlbums = true
        }
    )

}

這是我們的HomeScreenItems.kt文件

//HomeScreenItems.kt
@Composable
fun HomeScreenItems(
    modifier: Modifier = Modifier,
    navigator: DestinationsNavigator,
    albums: List<Album>,
    albumDatabaseViewModel: AlbumDatabaseViewModel = hiltViewModel(),
    onCardClicked: (String) -> Unit,
    onPopularAlbumClicked: () -> Unit
) {

    ........

}
  • 該可組合接受許多參數(shù)。
    我將強(qiáng)調(diào)一下之前沒(méi)有解釋過(guò)的參數(shù):

  • albums - 來(lái)自Room數(shù)據(jù)庫(kù)實(shí)體/表的專輯列表

  • albumDatabaseViewModel - 數(shù)據(jù)源的viewModel

  • onCardClicked - 當(dāng)卡片被點(diǎn)擊時(shí)調(diào)用的Lambda函數(shù)

  • onPopularAlbumClicked - 當(dāng)點(diǎn)擊熱門(mén)專輯時(shí)調(diào)用的Lambda函數(shù)

  • 由于我們希望我們的主屏幕可以滾動(dòng),并且隨著我們滾動(dòng)逐漸加載項(xiàng)目,因此我們將使用LazyColumn作為根布局。

  • LazyColumn是一個(gè)垂直滾動(dòng)的可組合列表,僅組合和布局當(dāng)前可見(jiàn)的項(xiàng)目。

//HomeScreenItems.kt
@Composable
fun HomeScreenItems(
    modifier: Modifier = Modifier,
    navigator: DestinationsNavigator,
    albums: List<Album>,
    albumDatabaseViewModel: AlbumDatabaseViewModel = hiltViewModel(),
    onCardClicked: (String) -> Unit,
    onPopularAlbumClicked: () -> Unit
) {

    LazyColumn(
        modifier = modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.bgHome)
            .padding(20.dp)
    ){
    
       .........
     
    }

}
  • 因此,我們想在 LazyColumn 中放置什么?非動(dòng)態(tài)內(nèi)容(單個(gè)靜態(tài)項(xiàng))和動(dòng)態(tài)內(nèi)容(變化的項(xiàng))。
  • 從圖3中,您會(huì)發(fā)現(xiàn)藍(lán)色框和綠色框中的項(xiàng)目是非動(dòng)態(tài)內(nèi)容。它們不會(huì)改變。
  • 因此,我們將使用單個(gè)項(xiàng)目 lambda 函數(shù)來(lái)顯示這些項(xiàng)。
  • 每個(gè)部分都有一個(gè)用于顯示 UserHomeSection()、SearchSection()PopularAlbumSection() 的組合體。
//HomeScreenItems.kt 
LazyColumn(
        modifier = modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.bgHome)
            .padding(20.dp)
    ){

        /**
         * Non-Dynamic Items
         */

        item {

            //first section
            UserHomeSection()

            //search home screen
            SearchSection(
                searchTextFieldValue = "",
                onSearchTextFieldValueChange = {  },
                onSearchTextFieldClicked = { navigator.navigate(SearchScreenDestination) },
                searchFieldPlaceHolder = R.string.search_albums,
                searchEnabled = false,
                showKeyboardOnStart = false
            )

            //popular item section
            PopularAlbumSection(
                cardTextTitle = R.string.popular,
                cardTextItem = R.string.top_trending_albums,
                cardImage = R.drawable.ic_character,
                onPopularAlbumCardClicked = {
                    //popular album clicked, go to apple music
                    onPopularAlbumClicked()
                }
            )

        }

      item{

          Text(
              modifier = modifier
                  .fillMaxWidth()
                  .padding(top = 12.dp),
                style = MaterialTheme.typography.h2,
                fontSize = 18.sp,
                color = MaterialTheme.colors.onSecondary,
                text = stringResource(id = R.string.all_albums)
            )

        }

       .................


     }

}
  • 這樣做是為了分離關(guān)注點(diǎn),并且主要是為了可重用性(例如,我可以在應(yīng)用程序的其他位置使用SearchSection可組合部件,而無(wú)需復(fù)制SearchSection可組合部件中的整個(gè)代碼)
  • 實(shí)際上,我在SearchScreen中使用了相同的可組合部件。
  • 請(qǐng)注意,在圖3中,第一個(gè)框標(biāo)記為藍(lán)色。這只是表示項(xiàng)目從左到右(水平)放置。因此,我們需要使用名為Row的可組合部件。
  • Row用于在屏幕上水平放置項(xiàng)目。
  • 現(xiàn)在,對(duì)于我們從Room數(shù)據(jù)庫(kù)獲取的動(dòng)態(tài)項(xiàng)目,我們將使用稱為items的lambda函數(shù)來(lái)顯示它們。
    我們完整的HomeScreenItems.kt如下:
//HomeScreenItems.kt
@Composable
fun HomeScreenItems(
    modifier: Modifier = Modifier,
    navigator: DestinationsNavigator,
    albums: List<Album>,
    albumDatabaseViewModel: AlbumDatabaseViewModel = hiltViewModel(),
    onCardClicked: (String) -> Unit,
    onPopularAlbumClicked: () -> Unit
) {

    LazyColumn(
        modifier = modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.bgHome)
            .padding(20.dp)
    ){

        /**
         * Non-Dynamic Items
         */

        item {

            //first section
            UserHomeSection()

            //search home screen
            SearchSection(
                searchTextFieldValue = "",
                onSearchTextFieldValueChange = {  },
                onSearchTextFieldClicked = { navigator.navigate(SearchScreenDestination) },
                searchFieldPlaceHolder = R.string.search_albums,
                searchEnabled = false,
                showKeyboardOnStart = false
            )

            //popular item section
            PopularAlbumSection(
                cardTextTitle = R.string.popular,
                cardTextItem = R.string.top_trending_albums,
                cardImage = R.drawable.ic_character,
                onPopularAlbumCardClicked = {
                    //popular album clicked, go to apple music
                    onPopularAlbumClicked()
                }
            )

        }

        /**
         * Dynamic Items
         */

        item{

            Text(
                modifier = modifier
                    .fillMaxWidth()
                    .padding(top = 12.dp),
                style = MaterialTheme.typography.h2,
                fontSize = 18.sp,
                color = MaterialTheme.colors.onSecondary,
                text = stringResource(id = R.string.all_albums)
            )

        }


        items(items = albums){ album->

            AlbumCard(
                album = album,
                onClickCard = { albumUrl->
                  //card clicked, go to details screen
                    onCardClicked(albumUrl)
                },
                onClickLike = { isLiked, albumId->
                    albumDatabaseViewModel.doUpdateAlbumLikedStatus(!isLiked, albumId)
                }
            )

        }

    }

}

我創(chuàng)建了一個(gè)名為AlbumCard的可重復(fù)使用的可組合項(xiàng),我們可以將其用作顯示所有動(dòng)態(tài)項(xiàng)目的模型。
確保檢查完整代碼以正確理解其工作原理。

我希望我已經(jīng)能夠解釋基本 UI 如何與 Jetpack Compose 一起工作。有關(guān) UI 的更多信息,請(qǐng)查看官方文檔

github代碼網(wǎng)址

https://github.com/ibrajix/MyMusic

參考

https://ibrajix.medium.com/how-i-built-this-nice-looking-app-using-jetpack-compose-3974db7eb9e文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-436638.html

到了這里,關(guān)于如何是Jetpack Compose構(gòu)建漂亮的應(yīng)用程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解釋 RESTful API,以及如何使用它構(gòu)建 web 應(yīng)用程序

    ???????? RESTful API stands for Representational State Transfer Application Programming Interface. It is a set of principles and guidelines for building web services that provide data in a standard format, typically JSON or XML. RESTful API emphasizes on uniformity, scalability, reliability, performance, and flexibility. It operates on HTTP and follo

    2024年02月14日
    瀏覽(38)
  • 解釋 RESTful API,以及如何使用它構(gòu)建 web 應(yīng)用程序。

    RESTful API是一種利用HTTP協(xié)議進(jìn)行通信的Web API設(shè)計(jì)風(fēng)格,它采用了一組統(tǒng)一且可緩存的操作,包括GET、POST、PUT、DELETE等,通過(guò)URL來(lái)定位資源,以及使用JSON、XML等格式來(lái)傳輸數(shù)據(jù),以實(shí)現(xiàn)系統(tǒng)之間的數(shù)據(jù)交互和資源共享。 使用RESTful API構(gòu)建Web應(yīng)用程序,首先需要設(shè)計(jì)API的URL、

    2024年02月11日
    瀏覽(41)
  • 什么是RESTful API,以及如何它使用構(gòu)建 web 應(yīng)用程序(InsCode AI 創(chuàng)作助手)

    RESTful API 是一種基于 REST(Representational State Transfer,表征狀態(tài)轉(zhuǎn)移) 架構(gòu)風(fēng)格的 API,它使用 HTTP 協(xié)議的方法(GET,POST,PUT,DELETE)來(lái)實(shí)現(xiàn)資源的創(chuàng)建、讀取、更新和刪除。通過(guò)這種方式,API 可以更加簡(jiǎn)單和靈活,使得不同編程語(yǔ)言之間的交互更加容易。 使用 RESTful API 構(gòu)建

    2024年02月09日
    瀏覽(33)
  • Nest的基本概念,以及如何使用Nest CLI來(lái)構(gòu)建一個(gè)簡(jiǎn)單的Web應(yīng)用程序

    Nest是一個(gè)用于構(gòu)建高效、可擴(kuò)展的Node.js服務(wù)器端應(yīng)用程序的框架。它是基于Express.js構(gòu)建的,并且提供了多種新特性和抽象層,可以讓開(kāi)發(fā)者更加輕松地構(gòu)建復(fù)雜的應(yīng)用程序。 本文將介紹Nest的基本概念,以及如何使用Nest CLI來(lái)構(gòu)建一個(gè)簡(jiǎn)單的Web應(yīng)用程序。 模塊 在Nest中,模塊

    2024年02月02日
    瀏覽(28)
  • idea使用docker-compose發(fā)布應(yīng)用程序

    idea使用docker-compose發(fā)布應(yīng)用程序

    idea要想使用docker-compose,不能使用ssh創(chuàng)建idea Docker,而需要使用socket創(chuàng)建idea Docker。 socket docker是不安全的,任何人都可以訪問(wèn)你的docker,所以只能測(cè)試環(huán)境使用,請(qǐng)勿在正式環(huán)境使用socket docker。 云服務(wù)器安全組開(kāi)放2375端口,如果不是云服務(wù)器則自己修改防火墻規(guī)則開(kāi)放237

    2024年02月02日
    瀏覽(21)
  • Flutter中的Web應(yīng)用程序開(kāi)發(fā):構(gòu)建現(xiàn)代Web應(yīng)用程序

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 作為人工智能專家,程序員和軟件架構(gòu)師,CTO,我今天將為大家分享有關(guān) Flutter 中 Web 應(yīng)用程序開(kāi)發(fā)的見(jiàn)解。在這篇文章中,我們將深入探討 Flutter Web 應(yīng)用程序的開(kāi)發(fā)過(guò)程、技術(shù)原理以及最佳實(shí)踐。 引言 隨著移動(dòng)設(shè)備的普及,Web 應(yīng)用程序在全

    2024年02月12日
    瀏覽(33)
  • 【Serverless Web 應(yīng)用程序】構(gòu)建流程

    【Serverless Web 應(yīng)用程序】構(gòu)建流程

    【1】選擇構(gòu)建 Serverless Web 應(yīng)用程序,程序架構(gòu)如下所示: 【2】開(kāi)發(fā)流程 【2.1】靜態(tài) Web 托管與持續(xù)部署: 所有的靜態(tài)網(wǎng)頁(yè)內(nèi)容(HTML、CSS、JavaScript、圖 像)和其他文件將由 AWS Amplify 控制臺(tái)管理。用戶將使用 AWS Amplify 控制 臺(tái)公開(kāi)的公共網(wǎng)站 URL 訪問(wèn) Web。不需要額外運(yùn)行

    2024年02月03日
    瀏覽(35)
  • 基于aws構(gòu)建一個(gè)web應(yīng)用程序

    基于aws構(gòu)建一個(gè)web應(yīng)用程序

    經(jīng)驗(yàn)帖以及個(gè)人總結(jié)。 一. 在創(chuàng)建EC2主機(jī)前,可先行創(chuàng)建密匙以及安全組。 關(guān)于安全組: 1. 入站規(guī)則(別人訪問(wèn)你做的一些限制) :開(kāi)放ssh 端口。是為了可以進(jìn)行l(wèi)inux相關(guān)的連接。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?開(kāi)放http端口。

    2024年02月08日
    瀏覽(29)
  • vite + electron 構(gòu)建前端桌面應(yīng)用程序

    vite + electron 構(gòu)建前端桌面應(yīng)用程序

    npm yarn 選擇是否繼續(xù) 項(xiàng)目名稱 選擇框架 選擇項(xiàng)目語(yǔ)言 項(xiàng)目構(gòu)建成功,根據(jù)提示進(jìn)入項(xiàng)目目錄,安裝依賴 electron 官網(wǎng):https://www.electronjs.org/zh/docs/latest/ vite-plugin-electron :https://github.com/electron-vite/vite-plugin-electron 安裝依賴(electron 安裝比較慢,耐心等待即可) 編寫(xiě) Electron 入

    2024年02月06日
    瀏覽(20)
  • 使用Docker構(gòu)建分布式應(yīng)用程序

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的Linux或Windows機(jī)器上,也可以實(shí)現(xiàn)虛擬化。 傳統(tǒng)的應(yīng)用分為三層結(jié)構(gòu):應(yīng)用運(yùn)行環(huán)境、應(yīng)用邏輯和資源管理,Doc

    2024年02月08日
    瀏覽(104)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包